ForgeFlow-ERP/backend/sql/jiaheng_erp_schema.sql
2026-06-12 16:00:56 +08:00

1094 lines
64 KiB
SQL
Raw Permalink 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.

CREATE DATABASE IF NOT EXISTS jiaheng_erp
DEFAULT CHARACTER SET utf8mb4
DEFAULT COLLATE utf8mb4_unicode_ci;
USE jiaheng_erp;
SET NAMES utf8mb4;
CREATE TABLE IF NOT EXISTS sys_department (
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID',
dept_code VARCHAR(50) NOT NULL UNIQUE COMMENT '部门编码',
dept_name VARCHAR(100) NOT NULL COMMENT '部门名称',
parent_id BIGINT NULL COMMENT '上级ID',
org_node_type VARCHAR(32) NOT NULL DEFAULT 'DEPARTMENT' COMMENT '组织节点类型COMPANY/BRANCH/DEPARTMENT/GROUP',
dept_type VARCHAR(32) NOT NULL COMMENT '部门类型ADMIN/SALES/PURCHASE/WAREHOUSE/PRODUCTION/FINANCE/EQUIPMENT',
manager_name VARCHAR(100) NULL COMMENT '负责人姓名',
manager_employee_id BIGINT NULL COMMENT '负责人员工ID',
status VARCHAR(32) NOT NULL DEFAULT 'ACTIVE' COMMENT '状态',
sort_no INT NOT NULL DEFAULT 0 COMMENT '排序号',
remark VARCHAR(255) NULL COMMENT '备注',
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
KEY idx_department_parent_sort (parent_id, sort_no, id),
FOREIGN KEY (parent_id) REFERENCES sys_department(id)
) ENGINE=InnoDB COMMENT='部门表';
CREATE TABLE IF NOT EXISTS hr_employee (
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID',
employee_code VARCHAR(50) NOT NULL UNIQUE COMMENT '员工编码',
employee_name VARCHAR(100) NOT NULL COMMENT '员工姓名',
dept_id BIGINT NOT NULL COMMENT '部门ID',
mobile VARCHAR(30) NULL COMMENT '手机号',
gender VARCHAR(16) NULL COMMENT '性别',
hire_date DATE NULL COMMENT '入职日期',
job_title VARCHAR(100) NULL COMMENT '岗位名称',
shift_code VARCHAR(32) NULL COMMENT '班次编码',
manager_employee_id BIGINT NULL COMMENT '上级员工ID',
is_operator TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否操作工',
is_workshop_staff TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否车间人员',
status VARCHAR(32) NOT NULL DEFAULT 'ACTIVE' COMMENT '状态',
remark VARCHAR(255) NULL COMMENT '备注',
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
FOREIGN KEY (dept_id) REFERENCES sys_department(id),
FOREIGN KEY (manager_employee_id) REFERENCES hr_employee(id)
) ENGINE=InnoDB COMMENT='员工表';
CREATE TABLE IF NOT EXISTS sys_role (
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID',
role_code VARCHAR(50) NOT NULL UNIQUE COMMENT '角色编码',
role_name VARCHAR(100) NOT NULL COMMENT '角色名称',
role_scope VARCHAR(32) NOT NULL DEFAULT 'SYSTEM' COMMENT '角色范围',
status VARCHAR(32) NOT NULL DEFAULT 'ACTIVE' COMMENT '状态',
remark VARCHAR(255) NULL COMMENT '备注',
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'
) ENGINE=InnoDB COMMENT='角色表';
CREATE TABLE IF NOT EXISTS sys_permission (
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID',
permission_code VARCHAR(100) NOT NULL UNIQUE COMMENT '权限编码',
permission_name VARCHAR(100) NOT NULL COMMENT '权限名称',
module_code VARCHAR(50) NOT NULL COMMENT '模块编码',
action_code VARCHAR(50) NOT NULL COMMENT '操作编码',
status VARCHAR(32) NOT NULL DEFAULT 'ACTIVE' COMMENT '状态',
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'
) ENGINE=InnoDB COMMENT='权限点表';
CREATE TABLE IF NOT EXISTS sys_role_permission (
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID',
role_id BIGINT NOT NULL COMMENT '角色ID',
permission_id BIGINT NOT NULL COMMENT '权限ID',
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
UNIQUE KEY uk_role_permission (role_id, permission_id),
FOREIGN KEY (role_id) REFERENCES sys_role(id),
FOREIGN KEY (permission_id) REFERENCES sys_permission(id)
) ENGINE=InnoDB COMMENT='角色权限关系表';
CREATE TABLE IF NOT EXISTS sys_user (
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID',
username VARCHAR(50) NOT NULL UNIQUE COMMENT '登录账号',
password_hash VARCHAR(255) NOT NULL COMMENT '密码哈希',
employee_id BIGINT NOT NULL COMMENT '员工ID',
dept_id BIGINT NOT NULL COMMENT '部门ID',
nickname VARCHAR(100) NULL COMMENT '昵称',
email VARCHAR(100) NULL COMMENT '邮箱',
is_super_admin TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否超级管理员',
last_login_at DATETIME NULL COMMENT '最后登录时间',
status VARCHAR(32) NOT NULL DEFAULT 'ACTIVE' COMMENT '状态',
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
FOREIGN KEY (employee_id) REFERENCES hr_employee(id),
FOREIGN KEY (dept_id) REFERENCES sys_department(id)
) ENGINE=InnoDB COMMENT='系统用户表';
CREATE TABLE IF NOT EXISTS sys_user_role (
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID',
user_id BIGINT NOT NULL COMMENT '用户ID',
role_id BIGINT NOT NULL COMMENT '角色ID',
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
UNIQUE KEY uk_user_role (user_id, role_id),
FOREIGN KEY (user_id) REFERENCES sys_user(id),
FOREIGN KEY (role_id) REFERENCES sys_role(id)
) ENGINE=InnoDB COMMENT='用户角色关系表';
CREATE TABLE IF NOT EXISTS sys_org_employee_binding (
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID',
dept_id BIGINT NOT NULL COMMENT '组织脑图节点ID',
employee_id BIGINT NOT NULL COMMENT '人员ID',
sort_no INT NOT NULL DEFAULT 0 COMMENT '排序号',
status VARCHAR(32) NOT NULL DEFAULT 'ACTIVE' COMMENT '状态',
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
UNIQUE KEY uk_org_employee_binding (dept_id, employee_id),
KEY idx_org_employee_binding_dept (dept_id, sort_no, id),
KEY idx_org_employee_binding_employee (employee_id),
FOREIGN KEY (dept_id) REFERENCES sys_department(id),
FOREIGN KEY (employee_id) REFERENCES hr_employee(id)
) ENGINE=InnoDB COMMENT='系统权限组织脑图人员绑定表';
CREATE TABLE IF NOT EXISTS sys_org_manager_binding (
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID',
dept_id BIGINT NOT NULL COMMENT '组织脑图节点ID',
employee_id BIGINT NOT NULL COMMENT '主管人员ID',
sort_no INT NOT NULL DEFAULT 0 COMMENT '排序号',
status VARCHAR(32) NOT NULL DEFAULT 'ACTIVE' COMMENT '状态',
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
UNIQUE KEY uk_org_manager_binding (dept_id, employee_id),
KEY idx_org_manager_binding_dept (dept_id, sort_no, id),
KEY idx_org_manager_binding_employee (employee_id),
FOREIGN KEY (dept_id) REFERENCES sys_department(id),
FOREIGN KEY (employee_id) REFERENCES hr_employee(id)
) ENGINE=InnoDB COMMENT='系统权限组织脑图主管绑定表';
CREATE TABLE IF NOT EXISTS sys_broadcast_message (
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID',
title VARCHAR(100) NOT NULL COMMENT '广播标题',
content VARCHAR(500) NOT NULL COMMENT '广播内容',
tone VARCHAR(32) NOT NULL DEFAULT 'INFO' COMMENT '提示类型INFO/SUCCESS/WARNING/DANGER',
status VARCHAR(32) NOT NULL DEFAULT 'ACTIVE' COMMENT '状态ACTIVE/PAUSED',
starts_at DATETIME NULL COMMENT '开始展示时间',
ends_at DATETIME NULL COMMENT '结束展示时间',
sort_no INT NOT NULL DEFAULT 0 COMMENT '排序号,越大越优先',
created_by BIGINT NULL COMMENT '创建用户ID',
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
KEY idx_broadcast_status_time (status, starts_at, ends_at),
FOREIGN KEY (created_by) REFERENCES sys_user(id)
) ENGINE=InnoDB COMMENT='系统广播消息';
CREATE TABLE IF NOT EXISTS sys_ai_assistant_config (
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID',
assistant_name VARCHAR(100) NOT NULL DEFAULT '嘉恒工艺助手' COMMENT '助手名称',
provider_name VARCHAR(100) NULL COMMENT 'LLM供应商名称',
api_base_url VARCHAR(255) NULL COMMENT 'LLM API基础地址',
api_key VARCHAR(512) NULL COMMENT 'LLM API密钥',
model_name VARCHAR(100) NULL COMMENT '模型名称',
temperature DECIMAL(6,3) NOT NULL DEFAULT 0.300 COMMENT '温度参数',
system_prompt TEXT NULL COMMENT '新建对话系统提示词',
enabled TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否启用真实LLM',
created_by BIGINT NULL COMMENT '创建用户ID',
updated_by BIGINT NULL COMMENT '更新用户ID',
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
FOREIGN KEY (created_by) REFERENCES sys_user(id),
FOREIGN KEY (updated_by) REFERENCES sys_user(id)
) ENGINE=InnoDB COMMENT='AI助手配置';
CREATE TABLE IF NOT EXISTS md_unit (
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID',
unit_code VARCHAR(50) NOT NULL UNIQUE COMMENT '单位编码',
unit_name VARCHAR(50) NOT NULL COMMENT '单位名称',
precision_digits INT NOT NULL DEFAULT 3 COMMENT '小数精度位数',
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'
) ENGINE=InnoDB COMMENT='计量单位';
CREATE TABLE IF NOT EXISTS md_customer (
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID',
customer_code VARCHAR(50) NOT NULL UNIQUE COMMENT '客户编码',
customer_name VARCHAR(200) NOT NULL COMMENT '客户名称',
short_name VARCHAR(100) NULL COMMENT '简称',
contact_name VARCHAR(100) NULL COMMENT '联系人',
contact_phone VARCHAR(50) NULL COMMENT '联系电话',
address VARCHAR(255) NULL COMMENT '地址',
tax_no VARCHAR(100) NULL COMMENT '税号',
credit_days INT NOT NULL DEFAULT 0 COMMENT '账期天数',
status VARCHAR(32) NOT NULL DEFAULT 'ACTIVE' COMMENT '状态',
remark VARCHAR(255) NULL COMMENT '备注',
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'
) ENGINE=InnoDB COMMENT='客户主档';
CREATE TABLE IF NOT EXISTS md_supplier (
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID',
supplier_code VARCHAR(50) NOT NULL UNIQUE COMMENT '供应商编码',
supplier_name VARCHAR(200) NOT NULL COMMENT '供应商名称',
short_name VARCHAR(100) NULL COMMENT '简称',
contact_name VARCHAR(100) NULL COMMENT '联系人',
contact_phone VARCHAR(50) NULL COMMENT '联系电话',
address VARCHAR(255) NULL COMMENT '地址',
lead_time_days INT NOT NULL DEFAULT 0 COMMENT '采购提前期天数',
default_tax_rate DECIMAL(8,4) NOT NULL DEFAULT 0 COMMENT '默认税率',
status VARCHAR(32) NOT NULL DEFAULT 'ACTIVE' COMMENT '状态',
remark VARCHAR(255) NULL COMMENT '备注',
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'
) ENGINE=InnoDB COMMENT='供应商主档';
CREATE TABLE IF NOT EXISTS md_item_category (
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID',
category_code VARCHAR(50) NOT NULL UNIQUE COMMENT '分类编码',
category_name VARCHAR(100) NOT NULL COMMENT '分类名称',
parent_id BIGINT NULL COMMENT '上级ID',
item_type VARCHAR(32) NOT NULL COMMENT '物料类型',
sort_no INT NOT NULL DEFAULT 0 COMMENT '排序号',
status VARCHAR(32) NOT NULL DEFAULT 'ACTIVE' COMMENT '状态',
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
FOREIGN KEY (parent_id) REFERENCES md_item_category(id)
) ENGINE=InnoDB COMMENT='物料分类';
CREATE TABLE IF NOT EXISTS md_item (
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID',
item_code VARCHAR(50) NOT NULL COMMENT '物料编码',
item_name VARCHAR(200) NOT NULL COMMENT '物料名称',
item_type VARCHAR(32) NOT NULL COMMENT '物料类型RAW_MATERIAL/FINISHED_GOOD/SEMI_FINISHED/SCRAP/SPARE_PART',
category_id BIGINT NULL COMMENT '分类ID',
specification VARCHAR(200) NULL COMMENT '规格',
model_no VARCHAR(100) NULL COMMENT '型号',
material_type VARCHAR(100) NULL COMMENT '材料类型',
material_grade VARCHAR(100) NULL COMMENT '材质牌号',
length_mm DECIMAL(18,3) NOT NULL DEFAULT 0 COMMENT '长度(mm)',
width_mm DECIMAL(18,3) NOT NULL DEFAULT 0 COMMENT '宽度(mm)',
thickness_mm DECIMAL(18,3) NOT NULL DEFAULT 0 COMMENT '厚度(mm)',
density_kg_m3 DECIMAL(18,3) NOT NULL DEFAULT 0 COMMENT '密度(kg/m3)',
theoretical_weight_kg DECIMAL(18,6) NOT NULL DEFAULT 0 COMMENT '理论重量(kg)',
unit_weight_kg DECIMAL(18,6) NOT NULL DEFAULT 0 COMMENT '实际管理用单件或单批重量',
sales_unit_id BIGINT NULL COMMENT '销售单位ID',
stock_unit_id BIGINT NULL COMMENT '库存单位ID',
purchase_unit_id BIGINT NULL COMMENT '采购单位ID',
safety_stock_qty DECIMAL(18,6) NOT NULL DEFAULT 0 COMMENT '安全库存数量',
safety_stock_weight_kg DECIMAL(18,6) NOT NULL DEFAULT 0 COMMENT '安全库存重量(kg)',
scrap_sale_price DECIMAL(18,4) NOT NULL DEFAULT 0 COMMENT '废料销售单价',
status VARCHAR(32) NOT NULL DEFAULT 'ACTIVE' COMMENT '状态',
remark VARCHAR(255) NULL COMMENT '备注',
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
FOREIGN KEY (category_id) REFERENCES md_item_category(id),
FOREIGN KEY (sales_unit_id) REFERENCES md_unit(id),
FOREIGN KEY (stock_unit_id) REFERENCES md_unit(id),
FOREIGN KEY (purchase_unit_id) REFERENCES md_unit(id),
INDEX idx_md_item_code (item_code),
INDEX idx_md_item_type (item_type),
INDEX idx_md_item_category (category_id)
) ENGINE=InnoDB COMMENT='统一物料主档';
CREATE TABLE IF NOT EXISTS md_material (
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID',
item_id BIGINT NOT NULL UNIQUE COMMENT '物料ID',
default_supplier_id BIGINT NULL COMMENT '默认供应商ID',
purchase_calc_mode VARCHAR(32) NOT NULL DEFAULT 'BY_WEIGHT' COMMENT '采购计算方式',
min_purchase_qty DECIMAL(18,6) NOT NULL DEFAULT 0 COMMENT '最小采购数量',
purchase_multiple_qty DECIMAL(18,6) NOT NULL DEFAULT 0 COMMENT '采购倍数数量',
purchase_multiple_weight_kg DECIMAL(18,6) NOT NULL DEFAULT 0 COMMENT '采购倍数重量(kg)',
lead_time_days INT NOT NULL DEFAULT 0 COMMENT '采购提前期天数',
quality_rule VARCHAR(255) NULL COMMENT '质检规则',
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
FOREIGN KEY (item_id) REFERENCES md_item(id),
FOREIGN KEY (default_supplier_id) REFERENCES md_supplier(id)
) ENGINE=InnoDB COMMENT='原材料扩展信息';
CREATE TABLE IF NOT EXISTS md_product (
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID',
item_id BIGINT NOT NULL UNIQUE COMMENT '物料ID',
drawing_no VARCHAR(100) NULL COMMENT '图号',
product_family VARCHAR(100) NULL COMMENT '产品系列',
version_no VARCHAR(50) NOT NULL DEFAULT 'V1.0' COMMENT '版本号',
standard_output_qty DECIMAL(18,6) NOT NULL DEFAULT 0 COMMENT '标准产出数量',
allowed_scrap_rate DECIMAL(8,4) NOT NULL DEFAULT 0 COMMENT '允许报废率',
quality_standard VARCHAR(255) NULL COMMENT '质量标准',
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
FOREIGN KEY (item_id) REFERENCES md_item(id)
) ENGINE=InnoDB COMMENT='产品扩展信息';
CREATE TABLE IF NOT EXISTS md_process (
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID',
process_code VARCHAR(50) NOT NULL UNIQUE COMMENT '工序编码',
process_name VARCHAR(100) NOT NULL COMMENT '工序名称',
process_type VARCHAR(50) NOT NULL COMMENT '工序类型',
is_report_required TINYINT(1) NOT NULL DEFAULT 1 COMMENT '是否必须报工',
is_quality_gate TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否质量关卡',
status VARCHAR(32) NOT NULL DEFAULT 'ACTIVE' COMMENT '状态',
remark VARCHAR(255) NULL COMMENT '备注',
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'
) ENGINE=InnoDB COMMENT='标准工序';
CREATE TABLE IF NOT EXISTS md_work_center (
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID',
center_code VARCHAR(50) NOT NULL UNIQUE COMMENT '工作中心编码',
center_name VARCHAR(100) NOT NULL COMMENT '工作中心名称',
dept_id BIGINT NOT NULL COMMENT '部门ID',
center_type VARCHAR(50) NOT NULL COMMENT '工作中心类型',
shift_pattern VARCHAR(50) NULL COMMENT '班制',
capacity_hours_per_day DECIMAL(18,2) NOT NULL DEFAULT 0 COMMENT '日产能工时',
status VARCHAR(32) NOT NULL DEFAULT 'ACTIVE' COMMENT '状态',
remark VARCHAR(255) NULL COMMENT '备注',
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
FOREIGN KEY (dept_id) REFERENCES sys_department(id)
) ENGINE=InnoDB COMMENT='工作中心';
CREATE TABLE IF NOT EXISTS md_process_route (
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID',
route_code VARCHAR(50) NOT NULL COMMENT '工艺路线编码',
route_name VARCHAR(100) NOT NULL COMMENT '工艺路线名称',
product_item_id BIGINT NOT NULL COMMENT '产品物料ID',
version_no VARCHAR(50) NOT NULL DEFAULT 'V1.0' COMMENT '版本号',
is_default TINYINT(1) NOT NULL DEFAULT 1 COMMENT '是否默认',
status VARCHAR(32) NOT NULL DEFAULT 'ACTIVE' COMMENT '状态',
effective_date DATE NULL COMMENT '生效日期',
expire_date DATE NULL COMMENT '失效日期',
remark VARCHAR(255) NULL COMMENT '备注',
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
UNIQUE KEY uk_route_code_version (route_code, version_no),
FOREIGN KEY (product_item_id) REFERENCES md_item(id),
INDEX idx_route_product (product_item_id)
) ENGINE=InnoDB COMMENT='产品工艺路线';
CREATE TABLE IF NOT EXISTS md_process_route_operation (
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID',
route_id BIGINT NOT NULL COMMENT '工艺路线ID',
seq_no INT NOT NULL COMMENT '序号',
process_id BIGINT NOT NULL COMMENT '工序ID',
work_center_id BIGINT NOT NULL COMMENT '工作中心ID',
operation_name VARCHAR(100) NOT NULL COMMENT '工序名称',
std_setup_minutes DECIMAL(18,2) NOT NULL DEFAULT 0 COMMENT '标准准备时长(分钟)',
std_cycle_seconds DECIMAL(18,2) NOT NULL DEFAULT 0 COMMENT '标准节拍(秒/件)',
std_labor_cost DECIMAL(18,4) NOT NULL DEFAULT 0 COMMENT '标准人工成本',
std_machine_cost DECIMAL(18,4) NOT NULL DEFAULT 0 COMMENT '标准设备成本',
std_outsource_cost DECIMAL(18,4) NOT NULL DEFAULT 0 COMMENT '标准委外成本',
allowed_scrap_rate DECIMAL(8,4) NOT NULL DEFAULT 0 COMMENT '允许报废率',
report_required TINYINT(1) NOT NULL DEFAULT 1 COMMENT '是否要求报工',
is_key_operation TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否关键工序',
status VARCHAR(32) NOT NULL DEFAULT 'ACTIVE' COMMENT '状态',
remark VARCHAR(255) NULL COMMENT '备注',
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
UNIQUE KEY uk_route_seq (route_id, seq_no),
FOREIGN KEY (route_id) REFERENCES md_process_route(id),
FOREIGN KEY (process_id) REFERENCES md_process(id),
FOREIGN KEY (work_center_id) REFERENCES md_work_center(id)
) ENGINE=InnoDB COMMENT='工艺路线工序明细';
CREATE TABLE IF NOT EXISTS md_bom (
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID',
bom_code VARCHAR(50) NOT NULL COMMENT 'BOM编码',
product_item_id BIGINT NOT NULL COMMENT '产品物料ID',
version_no VARCHAR(50) NOT NULL DEFAULT 'V1.0' COMMENT '版本号',
is_default TINYINT(1) NOT NULL DEFAULT 1 COMMENT '是否默认',
status VARCHAR(32) NOT NULL DEFAULT 'ACTIVE' COMMENT '状态',
effective_date DATE NULL COMMENT '生效日期',
expire_date DATE NULL COMMENT '失效日期',
remark VARCHAR(255) NULL COMMENT '备注',
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
UNIQUE KEY uk_bom_code_version (bom_code, version_no),
FOREIGN KEY (product_item_id) REFERENCES md_item(id),
INDEX idx_bom_product (product_item_id)
) ENGINE=InnoDB COMMENT='BOM 主表';
CREATE TABLE IF NOT EXISTS md_bom_item (
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID',
bom_id BIGINT NOT NULL COMMENT 'BOM ID',
seq_no INT NOT NULL COMMENT '序号',
material_item_id BIGINT NOT NULL COMMENT '原材料物料ID',
usage_type VARCHAR(32) NOT NULL DEFAULT 'WEIGHT' COMMENT '用量类型WEIGHT/FIXED_QTY',
qty_per_piece DECIMAL(18,6) NOT NULL DEFAULT 0 COMMENT '单件用量',
net_weight_per_piece_kg DECIMAL(18,6) NOT NULL DEFAULT 0 COMMENT '单件净重(kg)',
gross_weight_per_piece_kg DECIMAL(18,6) NOT NULL DEFAULT 0 COMMENT '单件毛重(kg)',
loss_rate DECIMAL(8,4) NOT NULL DEFAULT 0 COMMENT '损耗率',
issue_over_tolerance_rate DECIMAL(8,4) NOT NULL DEFAULT 0 COMMENT '领料超发容差率',
remark VARCHAR(255) NULL COMMENT '备注',
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
UNIQUE KEY uk_bom_seq (bom_id, seq_no),
FOREIGN KEY (bom_id) REFERENCES md_bom(id),
FOREIGN KEY (material_item_id) REFERENCES md_item(id)
) ENGINE=InnoDB COMMENT='BOM 明细';
CREATE TABLE IF NOT EXISTS em_equipment (
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID',
equipment_code VARCHAR(50) NOT NULL UNIQUE COMMENT '设备编码',
equipment_name VARCHAR(100) NOT NULL COMMENT '设备名称',
category_name VARCHAR(100) NULL COMMENT '分类名称',
work_center_id BIGINT NOT NULL COMMENT '工作中心ID',
manufacturer VARCHAR(100) NULL COMMENT '制造商',
model_no VARCHAR(100) NULL COMMENT '型号',
install_date DATE NULL COMMENT '安装日期',
rated_power_kw DECIMAL(18,2) NOT NULL DEFAULT 0 COMMENT '额定功率(kW)',
occupied_area_sqm DECIMAL(18,2) NOT NULL DEFAULT 0 COMMENT '占用场地面积(平方米)',
maintenance_cycle_hours DECIMAL(18,2) NOT NULL DEFAULT 0 COMMENT '保养周期(小时)',
last_maintenance_at DATETIME NULL COMMENT '上次保养时间',
next_maintenance_at DATETIME NULL COMMENT '下次保养时间',
status VARCHAR(32) NOT NULL DEFAULT 'IDLE' COMMENT '状态',
remark VARCHAR(255) NULL COMMENT '备注',
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
FOREIGN KEY (work_center_id) REFERENCES md_work_center(id)
) ENGINE=InnoDB COMMENT='设备台账';
CREATE TABLE IF NOT EXISTS em_maintenance_plan (
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID',
plan_code VARCHAR(50) NOT NULL UNIQUE COMMENT '计划编码',
equipment_id BIGINT NOT NULL COMMENT '设备ID',
plan_name VARCHAR(100) NOT NULL COMMENT '计划名称',
maintenance_type VARCHAR(32) NOT NULL COMMENT '保养类型',
cycle_hours DECIMAL(18,2) NOT NULL DEFAULT 0 COMMENT '周期小时数',
cycle_days INT NOT NULL DEFAULT 0 COMMENT '周期天数',
last_execute_at DATETIME NULL COMMENT '上次执行时间',
next_execute_at DATETIME NULL COMMENT '下次执行时间',
status VARCHAR(32) NOT NULL DEFAULT 'ACTIVE' COMMENT '状态',
remark VARCHAR(255) NULL COMMENT '备注',
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
FOREIGN KEY (equipment_id) REFERENCES em_equipment(id)
) ENGINE=InnoDB COMMENT='设备保养计划';
CREATE TABLE IF NOT EXISTS em_maintenance_order (
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID',
order_no VARCHAR(50) NOT NULL UNIQUE COMMENT '单据号',
equipment_id BIGINT NOT NULL COMMENT '设备ID',
plan_id BIGINT NULL COMMENT '计划ID',
maintenance_type VARCHAR(32) NOT NULL COMMENT '保养类型',
start_time DATETIME NULL COMMENT '开始时间',
end_time DATETIME NULL COMMENT '结束时间',
downtime_minutes DECIMAL(18,2) NOT NULL DEFAULT 0 COMMENT '停机时长(分钟)',
owner_employee_id BIGINT NULL COMMENT '负责人员工ID',
result_summary VARCHAR(255) NULL COMMENT '结果摘要',
cost_amount DECIMAL(18,2) NOT NULL DEFAULT 0 COMMENT '成本金额',
status VARCHAR(32) NOT NULL DEFAULT 'CREATED' COMMENT '状态',
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
FOREIGN KEY (equipment_id) REFERENCES em_equipment(id),
FOREIGN KEY (plan_id) REFERENCES em_maintenance_plan(id),
FOREIGN KEY (owner_employee_id) REFERENCES hr_employee(id)
) ENGINE=InnoDB COMMENT='设备保养维修工单';
CREATE TABLE IF NOT EXISTS so_sales_order (
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID',
order_no VARCHAR(50) NOT NULL UNIQUE COMMENT '单据号',
customer_id BIGINT NOT NULL COMMENT '客户ID',
order_date DATE NOT NULL COMMENT '订单日期',
promised_date DATE NULL COMMENT '承诺交期',
sales_employee_id BIGINT NULL COMMENT '销售员员工ID',
delivery_address VARCHAR(255) NULL COMMENT '送货地址',
tax_rate DECIMAL(8,4) NOT NULL DEFAULT 0 COMMENT '税率',
total_amount DECIMAL(18,2) NOT NULL DEFAULT 0 COMMENT '总金额',
status VARCHAR(32) NOT NULL DEFAULT 'DRAFT' COMMENT '状态',
remark VARCHAR(255) NULL COMMENT '备注',
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
FOREIGN KEY (customer_id) REFERENCES md_customer(id),
FOREIGN KEY (sales_employee_id) REFERENCES hr_employee(id),
INDEX idx_so_customer (customer_id),
INDEX idx_so_order_date (order_date)
) ENGINE=InnoDB COMMENT='订单头';
CREATE TABLE IF NOT EXISTS so_sales_order_item (
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID',
sales_order_id BIGINT NOT NULL COMMENT '订单ID',
line_no INT NOT NULL COMMENT '行号',
product_item_id BIGINT NOT NULL COMMENT '产品物料ID',
customer_part_no VARCHAR(100) NULL COMMENT '客户料号',
order_qty DECIMAL(18,6) NOT NULL DEFAULT 0 COMMENT '订单数量',
delivered_qty DECIMAL(18,6) NOT NULL DEFAULT 0 COMMENT '已发货数量',
unit_price DECIMAL(18,4) NOT NULL DEFAULT 0 COMMENT '单价',
line_amount DECIMAL(18,2) NOT NULL DEFAULT 0 COMMENT '行金额',
promised_date DATE NULL COMMENT '承诺交期',
status VARCHAR(32) NOT NULL DEFAULT 'OPEN' COMMENT '状态',
remark VARCHAR(255) NULL COMMENT '备注',
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
UNIQUE KEY uk_so_line (sales_order_id, line_no),
FOREIGN KEY (sales_order_id) REFERENCES so_sales_order(id),
FOREIGN KEY (product_item_id) REFERENCES md_item(id),
INDEX idx_so_item_product (product_item_id)
) ENGINE=InnoDB COMMENT='订单明细';
CREATE TABLE IF NOT EXISTS mrp_material_demand (
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID',
demand_no VARCHAR(50) NOT NULL UNIQUE COMMENT '需求单号',
sales_order_item_id BIGINT NOT NULL COMMENT '订单明细ID',
product_item_id BIGINT NOT NULL COMMENT '产品物料ID',
material_item_id BIGINT NOT NULL COMMENT '原材料物料ID',
bom_item_id BIGINT NOT NULL COMMENT 'BOM明细ID',
order_qty DECIMAL(18,6) NOT NULL DEFAULT 0 COMMENT '订单数量',
theoretical_weight_kg DECIMAL(18,6) NOT NULL DEFAULT 0 COMMENT '理论重量(kg)',
planned_weight_kg DECIMAL(18,6) NOT NULL DEFAULT 0 COMMENT '计划重量(kg)',
available_stock_weight_kg DECIMAL(18,6) NOT NULL DEFAULT 0 COMMENT '可用库存重量(kg)',
shortage_weight_kg DECIMAL(18,6) NOT NULL DEFAULT 0 COMMENT '缺口重量(kg)',
suggested_purchase_qty DECIMAL(18,6) NOT NULL DEFAULT 0 COMMENT '建议采购数量',
suggested_purchase_weight_kg DECIMAL(18,6) NOT NULL DEFAULT 0 COMMENT '建议采购重量(kg)',
status VARCHAR(32) NOT NULL DEFAULT 'NEW' COMMENT '状态',
generated_at DATETIME NULL COMMENT '生成时间',
remark VARCHAR(255) NULL COMMENT '备注',
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
FOREIGN KEY (sales_order_item_id) REFERENCES so_sales_order_item(id),
FOREIGN KEY (product_item_id) REFERENCES md_item(id),
FOREIGN KEY (material_item_id) REFERENCES md_item(id),
FOREIGN KEY (bom_item_id) REFERENCES md_bom_item(id),
INDEX idx_mrp_material (material_item_id),
INDEX idx_mrp_status (status)
) ENGINE=InnoDB COMMENT='物料需求计划';
CREATE TABLE IF NOT EXISTS po_purchase_order (
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID',
po_no VARCHAR(50) NOT NULL UNIQUE COMMENT '采购订单号',
supplier_id BIGINT NOT NULL COMMENT 'SupplierID',
order_date DATE NOT NULL COMMENT '订单日期',
expected_date DATE NULL COMMENT '预计到货日期',
purchaser_employee_id BIGINT NULL COMMENT '采购员员工ID',
target_warehouse_type VARCHAR(32) NOT NULL DEFAULT 'RAW' COMMENT '目标仓库类型RAW原材料库/AUX辅料库',
tax_rate DECIMAL(8,4) NOT NULL DEFAULT 0 COMMENT '税率',
total_amount DECIMAL(18,2) NOT NULL DEFAULT 0 COMMENT '总金额',
status VARCHAR(32) NOT NULL DEFAULT 'DRAFT' COMMENT '状态',
remark VARCHAR(255) NULL COMMENT '备注',
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
FOREIGN KEY (supplier_id) REFERENCES md_supplier(id),
FOREIGN KEY (purchaser_employee_id) REFERENCES hr_employee(id),
INDEX idx_po_supplier (supplier_id)
) ENGINE=InnoDB COMMENT='采购订单头';
CREATE TABLE IF NOT EXISTS po_purchase_order_item (
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID',
purchase_order_id BIGINT NOT NULL COMMENT '采购订单ID',
line_no INT NOT NULL COMMENT '行号',
material_item_id BIGINT NOT NULL COMMENT '原材料物料ID',
source_demand_id BIGINT NULL COMMENT '来源需求ID',
order_qty DECIMAL(18,6) NOT NULL DEFAULT 0 COMMENT '订单数量',
order_weight_kg DECIMAL(18,6) NOT NULL DEFAULT 0 COMMENT '订单重量(kg)',
received_qty DECIMAL(18,6) NOT NULL DEFAULT 0 COMMENT '已收货数量',
received_weight_kg DECIMAL(18,6) NOT NULL DEFAULT 0 COMMENT '已收货重量(kg)',
unit_price DECIMAL(18,4) NOT NULL DEFAULT 0 COMMENT '单价',
line_amount DECIMAL(18,2) NOT NULL DEFAULT 0 COMMENT '行金额',
status VARCHAR(32) NOT NULL DEFAULT 'OPEN' COMMENT '状态',
remark VARCHAR(255) NULL COMMENT '备注',
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
UNIQUE KEY uk_po_line (purchase_order_id, line_no),
FOREIGN KEY (purchase_order_id) REFERENCES po_purchase_order(id),
FOREIGN KEY (material_item_id) REFERENCES md_item(id),
FOREIGN KEY (source_demand_id) REFERENCES mrp_material_demand(id),
INDEX idx_po_item_material (material_item_id)
) ENGINE=InnoDB COMMENT='采购订单明细';
CREATE TABLE IF NOT EXISTS wh_warehouse (
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID',
warehouse_code VARCHAR(50) NOT NULL UNIQUE COMMENT '仓库编码',
warehouse_name VARCHAR(100) NOT NULL COMMENT '仓库名称',
warehouse_type VARCHAR(32) NOT NULL COMMENT '仓库类型RAW/SEMI/FINISHED/AUX/RETURN/SCRAP',
manager_employee_id BIGINT NULL COMMENT '上级员工ID',
status VARCHAR(32) NOT NULL DEFAULT 'ACTIVE' COMMENT '状态',
remark VARCHAR(255) NULL COMMENT '备注',
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
FOREIGN KEY (manager_employee_id) REFERENCES hr_employee(id)
) ENGINE=InnoDB COMMENT='仓库主档';
CREATE TABLE IF NOT EXISTS wh_location (
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID',
warehouse_id BIGINT NOT NULL COMMENT '仓库ID',
location_code VARCHAR(50) NOT NULL COMMENT '库位编码',
location_name VARCHAR(100) NOT NULL COMMENT '库位名称',
zone_name VARCHAR(100) NULL COMMENT '库区名称',
is_default TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否默认',
is_locked TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否锁定',
status VARCHAR(32) NOT NULL DEFAULT 'ACTIVE' COMMENT '状态',
remark VARCHAR(255) NULL COMMENT '备注',
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
UNIQUE KEY uk_warehouse_location (warehouse_id, location_code),
FOREIGN KEY (warehouse_id) REFERENCES wh_warehouse(id)
) ENGINE=InnoDB COMMENT='库位表';
CREATE TABLE IF NOT EXISTS po_receipt (
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID',
receipt_no VARCHAR(50) NOT NULL UNIQUE COMMENT '入库单号',
purchase_order_id BIGINT NOT NULL COMMENT '采购订单ID',
warehouse_id BIGINT NOT NULL COMMENT '仓库ID',
receipt_date DATETIME NOT NULL COMMENT '收货日期',
receiver_employee_id BIGINT NULL COMMENT '接收人员工ID',
supplier_delivery_no VARCHAR(100) NULL COMMENT '供应商送货单号',
status VARCHAR(32) NOT NULL DEFAULT 'DRAFT' COMMENT '状态',
remark VARCHAR(255) NULL COMMENT '备注',
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
FOREIGN KEY (purchase_order_id) REFERENCES po_purchase_order(id),
FOREIGN KEY (warehouse_id) REFERENCES wh_warehouse(id),
FOREIGN KEY (receiver_employee_id) REFERENCES hr_employee(id)
) ENGINE=InnoDB COMMENT='采购收货单头';
CREATE TABLE IF NOT EXISTS po_receipt_item (
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID',
receipt_id BIGINT NOT NULL COMMENT '单据ID',
line_no INT NOT NULL COMMENT '行号',
purchase_order_item_id BIGINT NOT NULL COMMENT '采购订单明细ID',
material_item_id BIGINT NOT NULL COMMENT '原材料物料ID',
location_id BIGINT NULL COMMENT '库位ID',
lot_no VARCHAR(50) NOT NULL COMMENT '批次号',
received_qty DECIMAL(18,6) NOT NULL DEFAULT 0 COMMENT '已收货数量',
received_weight_kg DECIMAL(18,6) NOT NULL DEFAULT 0 COMMENT '已收货重量(kg)',
accepted_qty DECIMAL(18,6) NOT NULL DEFAULT 0 COMMENT '合格数量',
accepted_weight_kg DECIMAL(18,6) NOT NULL DEFAULT 0 COMMENT '合格重量(kg)',
unit_cost DECIMAL(18,4) NOT NULL DEFAULT 0 COMMENT '单位成本',
status VARCHAR(32) NOT NULL DEFAULT 'PENDING_QC' COMMENT '状态',
remark VARCHAR(255) NULL COMMENT '备注',
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
UNIQUE KEY uk_receipt_line (receipt_id, line_no),
FOREIGN KEY (receipt_id) REFERENCES po_receipt(id),
FOREIGN KEY (purchase_order_item_id) REFERENCES po_purchase_order_item(id),
FOREIGN KEY (material_item_id) REFERENCES md_item(id),
FOREIGN KEY (location_id) REFERENCES wh_location(id),
INDEX idx_receipt_item_lot (lot_no)
) ENGINE=InnoDB COMMENT='采购收货单明细';
CREATE TABLE IF NOT EXISTS wh_stock_lot (
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID',
lot_no VARCHAR(50) NOT NULL UNIQUE COMMENT '批次号',
item_id BIGINT NOT NULL COMMENT '物料ID',
warehouse_id BIGINT NOT NULL COMMENT '仓库ID',
location_id BIGINT NULL COMMENT '库位ID',
source_doc_type VARCHAR(32) NOT NULL COMMENT '来源单据类型',
source_doc_id BIGINT NOT NULL COMMENT '来源单据ID',
source_line_id BIGINT NULL COMMENT '来源单据行ID',
logistics_waybill_no VARCHAR(100) NULL COMMENT '运单号',
logistics_freight_amount DECIMAL(18,2) NULL COMMENT '运费',
logistics_photo_url VARCHAR(255) NULL COMMENT '订单照片路径',
inbound_qty DECIMAL(18,6) NOT NULL DEFAULT 0 COMMENT '入库数量',
inbound_weight_kg DECIMAL(18,6) NOT NULL DEFAULT 0 COMMENT '入库重量(kg)',
remaining_qty DECIMAL(18,6) NOT NULL DEFAULT 0 COMMENT '剩余数量',
remaining_weight_kg DECIMAL(18,6) NOT NULL DEFAULT 0 COMMENT '剩余重量(kg)',
locked_qty DECIMAL(18,6) NOT NULL DEFAULT 0 COMMENT '锁定数量',
locked_weight_kg DECIMAL(18,6) NOT NULL DEFAULT 0 COMMENT '锁定重量(kg)',
unit_cost DECIMAL(18,4) NOT NULL DEFAULT 0 COMMENT '单位成本',
production_date DATE NULL COMMENT '生产日期',
expire_date DATE NULL COMMENT '失效日期',
quality_status VARCHAR(32) NOT NULL DEFAULT 'PASS' COMMENT '质量状态',
status VARCHAR(32) NOT NULL DEFAULT 'AVAILABLE' COMMENT '状态',
remark VARCHAR(255) NULL COMMENT '备注',
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
FOREIGN KEY (item_id) REFERENCES md_item(id),
FOREIGN KEY (warehouse_id) REFERENCES wh_warehouse(id),
FOREIGN KEY (location_id) REFERENCES wh_location(id),
INDEX idx_stock_lot_item (item_id),
INDEX idx_stock_lot_wh (warehouse_id)
) ENGINE=InnoDB COMMENT='库存批次';
CREATE TABLE IF NOT EXISTS wh_stock_balance (
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID',
item_id BIGINT NOT NULL COMMENT '物料ID',
warehouse_id BIGINT NOT NULL COMMENT '仓库ID',
location_id BIGINT NULL COMMENT '库位ID',
qty_on_hand DECIMAL(18,6) NOT NULL DEFAULT 0 COMMENT '现存数量',
weight_on_hand_kg DECIMAL(18,6) NOT NULL DEFAULT 0 COMMENT '现存重量(kg)',
qty_available DECIMAL(18,6) NOT NULL DEFAULT 0 COMMENT '可用数量',
weight_available_kg DECIMAL(18,6) NOT NULL DEFAULT 0 COMMENT '可用重量(kg)',
qty_allocated DECIMAL(18,6) NOT NULL DEFAULT 0 COMMENT '已分配数量',
weight_allocated_kg DECIMAL(18,6) NOT NULL DEFAULT 0 COMMENT '已分配重量(kg)',
avg_unit_cost DECIMAL(18,4) NOT NULL DEFAULT 0 COMMENT '平均单位成本',
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
UNIQUE KEY uk_stock_balance (item_id, warehouse_id, location_id),
FOREIGN KEY (item_id) REFERENCES md_item(id),
FOREIGN KEY (warehouse_id) REFERENCES wh_warehouse(id),
FOREIGN KEY (location_id) REFERENCES wh_location(id)
) ENGINE=InnoDB COMMENT='库存余额表';
CREATE TABLE IF NOT EXISTS wh_inventory_txn (
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID',
txn_no VARCHAR(50) NOT NULL UNIQUE COMMENT '流水号',
txn_type VARCHAR(32) NOT NULL COMMENT '流水类型PURCHASE_IN/MATERIAL_ISSUE/FG_IN/SALES_OUT/RETURN_IN/RETURN_OUT/SCRAP_OUT/PRODUCTION_SCRAP_IN/OUTSOURCING_SCRAP_IN/SCRAP_SALE_OUT/ADJUST',
item_id BIGINT NOT NULL COMMENT '物料ID',
warehouse_id BIGINT NOT NULL COMMENT '仓库ID',
location_id BIGINT NULL COMMENT '库位ID',
lot_id BIGINT NULL COMMENT '批次ID',
qty_change DECIMAL(18,6) NOT NULL DEFAULT 0 COMMENT '数量变动',
weight_change_kg DECIMAL(18,6) NOT NULL DEFAULT 0 COMMENT '重量变动(kg)',
unit_cost DECIMAL(18,4) NOT NULL DEFAULT 0 COMMENT '单位成本',
amount DECIMAL(18,2) NOT NULL DEFAULT 0 COMMENT '金额',
source_doc_type VARCHAR(32) NOT NULL COMMENT '来源单据类型',
source_doc_id BIGINT NOT NULL COMMENT '来源单据ID',
source_line_id BIGINT NULL COMMENT '来源单据行ID',
logistics_waybill_no VARCHAR(100) NULL COMMENT '运单号',
logistics_freight_amount DECIMAL(18,2) NULL COMMENT '运费',
logistics_photo_url VARCHAR(255) NULL COMMENT '订单照片路径',
biz_time DATETIME NOT NULL COMMENT '业务时间',
operator_user_id BIGINT NULL COMMENT '操作人用户ID',
remark VARCHAR(255) NULL COMMENT '备注',
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
FOREIGN KEY (item_id) REFERENCES md_item(id),
FOREIGN KEY (warehouse_id) REFERENCES wh_warehouse(id),
FOREIGN KEY (location_id) REFERENCES wh_location(id),
FOREIGN KEY (lot_id) REFERENCES wh_stock_lot(id),
FOREIGN KEY (operator_user_id) REFERENCES sys_user(id),
INDEX idx_inventory_txn_item (item_id),
INDEX idx_inventory_txn_time (biz_time)
) ENGINE=InnoDB COMMENT='库存流水';
CREATE TABLE IF NOT EXISTS pp_work_order (
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID',
work_order_no VARCHAR(50) NOT NULL UNIQUE COMMENT '工单号',
work_order_type VARCHAR(32) NOT NULL DEFAULT 'NORMAL' COMMENT '工单类型NORMAL/REWORK',
source_sales_order_item_id BIGINT NULL COMMENT '来源订单明细ID',
product_item_id BIGINT NOT NULL COMMENT '产品物料ID',
route_id BIGINT NOT NULL COMMENT '工艺路线ID',
bom_id BIGINT NOT NULL COMMENT 'BOM ID',
planned_qty DECIMAL(18,6) NOT NULL DEFAULT 0 COMMENT '计划数量',
released_qty DECIMAL(18,6) NOT NULL DEFAULT 0 COMMENT '下达数量',
finished_qty DECIMAL(18,6) NOT NULL DEFAULT 0 COMMENT '完工数量',
scrap_qty DECIMAL(18,6) NOT NULL DEFAULT 0 COMMENT '报废数量',
planned_start_time DATETIME NULL COMMENT '计划开始时间',
planned_end_time DATETIME NULL COMMENT '计划结束时间',
actual_start_time DATETIME NULL COMMENT '实际开始时间',
actual_end_time DATETIME NULL COMMENT '实际结束时间',
priority_level INT NOT NULL DEFAULT 3 COMMENT '优先级',
status VARCHAR(32) NOT NULL DEFAULT 'CREATED' COMMENT '状态',
remark VARCHAR(255) NULL COMMENT '备注',
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
FOREIGN KEY (source_sales_order_item_id) REFERENCES so_sales_order_item(id),
FOREIGN KEY (product_item_id) REFERENCES md_item(id),
FOREIGN KEY (route_id) REFERENCES md_process_route(id),
FOREIGN KEY (bom_id) REFERENCES md_bom(id),
INDEX idx_work_order_status (status)
) ENGINE=InnoDB COMMENT='生产工单';
CREATE TABLE IF NOT EXISTS pp_work_order_material (
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID',
work_order_id BIGINT NOT NULL COMMENT '工单ID',
bom_item_id BIGINT NOT NULL COMMENT 'BOM明细ID',
material_item_id BIGINT NOT NULL COMMENT '原材料物料ID',
required_qty DECIMAL(18,6) NOT NULL DEFAULT 0 COMMENT '需求数量',
required_weight_kg DECIMAL(18,6) NOT NULL DEFAULT 0 COMMENT '需求重量(kg)',
issued_qty DECIMAL(18,6) NOT NULL DEFAULT 0 COMMENT '已领料数量',
issued_weight_kg DECIMAL(18,6) NOT NULL DEFAULT 0 COMMENT '已领料重量(kg)',
returned_qty DECIMAL(18,6) NOT NULL DEFAULT 0 COMMENT '已退料数量',
returned_weight_kg DECIMAL(18,6) NOT NULL DEFAULT 0 COMMENT '已退料重量(kg)',
status VARCHAR(32) NOT NULL DEFAULT 'OPEN' COMMENT '状态',
remark VARCHAR(255) NULL COMMENT '备注',
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
UNIQUE KEY uk_work_order_material (work_order_id, bom_item_id),
FOREIGN KEY (work_order_id) REFERENCES pp_work_order(id),
FOREIGN KEY (bom_item_id) REFERENCES md_bom_item(id),
FOREIGN KEY (material_item_id) REFERENCES md_item(id)
) ENGINE=InnoDB COMMENT='工单用料清单';
CREATE TABLE IF NOT EXISTS pp_work_order_operation (
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID',
work_order_id BIGINT NOT NULL COMMENT '工单ID',
route_operation_id BIGINT NOT NULL COMMENT '工艺路线工序ID',
seq_no INT NOT NULL COMMENT '序号',
operation_name VARCHAR(100) NOT NULL COMMENT '工序名称',
work_center_id BIGINT NOT NULL COMMENT '工作中心ID',
planned_qty DECIMAL(18,6) NOT NULL DEFAULT 0 COMMENT '计划数量',
report_qty DECIMAL(18,6) NOT NULL DEFAULT 0 COMMENT '报工数量',
good_qty DECIMAL(18,6) NOT NULL DEFAULT 0 COMMENT '合格数量',
scrap_qty DECIMAL(18,6) NOT NULL DEFAULT 0 COMMENT '报废数量',
rework_qty DECIMAL(18,6) NOT NULL DEFAULT 0 COMMENT '返工数量',
std_labor_cost DECIMAL(18,4) NOT NULL DEFAULT 0 COMMENT '标准人工成本',
std_machine_cost DECIMAL(18,4) NOT NULL DEFAULT 0 COMMENT '标准设备成本',
std_outsource_cost DECIMAL(18,4) NOT NULL DEFAULT 0 COMMENT '标准委外成本',
allowed_scrap_rate DECIMAL(8,4) NOT NULL DEFAULT 0 COMMENT '允许报废率',
is_abnormal TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否异常',
status VARCHAR(32) NOT NULL DEFAULT 'PENDING' COMMENT '状态',
remark VARCHAR(255) NULL COMMENT '备注',
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
UNIQUE KEY uk_work_order_operation (work_order_id, seq_no),
FOREIGN KEY (work_order_id) REFERENCES pp_work_order(id),
FOREIGN KEY (route_operation_id) REFERENCES md_process_route_operation(id),
FOREIGN KEY (work_center_id) REFERENCES md_work_center(id)
) ENGINE=InnoDB COMMENT='工单工序清单';
CREATE TABLE IF NOT EXISTS pp_material_issue (
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID',
issue_no VARCHAR(50) NOT NULL UNIQUE COMMENT '领料单号',
work_order_id BIGINT NOT NULL COMMENT '工单ID',
warehouse_id BIGINT NOT NULL COMMENT '仓库ID',
issue_time DATETIME NOT NULL COMMENT '领料时间',
issuer_employee_id BIGINT NULL COMMENT '发料人员工ID',
status VARCHAR(32) NOT NULL DEFAULT 'CREATED' COMMENT '状态',
remark VARCHAR(255) NULL COMMENT '备注',
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
FOREIGN KEY (work_order_id) REFERENCES pp_work_order(id),
FOREIGN KEY (warehouse_id) REFERENCES wh_warehouse(id),
FOREIGN KEY (issuer_employee_id) REFERENCES hr_employee(id)
) ENGINE=InnoDB COMMENT='生产领料单头';
CREATE TABLE IF NOT EXISTS pp_material_issue_item (
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID',
material_issue_id BIGINT NOT NULL COMMENT '领料单ID',
work_order_material_id BIGINT NOT NULL COMMENT '工单用料ID',
material_item_id BIGINT NOT NULL COMMENT '原材料物料ID',
lot_id BIGINT NOT NULL COMMENT '批次ID',
location_id BIGINT NULL COMMENT '库位ID',
issue_qty DECIMAL(18,6) NOT NULL DEFAULT 0 COMMENT 'Issue数量',
issue_weight_kg DECIMAL(18,6) NOT NULL DEFAULT 0 COMMENT 'issue_weight_kg',
unit_cost DECIMAL(18,4) NOT NULL DEFAULT 0 COMMENT '单位成本',
status VARCHAR(32) NOT NULL DEFAULT 'POSTED' COMMENT '状态',
remark VARCHAR(255) NULL COMMENT '备注',
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
FOREIGN KEY (material_issue_id) REFERENCES pp_material_issue(id),
FOREIGN KEY (work_order_material_id) REFERENCES pp_work_order_material(id),
FOREIGN KEY (material_item_id) REFERENCES md_item(id),
FOREIGN KEY (lot_id) REFERENCES wh_stock_lot(id),
FOREIGN KEY (location_id) REFERENCES wh_location(id)
) ENGINE=InnoDB COMMENT='生产领料单明细';
CREATE TABLE IF NOT EXISTS pp_operation_report (
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID',
report_no VARCHAR(50) NOT NULL UNIQUE COMMENT '报工单号',
work_order_id BIGINT NOT NULL COMMENT '工单ID',
work_order_operation_id BIGINT NOT NULL COMMENT '工单工序ID',
employee_id BIGINT NOT NULL COMMENT '员工ID',
equipment_id BIGINT NULL COMMENT '设备ID',
report_source VARCHAR(32) NOT NULL DEFAULT 'MANUAL' COMMENT '报工来源MANUAL/MINI_APP/IMPORT',
shift_code VARCHAR(32) NULL COMMENT '班次编码',
start_time DATETIME NOT NULL COMMENT '开始时间',
end_time DATETIME NOT NULL COMMENT '结束时间',
report_qty DECIMAL(18,6) NOT NULL DEFAULT 0 COMMENT '报工数量',
good_qty DECIMAL(18,6) NOT NULL DEFAULT 0 COMMENT '合格数量',
scrap_qty DECIMAL(18,6) NOT NULL DEFAULT 0 COMMENT '报废数量',
rework_qty DECIMAL(18,6) NOT NULL DEFAULT 0 COMMENT '返工数量',
scrap_reason VARCHAR(255) NULL COMMENT '报废原因',
downtime_minutes DECIMAL(18,2) NOT NULL DEFAULT 0 COMMENT '停机时长(分钟)',
extra_cost_amount DECIMAL(18,2) NOT NULL DEFAULT 0 COMMENT '额外成本金额',
is_abnormal TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否异常',
approved_by BIGINT NULL COMMENT '审批人用户ID',
approved_at DATETIME NULL COMMENT '审批时间',
remark VARCHAR(255) NULL COMMENT '备注',
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
FOREIGN KEY (work_order_id) REFERENCES pp_work_order(id),
FOREIGN KEY (work_order_operation_id) REFERENCES pp_work_order_operation(id),
FOREIGN KEY (employee_id) REFERENCES hr_employee(id),
FOREIGN KEY (equipment_id) REFERENCES em_equipment(id),
FOREIGN KEY (approved_by) REFERENCES sys_user(id),
INDEX idx_operation_report_operation (work_order_operation_id),
INDEX idx_operation_report_employee (employee_id)
) ENGINE=InnoDB COMMENT='工序报工记录';
CREATE TABLE IF NOT EXISTS pp_scrap_record (
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID',
scrap_no VARCHAR(50) NOT NULL UNIQUE COMMENT '报废单号',
report_id BIGINT NOT NULL COMMENT '报工记录ID',
work_order_id BIGINT NOT NULL COMMENT '工单ID',
work_order_operation_id BIGINT NOT NULL COMMENT '工单工序ID',
item_id BIGINT NOT NULL COMMENT '物料ID',
scrap_qty DECIMAL(18,6) NOT NULL DEFAULT 0 COMMENT '报废数量',
scrap_weight_kg DECIMAL(18,6) NOT NULL DEFAULT 0 COMMENT '报废重量(kg)',
scrap_reason VARCHAR(255) NULL COMMENT '报废原因',
disposal_type VARCHAR(32) NOT NULL DEFAULT 'SCRAP' COMMENT '处置类型SCRAP/REWORK',
saleable_scrap_weight_kg DECIMAL(18,6) NOT NULL DEFAULT 0 COMMENT '可售废料重量(kg)',
scrap_cost_amount DECIMAL(18,2) NOT NULL DEFAULT 0 COMMENT '报废成本金额',
status VARCHAR(32) NOT NULL DEFAULT 'CONFIRMED' COMMENT '状态',
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
FOREIGN KEY (report_id) REFERENCES pp_operation_report(id),
FOREIGN KEY (work_order_id) REFERENCES pp_work_order(id),
FOREIGN KEY (work_order_operation_id) REFERENCES pp_work_order_operation(id),
FOREIGN KEY (item_id) REFERENCES md_item(id)
) ENGINE=InnoDB COMMENT='报废与返工记录';
CREATE TABLE IF NOT EXISTS pp_completion_receipt (
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID',
receipt_no VARCHAR(50) NOT NULL UNIQUE COMMENT '入库单号',
work_order_id BIGINT NOT NULL COMMENT '工单ID',
warehouse_id BIGINT NOT NULL COMMENT '仓库ID',
receipt_time DATETIME NOT NULL COMMENT '入库时间',
receiver_employee_id BIGINT NULL COMMENT '接收人员工ID',
status VARCHAR(32) NOT NULL DEFAULT 'CREATED' COMMENT '状态',
remark VARCHAR(255) NULL COMMENT '备注',
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
FOREIGN KEY (work_order_id) REFERENCES pp_work_order(id),
FOREIGN KEY (warehouse_id) REFERENCES wh_warehouse(id),
FOREIGN KEY (receiver_employee_id) REFERENCES hr_employee(id)
) ENGINE=InnoDB COMMENT='完工入库单头';
CREATE TABLE IF NOT EXISTS pp_completion_receipt_item (
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID',
completion_receipt_id BIGINT NOT NULL COMMENT '完工入库单ID',
line_no INT NOT NULL COMMENT '行号',
product_item_id BIGINT NOT NULL COMMENT '产品物料ID',
location_id BIGINT NULL COMMENT '库位ID',
lot_no VARCHAR(50) NOT NULL COMMENT '批次号',
receipt_qty DECIMAL(18,6) NOT NULL DEFAULT 0 COMMENT 'Receipt数量',
receipt_weight_kg DECIMAL(18,6) NOT NULL DEFAULT 0 COMMENT 'receipt_weight_kg',
unit_cost DECIMAL(18,4) NOT NULL DEFAULT 0 COMMENT '单位成本',
status VARCHAR(32) NOT NULL DEFAULT 'POSTED' COMMENT '状态',
remark VARCHAR(255) NULL COMMENT '备注',
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
UNIQUE KEY uk_completion_line (completion_receipt_id, line_no),
FOREIGN KEY (completion_receipt_id) REFERENCES pp_completion_receipt(id),
FOREIGN KEY (product_item_id) REFERENCES md_item(id),
FOREIGN KEY (location_id) REFERENCES wh_location(id),
INDEX idx_completion_lot (lot_no)
) ENGINE=InnoDB COMMENT='完工入库单明细';
CREATE TABLE IF NOT EXISTS so_delivery (
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID',
delivery_no VARCHAR(50) NOT NULL UNIQUE COMMENT '发货单号',
sales_order_id BIGINT NOT NULL COMMENT '订单ID',
warehouse_id BIGINT NOT NULL COMMENT '仓库ID',
delivery_date DATETIME NOT NULL COMMENT '发货时间',
shipper_employee_id BIGINT NULL COMMENT '发货人员工ID',
consignee_name VARCHAR(100) NULL COMMENT '收货人姓名',
consignee_phone VARCHAR(50) NULL COMMENT '收货人电话',
delivery_address VARCHAR(255) NULL COMMENT '送货地址',
logistics_waybill_no VARCHAR(100) NULL COMMENT '运单号',
logistics_freight_amount DECIMAL(18,2) NULL COMMENT '运费',
logistics_photo_url VARCHAR(255) NULL COMMENT '订单照片路径',
status VARCHAR(32) NOT NULL DEFAULT 'CREATED' COMMENT '状态',
remark VARCHAR(255) NULL COMMENT '备注',
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
FOREIGN KEY (sales_order_id) REFERENCES so_sales_order(id),
FOREIGN KEY (warehouse_id) REFERENCES wh_warehouse(id),
FOREIGN KEY (shipper_employee_id) REFERENCES hr_employee(id)
) ENGINE=InnoDB COMMENT='发货单头';
CREATE TABLE IF NOT EXISTS so_delivery_item (
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID',
delivery_id BIGINT NOT NULL COMMENT '发货单ID',
line_no INT NOT NULL COMMENT '行号',
sales_order_item_id BIGINT NOT NULL COMMENT '订单明细ID',
product_item_id BIGINT NOT NULL COMMENT '产品物料ID',
lot_id BIGINT NULL COMMENT '批次ID',
delivery_qty DECIMAL(18,6) NOT NULL DEFAULT 0 COMMENT '发货数量',
delivery_weight_kg DECIMAL(18,6) NOT NULL DEFAULT 0 COMMENT '发货重量(kg)',
unit_price DECIMAL(18,4) NOT NULL DEFAULT 0 COMMENT '单价',
line_amount DECIMAL(18,2) NOT NULL DEFAULT 0 COMMENT '行金额',
status VARCHAR(32) NOT NULL DEFAULT 'POSTED' COMMENT '状态',
remark VARCHAR(255) NULL COMMENT '备注',
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
UNIQUE KEY uk_delivery_line (delivery_id, line_no),
FOREIGN KEY (delivery_id) REFERENCES so_delivery(id),
FOREIGN KEY (sales_order_item_id) REFERENCES so_sales_order_item(id),
FOREIGN KEY (product_item_id) REFERENCES md_item(id),
FOREIGN KEY (lot_id) REFERENCES wh_stock_lot(id)
) ENGINE=InnoDB COMMENT='发货单明细';
CREATE TABLE IF NOT EXISTS rt_return_order (
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID',
return_no VARCHAR(50) NOT NULL UNIQUE COMMENT '退货单号',
customer_id BIGINT NOT NULL COMMENT '客户ID',
sales_order_id BIGINT NULL COMMENT '订单ID',
delivery_id BIGINT NULL COMMENT '发货单ID',
return_date DATETIME NOT NULL COMMENT '退货时间',
return_reason VARCHAR(255) NULL COMMENT '退货原因',
handler_employee_id BIGINT NULL COMMENT '处理人员工ID',
status VARCHAR(32) NOT NULL DEFAULT 'CREATED' COMMENT '状态',
remark VARCHAR(255) NULL COMMENT '备注',
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
FOREIGN KEY (customer_id) REFERENCES md_customer(id),
FOREIGN KEY (sales_order_id) REFERENCES so_sales_order(id),
FOREIGN KEY (delivery_id) REFERENCES so_delivery(id),
FOREIGN KEY (handler_employee_id) REFERENCES hr_employee(id)
) ENGINE=InnoDB COMMENT='退货单头';
CREATE TABLE IF NOT EXISTS rt_return_item (
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID',
return_order_id BIGINT NOT NULL COMMENT '退货单ID',
line_no INT NOT NULL COMMENT '行号',
sales_order_item_id BIGINT NULL COMMENT '订单明细ID',
delivery_item_id BIGINT NULL COMMENT '发货明细ID',
product_item_id BIGINT NOT NULL COMMENT '产品物料ID',
source_lot_id BIGINT NULL COMMENT '来源批次ID',
return_qty DECIMAL(18,6) NOT NULL DEFAULT 0 COMMENT '退货数量',
return_weight_kg DECIMAL(18,6) NOT NULL DEFAULT 0 COMMENT '退货重量(kg)',
disposition_status VARCHAR(32) NOT NULL DEFAULT 'PENDING' COMMENT '处置状态',
responsibility_type VARCHAR(32) NULL COMMENT '责任类型',
remark VARCHAR(255) NULL COMMENT '备注',
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
UNIQUE KEY uk_return_line (return_order_id, line_no),
INDEX idx_rt_return_item_delivery_item (delivery_item_id),
FOREIGN KEY (return_order_id) REFERENCES rt_return_order(id),
FOREIGN KEY (sales_order_item_id) REFERENCES so_sales_order_item(id),
FOREIGN KEY (delivery_item_id) REFERENCES so_delivery_item(id),
FOREIGN KEY (product_item_id) REFERENCES md_item(id),
FOREIGN KEY (source_lot_id) REFERENCES wh_stock_lot(id)
) ENGINE=InnoDB COMMENT='退货单明细';
CREATE TABLE IF NOT EXISTS rt_return_disposition (
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID',
disposition_no VARCHAR(50) NOT NULL UNIQUE COMMENT '处置单号',
return_item_id BIGINT NOT NULL COMMENT '退货明细ID',
disposition_type VARCHAR(32) NOT NULL COMMENT '处置方式REWORK/SCRAP',
rework_work_order_id BIGINT NULL COMMENT '返工工单ID',
scrap_weight_kg DECIMAL(18,6) NOT NULL DEFAULT 0 COMMENT '报废重量(kg)',
extra_cost_amount DECIMAL(18,2) NOT NULL DEFAULT 0 COMMENT '额外成本金额',
scrap_sale_amount DECIMAL(18,2) NOT NULL DEFAULT 0 COMMENT '废料销售金额',
closed_at DATETIME NULL COMMENT '关闭时间',
status VARCHAR(32) NOT NULL DEFAULT 'OPEN' COMMENT '状态',
remark VARCHAR(255) NULL COMMENT '备注',
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
FOREIGN KEY (return_item_id) REFERENCES rt_return_item(id),
FOREIGN KEY (rework_work_order_id) REFERENCES pp_work_order(id)
) ENGINE=InnoDB COMMENT='退货处置记录';
CREATE TABLE IF NOT EXISTS fi_accounting_period (
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID',
period_code VARCHAR(20) NOT NULL UNIQUE COMMENT '期间编码',
year_no INT NOT NULL COMMENT '年度',
month_no INT NOT NULL COMMENT '月份',
start_date DATE NOT NULL COMMENT '开始日期',
end_date DATE NOT NULL COMMENT '结束日期',
close_status VARCHAR(32) NOT NULL DEFAULT 'OPEN' COMMENT '关账状态',
closed_at DATETIME NULL COMMENT '关闭时间',
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'
) ENGINE=InnoDB COMMENT='财务期间';
CREATE TABLE IF NOT EXISTS fi_overhead_entry (
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID',
period_id BIGINT NOT NULL COMMENT '期间ID',
overhead_type VARCHAR(32) NOT NULL COMMENT '制造费用类型RENT/UTILITY/LOGISTICS/ADMIN/DEPRECIATION/OTHER',
dept_id BIGINT NULL COMMENT '部门ID',
amount DECIMAL(18,2) NOT NULL DEFAULT 0 COMMENT '金额',
allocation_basis VARCHAR(32) NOT NULL DEFAULT 'WORK_HOURS' COMMENT '分摊依据WORK_HOURS/MACHINE_HOURS/QTY/OCCUPIED_AREA',
description VARCHAR(255) NULL COMMENT '说明',
created_by BIGINT NULL COMMENT '创建人用户ID',
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
FOREIGN KEY (period_id) REFERENCES fi_accounting_period(id),
FOREIGN KEY (dept_id) REFERENCES sys_department(id),
FOREIGN KEY (created_by) REFERENCES sys_user(id)
) ENGINE=InnoDB COMMENT='制造费用录入';
CREATE TABLE IF NOT EXISTS fi_cost_allocation (
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID',
period_id BIGINT NOT NULL COMMENT '期间ID',
work_order_id BIGINT NOT NULL COMMENT '工单ID',
product_item_id BIGINT NOT NULL COMMENT '产品物料ID',
allocation_basis_value DECIMAL(18,6) NOT NULL DEFAULT 0 COMMENT '分摊依据值',
overhead_amount DECIMAL(18,2) NOT NULL DEFAULT 0 COMMENT '制造费用金额',
material_amount DECIMAL(18,2) NOT NULL DEFAULT 0 COMMENT '材料金额',
labor_amount DECIMAL(18,2) NOT NULL DEFAULT 0 COMMENT '人工金额',
machine_amount DECIMAL(18,2) NOT NULL DEFAULT 0 COMMENT '设备金额',
abnormal_loss_amount DECIMAL(18,2) NOT NULL DEFAULT 0 COMMENT '异常损失金额',
total_cost_amount DECIMAL(18,2) NOT NULL DEFAULT 0 COMMENT '总成本金额',
unit_cost DECIMAL(18,6) NOT NULL DEFAULT 0 COMMENT '单位成本',
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
UNIQUE KEY uk_period_work_order (period_id, work_order_id),
FOREIGN KEY (period_id) REFERENCES fi_accounting_period(id),
FOREIGN KEY (work_order_id) REFERENCES pp_work_order(id),
FOREIGN KEY (product_item_id) REFERENCES md_item(id)
) ENGINE=InnoDB COMMENT='工单成本分摊结果';
CREATE TABLE IF NOT EXISTS fi_statement_snapshot (
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID',
snapshot_no VARCHAR(50) NOT NULL UNIQUE COMMENT '快照编号',
period_id BIGINT NOT NULL COMMENT '期间ID',
statement_type VARCHAR(32) NOT NULL COMMENT '报表类型WEEKLY/MONTHLY/INVENTORY/COSTING',
report_date DATE NOT NULL COMMENT '报表日期',
summary_json JSON NOT NULL COMMENT '汇总数据(JSON)',
created_by BIGINT NULL COMMENT '创建人用户ID',
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
FOREIGN KEY (period_id) REFERENCES fi_accounting_period(id),
FOREIGN KEY (created_by) REFERENCES sys_user(id)
) ENGINE=InnoDB COMMENT='财务报表快照';