当前位置: 首页 > news >正文

生产管理系统详解:生产管理系统设计与实施文档

生产管理系统设计与实施文档

一、数据库设计

1.1 建表 SQL 脚本

本系统采用 MySQL 数据库,以下是核心表的建表语句。

产品主表 product
CREATE TABLE product (id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,item_code VARCHAR(50) NOT NULL UNIQUE COMMENT '料号',item_name VARCHAR(100) NOT NULL COMMENT '名称',item_type ENUM('raw', 'semi', 'finished') NOT NULL COMMENT '类型:原料/半成品/成品',default_bom_id BIGINT UNSIGNED COMMENT '默认BOM ID',unit VARCHAR(10) NOT NULL COMMENT '单位',enable_flag TINYINT(1) DEFAULT 1 NOT NULL COMMENT '启用标记:1=启用,0=禁用',created_at DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL,updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,INDEX idx_item_code (item_code),CONSTRAINT fk_product_bom FOREIGN KEY (default_bom_id) REFERENCES bom_header(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='产品主表';

工序主数据表 process
  • CREATE TABLE process (id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,process_code VARCHAR(30) NOT NULL UNIQUE COMMENT '工序编码',name VARCHAR(50) NOT NULL COMMENT '工序名称',description VARCHAR(200) COMMENT '描述',default_std_time DECIMAL(8,2) NOT NULL DEFAULT 0.00 COMMENT '默认标准工时(分钟)',enable_flag TINYINT(1) DEFAULT 1 NOT NULL COMMENT '启用标记:1=启用',created_at DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL,INDEX idx_process_code (process_code)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='工序主数据表';

BOM 主表 bom_header
CREATE TABLE bom_header (id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,product_id BIGINT UNSIGNED NOT NULL COMMENT '产品ID',bom_code VARCHAR(50) NOT NULL UNIQUE COMMENT 'BOM编码',version VARCHAR(10) NOT NULL COMMENT '版本号',effect_date DATE NOT NULL COMMENT '生效日期',expire_date DATE COMMENT '失效日期,为空表示长期有效',is_default TINYINT(1) DEFAULT 0 NOT NULL COMMENT '是否默认BOM:1=是,0=否',status ENUM('draft', 'active', 'expired') DEFAULT 'draft' NOT NULL COMMENT '状态',created_at DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL,INDEX idx_product_id (product_id),INDEX idx_bom_code (bom_code),INDEX idx_effect_expire (effect_date, expire_date),CONSTRAINT fk_bom_product FOREIGN KEY (product_id) REFERENCES product(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='BOM主表';

BOM 子件表 bom_item
CREATE TABLE bom_item (id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,bom_header_id BIGINT UNSIGNED NOT NULL COMMENT 'BOM头ID',parent_item_id BIGINT UNSIGNED COMMENT '父项料号,可为空(顶层)',child_item_id BIGINT UNSIGNED NOT NULL COMMENT '子项料号',qty DECIMAL(12,4) NOT NULL COMMENT '用量',loss_rate DECIMAL(5,2) DEFAULT 0.00 NOT NULL COMMENT '损耗率(%)',op_seq_start INT COMMENT '起始工序序号',op_seq_end INT COMMENT '结束工序序号',INDEX idx_bom_header (bom_header_id),INDEX idx_child_item (child_item_id),CONSTRAINT fk_bomitem_header FOREIGN KEY (bom_header_id) REFERENCES bom_header(id),CONSTRAINT fk_bomitem_parent FOREIGN KEY (parent_item_id) REFERENCES product(id),CONSTRAINT fk_bomitem_child FOREIGN KEY (child_item_id) REFERENCES product(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='BOM子件表';

生产线表 prod_line
CREATE TABLE prod_line (id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,line_code VARCHAR(20) NOT NULL UNIQUE COMMENT '线体代码',line_name VARCHAR(50) NOT NULL COMMENT '线体名称',dept VARCHAR(50) COMMENT '所属车间',enable_flag TINYINT(1) DEFAULT 1 NOT NULL COMMENT '启用标记:1=启用',created_at DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL,INDEX idx_line_code (line_code)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='生产线/工艺路线表';

工序 - 生产线关系表 process_line_rel
CREATE TABLE process_line_rel (id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,process_id BIGINT UNSIGNED NOT NULL COMMENT '工序ID',line_id BIGINT UNSIGNED NOT NULL COMMENT '生产线ID',seq SMALLINT NOT NULL COMMENT '在线内顺序',enable_flag TINYINT(1) DEFAULT 1 NOT NULL COMMENT '启用标记',UNIQUE KEY uk_line_seq (line_id, seq),UNIQUE KEY uk_process_line (process_id, line_id),INDEX idx_line_id (line_id),INDEX idx_process_id (process_id),CONSTRAINT fk_plr_process FOREIGN KEY (process_id) REFERENCES process(id),CONSTRAINT fk_plr_line FOREIGN KEY (line_id) REFERENCES prod_line(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='工序-生产线关系表(N:N解耦)';

BOM 绑定工艺路线表 bom_routing
CREATE TABLE bom_routing (id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,bom_header_id BIGINT UNSIGNED NOT NULL COMMENT 'BOM头ID',routing_line_id BIGINT UNSIGNED NOT NULL COMMENT '工艺路线ID(即prod_line.id)',sort_order SMALLINT NOT NULL DEFAULT 1 COMMENT '在BOM中的顺序',enable_flag TINYINT(1) DEFAULT 1 NOT NULL COMMENT '启用标记',UNIQUE KEY uk_bom_line (bom_header_id, routing_line_id),INDEX idx_bom_header (bom_header_id),INDEX idx_routing_line (routing_line_id),CONSTRAINT fk_bomrouting_bom FOREIGN KEY (bom_header_id) REFERENCES bom_header(id),CONSTRAINT fk_bomrouting_line FOREIGN KEY (routing_line_id) REFERENCES prod_line(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='BOM绑定的工艺路线';

生产订单表 prod_order

CREATE TABLE prod_order (id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,order_no VARCHAR(30) NOT NULL UNIQUE COMMENT '内部订单号',source_quote_id BIGINT UNSIGNED COMMENT '来源报价ID',customer VARCHAR(100) NOT NULL COMMENT '客户名称',product_id BIGINT UNSIGNED NOT NULL COMMENT '产品ID',qty_total DECIMAL(12,2) NOT NULL COMMENT '订单数量',delivery_date DATE NOT NULL COMMENT '交货日期',bom_header_id BIGINT UNSIGNED COMMENT '使用的BOM ID(优先于version)',status ENUM('draft', 'released', 'completed', 'cancelled') DEFAULT 'draft' NOT NULL,created_at DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL,created_by BIGINT UNSIGNED COMMENT '创建人ID',INDEX idx_order_no (order_no),INDEX idx_product_id (product_id),INDEX idx_delivery_date (delivery_date),CONSTRAINT fk_order_product FOREIGN KEY (product_id) REFERENCES product(id),CONSTRAINT fk_order_bom FOREIGN KEY (bom_header_id) REFERENCES bom_header(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='生产订单表';

生产任务单表 prod_task
CREATE TABLE prod_task (id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,prod_order_id BIGINT UNSIGNED NOT NULL COMMENT '所属订单ID',task_no VARCHAR(30) NOT NULL UNIQUE COMMENT '任务单号',product_id BIGINT UNSIGNED NOT NULL COMMENT '产品ID',qty DECIMAL(12,2) NOT NULL COMMENT '任务数量',plan_start DATE COMMENT '计划开工',plan_end DATE COMMENT '计划完工',status ENUM('pending', 'planned', 'in_progress', 'completed', 'cancelled') DEFAULT 'pending' NOT NULL,created_at DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL,INDEX idx_task_no (task_no),INDEX idx_order_id (prod_order_id),CONSTRAINT fk_task_order FOREIGN KEY (prod_order_id) REFERENCES prod_order(id),CONSTRAINT fk_task_product FOREIGN KEY (product_id) REFERENCES product(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='生产任务单表';

任务 - 生产线关系表 task_line
CREATE TABLE task_line (id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,task_id BIGINT UNSIGNED NOT NULL COMMENT '任务ID',line_id BIGINT UNSIGNED NOT NULL COMMENT '生产线ID',seq INT NOT NULL COMMENT '生产顺序',qty_line DECIMAL(12,2) NOT NULL COMMENT '本线数量',status ENUM('pending', 'assigned', 'in_progress', 'completed') DEFAULT 'pending' NOT NULL,UNIQUE KEY uk_task_line (task_id, line_id),INDEX idx_task_id (task_id),INDEX idx_line_id (line_id),CONSTRAINT fk_taskline_task FOREIGN KEY (task_id) REFERENCES prod_task(id),CONSTRAINT fk_taskline_line FOREIGN KEY (line_id) REFERENCES prod_line(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='生产任务与生产线关系表';

任务工序实例表 task_process
CREATE TABLE task_process (id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,task_id BIGINT UNSIGNED NOT NULL COMMENT '任务单ID',task_line_id BIGINT UNSIGNED NOT NULL COMMENT '任务线ID',process_id BIGINT UNSIGNED NOT NULL COMMENT '工序ID',seq SMALLINT NOT NULL COMMENT '工序顺序',plan_start DATETIME NOT NULL COMMENT '计划开始',plan_end DATETIME NOT NULL COMMENT '计划结束',actual_start DATETIME COMMENT '实际开始',actual_end DATETIME COMMENT '实际结束',status ENUM('pending', 'in_progress', 'completed', 'paused') DEFAULT 'pending' NOT NULL,std_time DECIMAL(8,2) NOT NULL COMMENT '标准工时(分钟)',owner_user_id BIGINT UNSIGNED COMMENT '工序负责人',INDEX idx_task_line (task_line_id),INDEX idx_process_id (process_id),INDEX idx_status (status),CONSTRAINT fk_taskproc_task FOREIGN KEY (task_id) REFERENCES prod_task(id),CONSTRAINT fk_taskproc_linetask FOREIGN KEY (task_line_id) REFERENCES task_line(id),CONSTRAINT fk_taskproc_process FOREIGN KEY (process_id) REFERENCES process(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='生产任务工序实例表';

CREATE TABLE prod_part (id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,task_line_id BIGINT UNSIGNED NOT NULL COMMENT '任务线ID',part_name VARCHAR(100) NOT NULL COMMENT '部件名称',material VARCHAR(50) COMMENT '材质',length DECIMAL(8,2) COMMENT '长度(mm)',width DECIMAL(8,2) COMMENT '宽度(mm)',thick DECIMAL(8,2) COMMENT '厚度(mm)',qty DECIMAL(10,2) NOT NULL COMMENT '数量',unit VARCHAR(10) NOT NULL COMMENT '单位',INDEX idx_task_line (task_line_id),CONSTRAINT fk_prodp_taskline FOREIGN KEY (task_line_id) REFERENCES task_line(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='生产任务部件表';

物料需求表 material_requirement​​​​​​​
CREATE TABLE material_requirement (id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,prod_order_id BIGINT UNSIGNED COMMENT '订单ID',task_id BIGINT UNSIGNED COMMENT '任务ID',line_id BIGINT UNSIGNED COMMENT '生产线ID',material_id BIGINT UNSIGNED NOT NULL COMMENT '物料ID',spec VARCHAR(100) COMMENT '规格描述',qty_required DECIMAL(12,2) NOT NULL COMMENT '需求数量',qty_on_hand DECIMAL(12,2) DEFAULT 0.00 NOT NULL COMMENT '库存数量',qty_ordered DECIMAL(12,2) DEFAULT 0.00 NOT NULL COMMENT '已采数量',status ENUM('open', 'partial', 'fulfilled', 'cancelled') DEFAULT 'open' NOT NULL,INDEX idx_material (material_id),INDEX idx_order_task (prod_order_id, task_id),CONSTRAINT fk_mr_order FOREIGN KEY (prod_order_id) REFERENCES prod_order(id),CONSTRAINT fk_mr_task FOREIGN KEY (task_id) REFERENCES prod_task(id),CONSTRAINT fk_mr_line FOREIGN KEY (line_id) REFERENCES prod_line(id),CONSTRAINT fk_mr_material FOREIGN KEY (material_id) REFERENCES product(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='物料需求表';

生产报工表 prod_report
CREATE TABLE prod_report (id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,task_line_id BIGINT UNSIGNED NOT NULL COMMENT '任务线ID',process_id BIGINT UNSIGNED NOT NULL COMMENT '工序ID',worker_id BIGINT UNSIGNED NOT NULL COMMENT '员工ID',qty_good DECIMAL(12,2) NOT NULL COMMENT '合格数',qty_scrap DECIMAL(12,2) NOT NULL DEFAULT 0.00 COMMENT '废品数',start_time DATETIME NOT NULL COMMENT '开始时间',end_time DATETIME NOT NULL COMMENT '结束时间',wage_flag TINYINT(1) DEFAULT 0 NOT NULL COMMENT '已结算标记:0=未结算,1=已结算',INDEX idx_task_process (task_line_id, process_id),INDEX idx_worker (worker_id),INDEX idx_wage_flag (wage_flag),CONSTRAINT fk_report_taskline FOREIGN KEY (task_line_id) REFERENCES task_line(id),CONSTRAINT fk_report_process FOREIGN KEY (process_id) REFERENCES process(id)-- worker_id 外键需关联 worker 表(假设存在)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='生产报工表';

工资计算结果表 wage_calc

​​​​​​​

CREATE TABLE wage_calc (id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,worker_id BIGINT UNSIGNED NOT NULL COMMENT '员工ID',task_line_id BIGINT UNSIGNED COMMENT '任务线ID',process_id BIGINT UNSIGNED COMMENT '工序ID',qty_basis DECIMAL(12,2) NOT NULL COMMENT '计薪数量(通常为合格数)',unit_price DECIMAL(10,4) NOT NULL COMMENT '单价(元/单位)',amount DECIMAL(12,2) NOT NULL COMMENT '金额',calc_date DATE NOT NULL COMMENT '计算日期',report_id BIGINT UNSIGNED NOT NULL COMMENT '关联的报工记录ID',UNIQUE KEY uk_report_id (report_id), -- 防止重复结算INDEX idx_worker_date (worker_id, calc_date),INDEX idx_calc_date (calc_date),CONSTRAINT fk_wage_worker FOREIGN KEY (worker_id) REFERENCES worker(id),CONSTRAINT fk_wage_taskline FOREIGN KEY (task_line_id) REFERENCES task_line(id),CONSTRAINT fk_wage_process FOREIGN KEY (process_id) REFERENCES process(id),CONSTRAINT fk_wage_report FOREIGN KEY (report_id) REFERENCES prod_report(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='工资计算结果表';

员工表 worker

CREATE TABLE worker (id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,emp_code VARCHAR(20) NOT NULL UNIQUE,name VARCHAR(50) NOT NULL,dept VARCHAR(50),position VARCHAR(50),enable_flag TINYINT(1) DEFAULT 1,created_at DATETIME DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

枚举字典表 dict
CREATE TABLE dict (id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,type VARCHAR(50) NOT NULL COMMENT '类型,如 order_status, task_status',code VARCHAR(50) NOT NULL COMMENT '编码',value VARCHAR(100) NOT NULL COMMENT '显示值',sort_order INT DEFAULT 0,UNIQUE KEY uk_type_code (type, code)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

效果演示:

http://dms.demo.07fly.xyz

开源地址:

https://gitee.com/07fly/07flyadmin

如果您对源码&技术感兴趣,请点赞+收藏+转发+关注,大家的支持是我分享最大的动力!!!

http://www.dtcms.com/a/557692.html

相关文章:

  • 实现定时器组件
  • 东莞网站建制作wordpress 跳转首页
  • .net做网站的方式wordpress有时打不开
  • MySQL索引:SQL性能分析工具详解(进阶篇)
  • 旅游网站的建设内容drupal wordpress网站
  • 别人的网站是怎么做的青岛中企动力做网站怎么样
  • python异步编程 -协程的实际意义
  • 如何制作网站主页做ps彩图什么网站好
  • 山西网站建设企业福建定制网站开发
  • 实体店入库出库软件有哪些
  • MySQL的MOD函数介绍
  • python代码之彩虹便利贴
  • QWidget::paintEngine: Should no longer be called错误情况总结
  • 成都的网站建设为什么建设银行网站打不开
  • 山东济南网站建设公司排名建站技术
  • PHP-5.2.1.tar.gz 离线安装教程:从源码编译到配置的详细步骤(附安装包)
  • Postman持久化保存/设置断言详解
  • 有害内容检测系统复现指南
  • dw软件怎么制作网页百度seo网站优化怎么做
  • 软件测试之环境搭建及测试流程
  • [N_084]基于jsp,ssm学生信息管理系统
  • AI基础概念-第一部分:核心名词与定义(一)
  • 做设计用到的网站wordpress默认播放器
  • WordPress如何建立手机网站网络营销的发展趋势和前景
  • AXF文件变量地址查找完全指南
  • 网站设计是什么自备服务器做网站
  • 物联网运维中基于自适应射频环境监测的动态频谱优化技术
  • Linux PCIe子系统深度解析:从硬件原理到驱动开发
  • ASP Folder:深入解析其功能与使用技巧
  • 那种网站建设软件最好广州网站制作联系方式