JhHardwareWRS/docs/database.sql
2026-06-24 15:19:14 +08:00

145 lines
7.0 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.

-- 嘉恒智能报工小程序 MySQL schema
-- 建议 MySQL 8.0+,字符集统一 utf8mb4。
CREATE TABLE IF NOT EXISTS personnel (
phone VARCHAR(20) NOT NULL COMMENT '电话号',
name VARCHAR(64) NOT NULL COMMENT '姓名',
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (phone)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='人员表';
CREATE TABLE IF NOT EXISTS person_roles (
phone VARCHAR(20) NOT NULL COMMENT '电话号',
role ENUM('worker', 'admin', 'manager') NOT NULL COMMENT '角色',
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (phone, role),
CONSTRAINT fk_person_roles_person FOREIGN KEY (phone) REFERENCES personnel(phone)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='人员角色表';
CREATE TABLE IF NOT EXISTS products (
project_no VARCHAR(64) NOT NULL COMMENT '项目号',
product_name VARCHAR(255) NOT NULL COMMENT '产品名称',
profile_no VARCHAR(128) NULL COMMENT '型材号,来自现有产品清单',
material_code VARCHAR(128) NULL COMMENT '物料编码',
material_name VARCHAR(255) NULL COMMENT '物料名称',
supplier VARCHAR(255) NULL COMMENT '供应商',
device_no VARCHAR(64) NOT NULL COMMENT '使用设备号',
process_name VARCHAR(128) NOT NULL COMMENT '工序',
stamping_method VARCHAR(128) NULL COMMENT '冲压方式',
operator_count DECIMAL(10,2) NOT NULL DEFAULT 1 COMMENT '操作人数',
standard_beat DECIMAL(12,3) NOT NULL COMMENT '标准节拍,秒/件',
standard_workload DECIMAL(12,2) NOT NULL DEFAULT 0 COMMENT '标准工作量建议按8小时折算',
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (project_no, product_name, device_no, process_name),
KEY idx_products_device_no (device_no),
KEY idx_products_material_code (material_code)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='产品表';
CREATE TABLE IF NOT EXISTS work_sessions (
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
employee_phone VARCHAR(20) NOT NULL,
start_at DATETIME NOT NULL,
end_at DATETIME NULL,
status ENUM('active', 'reporting', 'submitted', 'cancelled') NOT NULL DEFAULT 'active',
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (id),
KEY idx_sessions_employee_status (employee_phone, status),
CONSTRAINT fk_sessions_employee FOREIGN KEY (employee_phone) REFERENCES personnel(phone)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='扫码上班流程';
CREATE TABLE IF NOT EXISTS work_session_devices (
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
session_id BIGINT UNSIGNED NOT NULL,
device_no VARCHAR(64) NOT NULL,
scanned_at DATETIME NOT NULL,
sort_order INT NOT NULL DEFAULT 0,
PRIMARY KEY (id),
UNIQUE KEY uk_session_device (session_id, device_no),
KEY idx_session_devices_device (device_no),
CONSTRAINT fk_session_devices_session FOREIGN KEY (session_id) REFERENCES work_sessions(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='一次报工流程中的设备序列';
CREATE TABLE IF NOT EXISTS production_reports (
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
session_id BIGINT UNSIGNED NOT NULL,
employee_phone VARCHAR(20) NOT NULL,
report_date DATE NOT NULL COMMENT '以员工确认提交日期为准',
start_at DATETIME NOT NULL,
end_at DATETIME NOT NULL,
duration_minutes DECIMAL(10,2) NOT NULL DEFAULT 0,
break_minutes DECIMAL(10,2) NOT NULL DEFAULT 0 COMMENT '休息间隔,仅经理可改',
effective_minutes DECIMAL(10,2) NOT NULL DEFAULT 0,
total_good_qty DECIMAL(12,2) NOT NULL DEFAULT 0,
total_output_qty DECIMAL(12,2) NOT NULL DEFAULT 0,
actual_beat DECIMAL(12,3) NOT NULL DEFAULT 0,
standard_beat DECIMAL(12,3) NOT NULL DEFAULT 0,
expected_workload DECIMAL(12,2) NOT NULL DEFAULT 0,
pace_rate DECIMAL(10,2) NOT NULL DEFAULT 0,
workload_rate DECIMAL(10,2) NOT NULL DEFAULT 0,
status ENUM('pending', 'approved', 'rejected') NOT NULL DEFAULT 'pending',
reviewer_phone VARCHAR(20) NULL,
reviewed_at DATETIME NULL,
reject_reason VARCHAR(500) NULL,
submitted_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (id),
UNIQUE KEY uk_report_session (session_id),
KEY idx_reports_employee_date (employee_phone, report_date),
KEY idx_reports_status_date (status, report_date),
KEY idx_reports_reviewer (reviewer_phone, reviewed_at),
CONSTRAINT fk_reports_session FOREIGN KEY (session_id) REFERENCES work_sessions(id),
CONSTRAINT fk_reports_employee FOREIGN KEY (employee_phone) REFERENCES personnel(phone),
CONSTRAINT fk_reports_reviewer FOREIGN KEY (reviewer_phone) REFERENCES personnel(phone)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='报工主表';
CREATE TABLE IF NOT EXISTS production_report_items (
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
report_id BIGINT UNSIGNED NOT NULL,
device_no VARCHAR(64) NOT NULL,
project_no VARCHAR(64) NOT NULL,
product_name VARCHAR(255) NOT NULL,
material_code VARCHAR(128) NULL,
material_name VARCHAR(255) NULL,
process_name VARCHAR(128) NULL,
standard_beat DECIMAL(12,3) NOT NULL DEFAULT 0,
standard_workload DECIMAL(12,2) NOT NULL DEFAULT 0,
good_qty DECIMAL(12,2) NOT NULL DEFAULT 0,
defect_qty DECIMAL(12,2) NOT NULL DEFAULT 0,
scrap_qty DECIMAL(12,2) NOT NULL DEFAULT 0,
allocated_minutes DECIMAL(10,2) NOT NULL DEFAULT 0,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (id),
KEY idx_report_items_report (report_id),
KEY idx_report_items_product (project_no, product_name),
CONSTRAINT fk_report_items_report FOREIGN KEY (report_id) REFERENCES production_reports(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='报工明细';
CREATE TABLE IF NOT EXISTS report_audit_logs (
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
report_id BIGINT UNSIGNED NOT NULL,
reviewer_phone VARCHAR(20) NOT NULL,
action ENUM('approve', 'approve_with_correction', 'reject', 'manager_break_update') NOT NULL,
before_json JSON NULL,
after_json JSON NULL,
remark VARCHAR(500) NULL,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (id),
KEY idx_audit_report (report_id),
KEY idx_audit_reviewer (reviewer_phone, created_at),
CONSTRAINT fk_audit_report FOREIGN KEY (report_id) REFERENCES production_reports(id),
CONSTRAINT fk_audit_reviewer FOREIGN KEY (reviewer_phone) REFERENCES personnel(phone)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='审核记录';
CREATE TABLE IF NOT EXISTS device_qrcodes (
device_no VARCHAR(64) NOT NULL,
qr_scene VARCHAR(128) NOT NULL,
qr_url VARCHAR(500) NULL,
created_by VARCHAR(20) NOT NULL,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (device_no),
CONSTRAINT fk_qrcode_creator FOREIGN KEY (created_by) REFERENCES personnel(phone)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='设备二维码';