commit content
This commit is contained in:
BIN
prd/db/.DS_Store
vendored
Normal file
BIN
prd/db/.DS_Store
vendored
Normal file
Binary file not shown.
44
prd/db/alter_erp_mp_mbom_add_columns.sql
Normal file
44
prd/db/alter_erp_mp_mbom_add_columns.sql
Normal file
@@ -0,0 +1,44 @@
|
||||
-- ============================================================
|
||||
-- erp_mp_mbom 表补充缺失字段
|
||||
-- 修复: Unknown column 'business_type' in 'field list'
|
||||
-- MpMbomMapper 与 MpMbom 实体需要的字段需与表结构一致
|
||||
-- 生成日期: 2026-02-06
|
||||
-- ============================================================
|
||||
|
||||
SET NAMES utf8mb4;
|
||||
|
||||
-- 辅助存储过程 (若已存在可跳过)
|
||||
DROP PROCEDURE IF EXISTS `proc_add_column_if_not_exists`;
|
||||
|
||||
DELIMITER //
|
||||
CREATE PROCEDURE `proc_add_column_if_not_exists`(
|
||||
IN p_table_name VARCHAR(64),
|
||||
IN p_column_name VARCHAR(64),
|
||||
IN p_column_definition VARCHAR(500)
|
||||
)
|
||||
BEGIN
|
||||
DECLARE v_count INT DEFAULT 0;
|
||||
SELECT COUNT(*) INTO v_count
|
||||
FROM information_schema.COLUMNS
|
||||
WHERE TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_NAME = p_table_name
|
||||
AND COLUMN_NAME = p_column_name;
|
||||
IF v_count = 0 THEN
|
||||
SET @sql = CONCAT('ALTER TABLE `', p_table_name, '` ADD COLUMN `', p_column_name, '` ', p_column_definition);
|
||||
PREPARE stmt FROM @sql;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
END IF;
|
||||
END //
|
||||
DELIMITER ;
|
||||
|
||||
-- erp_mp_mbom 补充 MpMbomMapper 所需的缺失字段
|
||||
CALL proc_add_column_if_not_exists('erp_mp_mbom', 'business_type', "varchar(20) DEFAULT NULL COMMENT '业务类型(BOM运算/生产补料)'");
|
||||
CALL proc_add_column_if_not_exists('erp_mp_mbom', 'sales_order_id', "bigint(20) DEFAULT NULL COMMENT '销售订单ID'");
|
||||
CALL proc_add_column_if_not_exists('erp_mp_mbom', 'operator_id', "bigint(20) DEFAULT NULL COMMENT '操作员ID'");
|
||||
CALL proc_add_column_if_not_exists('erp_mp_mbom', 'operator_name', "varchar(50) DEFAULT NULL COMMENT '操作员名称'");
|
||||
CALL proc_add_column_if_not_exists('erp_mp_mbom', 'approver_id', "bigint(20) DEFAULT NULL COMMENT '审核员ID'");
|
||||
CALL proc_add_column_if_not_exists('erp_mp_mbom', 'approver_name', "varchar(50) DEFAULT NULL COMMENT '审核员名称'");
|
||||
CALL proc_add_column_if_not_exists('erp_mp_mbom', 'approve_date', "datetime DEFAULT NULL COMMENT '审核日期'");
|
||||
|
||||
DROP PROCEDURE IF EXISTS `proc_add_column_if_not_exists`;
|
||||
35
prd/db/alter_erp_mp_mbom_add_issue_date.sql
Normal file
35
prd/db/alter_erp_mp_mbom_add_issue_date.sql
Normal file
@@ -0,0 +1,35 @@
|
||||
-- ============================================================
|
||||
-- erp_mp_mbom 表增加下发时间字段
|
||||
-- 下发时间: issue_date,用于记录物料清单下发车间的时间
|
||||
-- 生成日期: 2026-02-13
|
||||
-- ============================================================
|
||||
|
||||
SET NAMES utf8mb4;
|
||||
|
||||
DROP PROCEDURE IF EXISTS `proc_add_column_if_not_exists`;
|
||||
|
||||
DELIMITER //
|
||||
CREATE PROCEDURE `proc_add_column_if_not_exists`(
|
||||
IN p_table_name VARCHAR(64),
|
||||
IN p_column_name VARCHAR(64),
|
||||
IN p_column_definition VARCHAR(500)
|
||||
)
|
||||
BEGIN
|
||||
DECLARE v_count INT DEFAULT 0;
|
||||
SELECT COUNT(*) INTO v_count
|
||||
FROM information_schema.COLUMNS
|
||||
WHERE TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_NAME = p_table_name
|
||||
AND COLUMN_NAME = p_column_name;
|
||||
IF v_count = 0 THEN
|
||||
SET @sql = CONCAT('ALTER TABLE `', p_table_name, '` ADD COLUMN `', p_column_name, '` ', p_column_definition);
|
||||
PREPARE stmt FROM @sql;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
END IF;
|
||||
END //
|
||||
DELIMITER ;
|
||||
|
||||
CALL proc_add_column_if_not_exists('erp_mp_mbom', 'issue_date', "datetime DEFAULT NULL COMMENT '下发时间'");
|
||||
|
||||
DROP PROCEDURE IF EXISTS `proc_add_column_if_not_exists`;
|
||||
40
prd/db/alter_erp_mp_mbom_line_add_line_no.sql
Normal file
40
prd/db/alter_erp_mp_mbom_line_add_line_no.sql
Normal file
@@ -0,0 +1,40 @@
|
||||
-- ============================================================
|
||||
-- erp_mp_mbom_line 表增加与 MpMbomLineMapper 一致的字段
|
||||
-- 含: line_no, parent_item_id, bom_level, base_qty, loss_rate
|
||||
-- (pick_type 见 alter_erp_mp_mbom_line_add_pick_type.sql)
|
||||
-- 生成日期: 2026-02-13
|
||||
-- ============================================================
|
||||
|
||||
SET NAMES utf8mb4;
|
||||
|
||||
DROP PROCEDURE IF EXISTS `proc_add_column_if_not_exists`;
|
||||
|
||||
DELIMITER //
|
||||
CREATE PROCEDURE `proc_add_column_if_not_exists`(
|
||||
IN p_table_name VARCHAR(64),
|
||||
IN p_column_name VARCHAR(64),
|
||||
IN p_column_definition VARCHAR(500)
|
||||
)
|
||||
BEGIN
|
||||
DECLARE v_count INT DEFAULT 0;
|
||||
SELECT COUNT(*) INTO v_count
|
||||
FROM information_schema.COLUMNS
|
||||
WHERE TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_NAME = p_table_name
|
||||
AND COLUMN_NAME = p_column_name;
|
||||
IF v_count = 0 THEN
|
||||
SET @sql = CONCAT('ALTER TABLE `', p_table_name, '` ADD COLUMN `', p_column_name, '` ', p_column_definition);
|
||||
PREPARE stmt FROM @sql;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
END IF;
|
||||
END //
|
||||
DELIMITER ;
|
||||
|
||||
CALL proc_add_column_if_not_exists('erp_mp_mbom_line', 'line_no', "int(11) DEFAULT 0 COMMENT '行号'");
|
||||
CALL proc_add_column_if_not_exists('erp_mp_mbom_line', 'parent_item_id', "bigint(20) DEFAULT NULL COMMENT '父级物料ID'");
|
||||
CALL proc_add_column_if_not_exists('erp_mp_mbom_line', 'bom_level', "int(11) DEFAULT 1 COMMENT 'BOM层级'");
|
||||
CALL proc_add_column_if_not_exists('erp_mp_mbom_line', 'base_qty', "decimal(18,6) DEFAULT 1.000000 COMMENT '基本用量'");
|
||||
CALL proc_add_column_if_not_exists('erp_mp_mbom_line', 'loss_rate', "decimal(5,2) DEFAULT 0.00 COMMENT '损耗率(%)'");
|
||||
|
||||
DROP PROCEDURE IF EXISTS `proc_add_column_if_not_exists`;
|
||||
35
prd/db/alter_erp_mp_mbom_line_add_pick_type.sql
Normal file
35
prd/db/alter_erp_mp_mbom_line_add_pick_type.sql
Normal file
@@ -0,0 +1,35 @@
|
||||
-- ============================================================
|
||||
-- erp_mp_mbom_line 表增加领料方式字段
|
||||
-- 领料方式: ORDER按单领用 / DIRECT直接领用
|
||||
-- 生成日期: 2026-02-13
|
||||
-- ============================================================
|
||||
|
||||
SET NAMES utf8mb4;
|
||||
|
||||
DROP PROCEDURE IF EXISTS `proc_add_column_if_not_exists`;
|
||||
|
||||
DELIMITER //
|
||||
CREATE PROCEDURE `proc_add_column_if_not_exists`(
|
||||
IN p_table_name VARCHAR(64),
|
||||
IN p_column_name VARCHAR(64),
|
||||
IN p_column_definition VARCHAR(500)
|
||||
)
|
||||
BEGIN
|
||||
DECLARE v_count INT DEFAULT 0;
|
||||
SELECT COUNT(*) INTO v_count
|
||||
FROM information_schema.COLUMNS
|
||||
WHERE TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_NAME = p_table_name
|
||||
AND COLUMN_NAME = p_column_name;
|
||||
IF v_count = 0 THEN
|
||||
SET @sql = CONCAT('ALTER TABLE `', p_table_name, '` ADD COLUMN `', p_column_name, '` ', p_column_definition);
|
||||
PREPARE stmt FROM @sql;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
END IF;
|
||||
END //
|
||||
DELIMITER ;
|
||||
|
||||
CALL proc_add_column_if_not_exists('erp_mp_mbom_line', 'pick_type', "varchar(20) DEFAULT 'ORDER' COMMENT '领料方式(ORDER按单领用/DIRECT直接领用)'");
|
||||
|
||||
DROP PROCEDURE IF EXISTS `proc_add_column_if_not_exists`;
|
||||
50
prd/db/alter_erp_mp_purchase_add_columns.sql
Normal file
50
prd/db/alter_erp_mp_purchase_add_columns.sql
Normal file
@@ -0,0 +1,50 @@
|
||||
-- =====================================================
|
||||
-- 采购计划单表(erp_mp_purchase) - 新增字段
|
||||
-- 日期: 2026-02-07
|
||||
-- 说明: 补充采购计划单页面所需的扩展字段;若表由 mom-db-260206 的
|
||||
-- erp_mp_purchase 建表脚本创建,需执行本脚本以支持 /erp/mp/purchase 接口。
|
||||
-- 若某列已存在会报 Duplicate column,可跳过该条或注释掉。
|
||||
-- =====================================================
|
||||
|
||||
-- 业务类型(原材料、零部件、装配件、五金件、包装物等)
|
||||
ALTER TABLE `erp_mp_purchase` ADD COLUMN `business_type` varchar(50) DEFAULT NULL COMMENT '业务类型' AFTER `need_type`;
|
||||
|
||||
-- 业务状态(NORMAL、PAUSE、CANCEL、COMPLETED)
|
||||
ALTER TABLE `erp_mp_purchase` ADD COLUMN `business_status` varchar(20) DEFAULT 'NORMAL' COMMENT '业务状态' AFTER `business_type`;
|
||||
|
||||
-- 业务部门
|
||||
ALTER TABLE `erp_mp_purchase` ADD COLUMN `dept_id` bigint DEFAULT NULL COMMENT '业务部门ID' AFTER `business_status`;
|
||||
ALTER TABLE `erp_mp_purchase` ADD COLUMN `dept_name` varchar(100) DEFAULT NULL COMMENT '业务部门名称' AFTER `dept_id`;
|
||||
|
||||
-- 销售员名称
|
||||
ALTER TABLE `erp_mp_purchase` ADD COLUMN `sales_user_name` varchar(50) DEFAULT NULL COMMENT '销售员名称' AFTER `sales_order_code`;
|
||||
|
||||
-- 需求数量和需求日期(物料明细级别)
|
||||
ALTER TABLE `erp_mp_purchase` ADD COLUMN `demand_qty` decimal(18,4) DEFAULT NULL COMMENT '需求数量' AFTER `unit_name`;
|
||||
ALTER TABLE `erp_mp_purchase` ADD COLUMN `demand_date` date DEFAULT NULL COMMENT '需求日期' AFTER `demand_qty`;
|
||||
|
||||
-- 可用量(库存可用量,可为负表示缺料)
|
||||
ALTER TABLE `erp_mp_purchase` ADD COLUMN `available_qty` decimal(18,4) DEFAULT NULL COMMENT '可用量' AFTER `demand_date`;
|
||||
|
||||
-- 主产品数量(表头级别,引入后自动带入)
|
||||
ALTER TABLE `erp_mp_purchase` ADD COLUMN `total_quantity` decimal(18,4) DEFAULT NULL COMMENT '主产品数量' AFTER `ordered_qty`;
|
||||
|
||||
-- 销售订单ID(与 sales_order_code 对应)
|
||||
ALTER TABLE `erp_mp_purchase` ADD COLUMN `sales_order_id` bigint DEFAULT NULL COMMENT '销售订单ID' AFTER `plan_code`;
|
||||
|
||||
-- 操作员、审核员(基础表若无则需先添加,再添加 operator_name2)
|
||||
ALTER TABLE `erp_mp_purchase` ADD COLUMN `operator_id` bigint DEFAULT NULL COMMENT '操作员ID' AFTER `remark`;
|
||||
ALTER TABLE `erp_mp_purchase` ADD COLUMN `operator_name` varchar(50) DEFAULT NULL COMMENT '操作员名称' AFTER `operator_id`;
|
||||
ALTER TABLE `erp_mp_purchase` ADD COLUMN `approver_id` bigint DEFAULT NULL COMMENT '审核员ID' AFTER `operator_name`;
|
||||
ALTER TABLE `erp_mp_purchase` ADD COLUMN `approver_name` varchar(50) DEFAULT NULL COMMENT '审核员名称' AFTER `approver_id`;
|
||||
ALTER TABLE `erp_mp_purchase` ADD COLUMN `approve_date` datetime DEFAULT NULL COMMENT '审核日期' AFTER `approver_name`;
|
||||
|
||||
-- 业务人员(采购人员)
|
||||
ALTER TABLE `erp_mp_purchase` ADD COLUMN `operator_name2` varchar(50) DEFAULT NULL COMMENT '业务人员' AFTER `operator_name`;
|
||||
|
||||
-- 物料分类ID(用于快捷筛选)
|
||||
ALTER TABLE `erp_mp_purchase` ADD COLUMN `item_type_id` bigint DEFAULT NULL COMMENT '物料分类ID' AFTER `item_name`;
|
||||
|
||||
-- 更新DDL中的status默认值:后端使用 PREPARE 而非 DRAFT
|
||||
-- 如果原DDL使用 DEFAULT 'DRAFT',需要修改为:
|
||||
-- ALTER TABLE `erp_mp_purchase` ALTER COLUMN `status` SET DEFAULT 'PREPARE';
|
||||
19
prd/db/alter_md_bom_add_item_spec.sql
Normal file
19
prd/db/alter_md_bom_add_item_spec.sql
Normal file
@@ -0,0 +1,19 @@
|
||||
-- ============================================================
|
||||
-- 为 md_bom 表添加 item_spec 字段
|
||||
-- 说明: 修复字段缺失问题,item_spec作为冗余字段存储产品物料规格
|
||||
-- 生成日期: 2026-01-26
|
||||
-- 兼容 MySQL 5.7+
|
||||
-- ============================================================
|
||||
|
||||
SET NAMES utf8mb4;
|
||||
|
||||
-- 添加 item_spec 字段
|
||||
ALTER TABLE `md_bom`
|
||||
ADD COLUMN `item_spec` varchar(200) DEFAULT NULL COMMENT '产品物料规格 (冗余字段)'
|
||||
AFTER `item_name`;
|
||||
|
||||
-- 更新现有数据:从md_item表同步item_spec
|
||||
UPDATE `md_bom` b
|
||||
INNER JOIN `md_item` i ON b.item_id = i.item_id
|
||||
SET b.item_spec = i.specification
|
||||
WHERE b.item_spec IS NULL;
|
||||
72
prd/db/alter_md_client.sql
Normal file
72
prd/db/alter_md_client.sql
Normal file
@@ -0,0 +1,72 @@
|
||||
-- =====================================================
|
||||
-- 更新 md_client 表结构,合并 erp_sl_client 的字段
|
||||
-- 执行日期: 2026-01-25
|
||||
-- =====================================================
|
||||
|
||||
-- 1. 添加 tenant_id 字段(租户ID)
|
||||
ALTER TABLE `md_client`
|
||||
ADD COLUMN `tenant_id` varchar(20) DEFAULT NULL COMMENT '租户ID' AFTER `client_id`;
|
||||
|
||||
-- 2. 添加 client_level 字段(客户级别)
|
||||
ALTER TABLE `md_client`
|
||||
ADD COLUMN `client_level` varchar(10) DEFAULT 'B' COMMENT '客户级别(A/B/C/D)' AFTER `client_type`;
|
||||
|
||||
-- 3. 添加 client_source 字段(客户来源)
|
||||
ALTER TABLE `md_client`
|
||||
ADD COLUMN `client_source` varchar(50) DEFAULT NULL COMMENT '客户来源' AFTER `client_level`;
|
||||
|
||||
-- 4. 添加 client_industry 字段(所属行业)
|
||||
ALTER TABLE `md_client`
|
||||
ADD COLUMN `client_industry` varchar(50) DEFAULT NULL COMMENT '所属行业' AFTER `client_source`;
|
||||
|
||||
-- 5. 添加 province 字段(省份)
|
||||
ALTER TABLE `md_client`
|
||||
ADD COLUMN `province` varchar(50) DEFAULT NULL COMMENT '省份' AFTER `client_industry`;
|
||||
|
||||
-- 6. 添加 city 字段(城市)
|
||||
ALTER TABLE `md_client`
|
||||
ADD COLUMN `city` varchar(50) DEFAULT NULL COMMENT '城市' AFTER `province`;
|
||||
|
||||
-- 7. 添加 fax 字段(传真)
|
||||
ALTER TABLE `md_client`
|
||||
ADD COLUMN `fax` varchar(20) DEFAULT NULL COMMENT '传真' AFTER `tel`;
|
||||
|
||||
-- 8. 添加 bank_name 字段(开户银行)
|
||||
ALTER TABLE `md_client`
|
||||
ADD COLUMN `bank_name` varchar(100) DEFAULT NULL COMMENT '开户银行' AFTER `credit_code`;
|
||||
|
||||
-- 9. 添加 bank_account 字段(银行账号)
|
||||
ALTER TABLE `md_client`
|
||||
ADD COLUMN `bank_account` varchar(30) DEFAULT NULL COMMENT '银行账号' AFTER `bank_name`;
|
||||
|
||||
-- 10. 添加 tax_no 字段(税号)
|
||||
ALTER TABLE `md_client`
|
||||
ADD COLUMN `tax_no` varchar(30) DEFAULT NULL COMMENT '税号' AFTER `bank_account`;
|
||||
|
||||
-- 11. 添加 invoice_address 字段(开票地址电话)
|
||||
ALTER TABLE `md_client`
|
||||
ADD COLUMN `invoice_address` varchar(200) DEFAULT NULL COMMENT '开票地址电话' AFTER `tax_no`;
|
||||
|
||||
-- 12. 添加 del_flag 字段(删除标志)
|
||||
ALTER TABLE `md_client`
|
||||
ADD COLUMN `del_flag` char(1) NOT NULL DEFAULT '0' COMMENT '删除标志' AFTER `remark`;
|
||||
|
||||
-- 13. 添加唯一索引 uk_client_code(客户编码+租户ID)
|
||||
ALTER TABLE `md_client`
|
||||
ADD UNIQUE KEY `uk_client_code` (`client_code`, `tenant_id`);
|
||||
|
||||
-- 14. 添加普通索引 idx_client_name(客户名称)
|
||||
ALTER TABLE `md_client`
|
||||
ADD KEY `idx_client_name` (`client_name`);
|
||||
|
||||
-- 15. 添加普通索引 idx_client_tenant(租户ID)
|
||||
ALTER TABLE `md_client`
|
||||
ADD KEY `idx_client_tenant` (`tenant_id`);
|
||||
|
||||
-- =====================================================
|
||||
-- 说明:
|
||||
-- 1. 如果字段已存在,执行时会报错,需要先检查字段是否存在
|
||||
-- 2. 如果索引已存在,执行时会报错,需要先检查索引是否存在
|
||||
-- 3. 建议在生产环境执行前先备份数据库
|
||||
-- 4. 执行后需要更新现有数据的 del_flag 字段为 '0'(如果原来没有该字段)
|
||||
-- =====================================================
|
||||
106
prd/db/alter_md_product_bom_for_md_bom.sql
Normal file
106
prd/db/alter_md_product_bom_for_md_bom.sql
Normal file
@@ -0,0 +1,106 @@
|
||||
-- ============================================================
|
||||
-- 修改 md_product_bom 表以关联 md_bom 表
|
||||
-- 说明: 将md_product_bom表的主键重命名,并添加外键关联md_bom表
|
||||
-- 生成日期: 2026-01-26
|
||||
-- 兼容 MySQL 5.7+
|
||||
-- ============================================================
|
||||
|
||||
SET NAMES utf8mb4;
|
||||
|
||||
-- ============================================================
|
||||
-- 方案一: 重命名主键字段(推荐)
|
||||
-- ============================================================
|
||||
-- 将md_product_bom表的主键从bom_id重命名为bom_line_id
|
||||
-- 然后添加bom_id字段作为外键关联md_bom表
|
||||
|
||||
-- 1. 重命名主键字段
|
||||
ALTER TABLE `md_product_bom`
|
||||
CHANGE COLUMN `bom_id` `bom_line_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'BOM明细行ID (主键)';
|
||||
|
||||
-- 2. 添加外键字段关联md_bom表
|
||||
ALTER TABLE `md_product_bom`
|
||||
ADD COLUMN `bom_id` bigint(20) DEFAULT NULL COMMENT 'BOM表头ID (外键关联md_bom.bom_id)' AFTER `bom_line_id`;
|
||||
|
||||
-- 3. 创建外键索引
|
||||
ALTER TABLE `md_product_bom`
|
||||
ADD INDEX `idx_bom_header` (`bom_id`);
|
||||
|
||||
-- 4. 如果需要创建外键约束(可选,根据实际需求)
|
||||
-- ALTER TABLE `md_product_bom`
|
||||
-- ADD CONSTRAINT `fk_bom_header` FOREIGN KEY (`bom_id`) REFERENCES `md_bom` (`bom_id`)
|
||||
-- ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- ============================================================
|
||||
-- 方案二: 保持现状,仅添加外键字段(如果不想重命名主键)
|
||||
-- ============================================================
|
||||
-- 如果不想重命名主键,可以添加一个新字段作为外键
|
||||
-- 但这样会导致字段名混淆,不推荐
|
||||
|
||||
-- ALTER TABLE `md_product_bom`
|
||||
-- ADD COLUMN `bom_header_id` bigint(20) DEFAULT NULL COMMENT 'BOM表头ID (外键关联md_bom.bom_id)' AFTER `bom_line_id`;
|
||||
|
||||
-- ALTER TABLE `md_product_bom`
|
||||
-- ADD INDEX `idx_bom_header` (`bom_header_id`);
|
||||
|
||||
-- ============================================================
|
||||
-- 数据迁移说明
|
||||
-- ============================================================
|
||||
--
|
||||
-- 如果md_product_bom表中已有数据,需要根据bom_code关联更新bom_id字段:
|
||||
--
|
||||
-- UPDATE md_product_bom pb
|
||||
-- INNER JOIN md_bom b ON pb.bom_code = b.bom_code
|
||||
-- SET pb.bom_id = b.bom_id
|
||||
-- WHERE pb.bom_id IS NULL;
|
||||
--
|
||||
-- 或者根据item_id关联(如果bom_code不可用):
|
||||
--
|
||||
-- UPDATE md_product_bom pb
|
||||
-- INNER JOIN md_bom b ON pb.item_id = b.item_id
|
||||
-- SET pb.bom_id = b.bom_id
|
||||
-- WHERE pb.bom_id IS NULL
|
||||
-- AND pb.item_id IS NOT NULL;
|
||||
--
|
||||
-- ============================================================
|
||||
-- 字段说明
|
||||
-- ============================================================
|
||||
--
|
||||
-- md_product_bom表字段(修改后):
|
||||
-- - bom_line_id: 主键,BOM明细行ID(原bom_id,对应ERP的line_id)
|
||||
-- - bom_id: 外键,关联md_bom.bom_id(BOM表头ID)
|
||||
-- - item_id: 产品物料ID(冗余字段,用于快速查询)
|
||||
-- - bom_item_id: 子件物料ID
|
||||
-- - 其他字段保持不变
|
||||
--
|
||||
-- ============================================================
|
||||
-- 索引建议
|
||||
-- ============================================================
|
||||
--
|
||||
-- 已存在的索引:
|
||||
-- - PRIMARY KEY (bom_line_id) - 主键索引
|
||||
-- - idx_bom_item (item_id) - 产品物料ID索引
|
||||
-- - idx_bom_tenant (tenant_id) - 租户ID索引
|
||||
-- - idx_bom_code (bom_code) - BOM编码索引
|
||||
--
|
||||
-- 新增索引:
|
||||
-- - idx_bom_header (bom_id) - BOM表头ID索引(外键索引)
|
||||
--
|
||||
-- ============================================================
|
||||
-- 表关系图(修改后)
|
||||
-- ============================================================
|
||||
--
|
||||
-- md_bom (BOM表头)
|
||||
-- ├─ bom_id (PK)
|
||||
-- ├─ bom_code (UK)
|
||||
-- ├─ item_id → md_item.item_id
|
||||
-- └─ ...
|
||||
--
|
||||
-- md_product_bom (BOM明细)
|
||||
-- ├─ bom_line_id (PK) ← 明细行ID(原bom_id)
|
||||
-- ├─ bom_id (FK) → md_bom.bom_id ← 外键关联表头
|
||||
-- ├─ item_id → md_item.item_id ← 产品物料ID(冗余)
|
||||
-- ├─ bom_item_id → md_item.item_id ← 子件物料ID
|
||||
-- ├─ line_no
|
||||
-- └─ ...
|
||||
--
|
||||
-- ============================================================
|
||||
73
prd/db/alter_md_vendor.sql
Normal file
73
prd/db/alter_md_vendor.sql
Normal file
@@ -0,0 +1,73 @@
|
||||
-- ==========================================
|
||||
-- 同步ERP供应商字段到MOM系统 md_vendor 表
|
||||
-- 日期: 2026-01-26
|
||||
-- ==========================================
|
||||
|
||||
-- 添加供应商类型字段
|
||||
ALTER TABLE md_vendor ADD COLUMN vendor_type VARCHAR(64) DEFAULT NULL COMMENT '供应商类型(CORE-核心供应商、NORMAL-普通供应商、TEMP-临时供应商)' AFTER vendor_des;
|
||||
|
||||
-- 添加地区相关字段
|
||||
ALTER TABLE md_vendor ADD COLUMN province VARCHAR(64) DEFAULT NULL COMMENT '省份' AFTER address;
|
||||
ALTER TABLE md_vendor ADD COLUMN city VARCHAR(64) DEFAULT NULL COMMENT '城市' AFTER province;
|
||||
ALTER TABLE md_vendor ADD COLUMN zip_code VARCHAR(20) DEFAULT NULL COMMENT '邮编' AFTER city;
|
||||
|
||||
-- 添加传真字段
|
||||
ALTER TABLE md_vendor ADD COLUMN fax VARCHAR(64) DEFAULT NULL COMMENT '传真' AFTER tel;
|
||||
|
||||
-- 添加财务相关字段
|
||||
ALTER TABLE md_vendor ADD COLUMN bank_name VARCHAR(128) DEFAULT NULL COMMENT '开户银行' AFTER credit_code;
|
||||
ALTER TABLE md_vendor ADD COLUMN bank_account VARCHAR(64) DEFAULT NULL COMMENT '银行账号' AFTER bank_name;
|
||||
ALTER TABLE md_vendor ADD COLUMN tax_no VARCHAR(64) DEFAULT NULL COMMENT '税号' AFTER bank_account;
|
||||
ALTER TABLE md_vendor ADD COLUMN invoice_address VARCHAR(255) DEFAULT NULL COMMENT '开票地址' AFTER tax_no;
|
||||
|
||||
-- 添加供应料品字段
|
||||
ALTER TABLE md_vendor ADD COLUMN supply_items VARCHAR(500) DEFAULT NULL COMMENT '供应料品(多个以逗号分隔)' AFTER invoice_address;
|
||||
|
||||
-- 添加删除标志字段
|
||||
ALTER TABLE md_vendor ADD COLUMN del_flag CHAR(1) DEFAULT '0' COMMENT '删除标志(0-正常 1-删除)' AFTER enable_flag;
|
||||
|
||||
-- 添加租户ID字段(如果不存在)
|
||||
-- ALTER TABLE md_vendor ADD COLUMN tenant_id VARCHAR(64) DEFAULT '1001' COMMENT '租户ID' AFTER vendor_id;
|
||||
|
||||
-- ==========================================
|
||||
-- 字段说明对照表
|
||||
-- ==========================================
|
||||
-- ERP字段名 | MOM字段名 | 说明
|
||||
-- ------------------|-------------------|------------------
|
||||
-- vendorId | vendor_id | 供应商ID(已存在)
|
||||
-- vendorCode | vendor_code | 供应商编码(已存在)
|
||||
-- vendorName | vendor_name | 供应商名称(已存在)
|
||||
-- vendorNick | vendor_nick | 供应商简称(已存在)
|
||||
-- vendorEn | vendor_en | 英文名称(已存在)
|
||||
-- vendorDes | vendor_des | 供应商简介(已存在)
|
||||
-- vendorType | vendor_type | 供应商类型(新增)
|
||||
-- vendorLevel | vendor_level | 供应商等级(已存在)
|
||||
-- vendorScore | vendor_score | 供应商评分(已存在)
|
||||
-- vendorLogo | vendor_logo | Logo地址(已存在)
|
||||
-- address | address | 公司地址(已存在)
|
||||
-- province | province | 省份(新增)
|
||||
-- city | city | 城市(新增)
|
||||
-- zipCode | zip_code | 邮编(新增)
|
||||
-- website | website | 网址(已存在)
|
||||
-- email | email | 邮箱(已存在)
|
||||
-- tel | tel | 电话(已存在)
|
||||
-- fax | fax | 传真(新增)
|
||||
-- contact1 | contact1 | 联系人1(已存在)
|
||||
-- contact1Tel | contact1_tel | 联系人1电话(已存在)
|
||||
-- contact1Email | contact1_email | 联系人1邮箱(已存在)
|
||||
-- contact2 | contact2 | 联系人2(已存在)
|
||||
-- contact2Tel | contact2_tel | 联系人2电话(已存在)
|
||||
-- contact2Email | contact2_email | 联系人2邮箱(已存在)
|
||||
-- creditCode | credit_code | 统一社会信用代码(已存在)
|
||||
-- bankName | bank_name | 开户银行(新增)
|
||||
-- bankAccount | bank_account | 银行账号(新增)
|
||||
-- taxNo | tax_no | 税号(新增)
|
||||
-- invoiceAddress | invoice_address | 开票地址(新增)
|
||||
-- supplyItems | supply_items | 供应料品(新增)
|
||||
-- enableFlag | enable_flag | 启用状态(已存在)
|
||||
-- delFlag | del_flag | 删除标志(新增)
|
||||
-- remark | remark | 备注(已存在)
|
||||
-- createBy | create_by | 创建者(已存在)
|
||||
-- createTime | create_time | 创建时间(已存在)
|
||||
-- updateBy | update_by | 更新者(已存在)
|
||||
-- updateTime | update_time | 更新时间(已存在)
|
||||
129
prd/db/create_md_bom_table.sql
Normal file
129
prd/db/create_md_bom_table.sql
Normal file
@@ -0,0 +1,129 @@
|
||||
-- ============================================================
|
||||
-- MOM系统 md_bom 表创建脚本
|
||||
-- 对应ERP系统: erp_md_bom
|
||||
-- 生成日期: 2026-01-26
|
||||
-- 兼容 MySQL 5.7+
|
||||
-- ============================================================
|
||||
|
||||
SET NAMES utf8mb4;
|
||||
|
||||
-- ============================================================
|
||||
-- 创建 md_bom 表 (BOM表头)
|
||||
-- ============================================================
|
||||
|
||||
DROP TABLE IF EXISTS `md_bom`;
|
||||
|
||||
CREATE TABLE `md_bom` (
|
||||
`bom_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'BOM ID (主键)',
|
||||
`tenant_id` varchar(20) NOT NULL COMMENT '租户ID',
|
||||
`bom_code` varchar(32) NOT NULL COMMENT 'BOM编码',
|
||||
`bom_name` varchar(100) DEFAULT NULL COMMENT 'BOM名称',
|
||||
`item_id` bigint(20) NOT NULL COMMENT '产品物料ID (外键关联md_item.item_id)',
|
||||
`item_code` varchar(32) NOT NULL COMMENT '产品物料编码 (冗余字段)',
|
||||
`item_name` varchar(100) NOT NULL COMMENT '产品物料名称 (冗余字段)',
|
||||
`item_spec` varchar(200) DEFAULT NULL COMMENT '产品物料规格 (冗余字段)',
|
||||
`unit_name` varchar(20) DEFAULT NULL COMMENT '计量单位',
|
||||
`base_qty` decimal(18,4) NOT NULL DEFAULT '1.0000' COMMENT '基本数量 (母件基数)',
|
||||
`version` varchar(20) DEFAULT NULL COMMENT '版本号',
|
||||
`version_desc` varchar(200) DEFAULT NULL COMMENT '版本说明',
|
||||
`status` varchar(20) NOT NULL DEFAULT 'DRAFT' COMMENT 'BOM状态 (DRAFT/APPROVED/OBSOLETE)',
|
||||
`enable_flag` char(1) NOT NULL DEFAULT 'Y' COMMENT '启用状态 (Y/N)',
|
||||
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
|
||||
`del_flag` char(1) NOT NULL DEFAULT '0' COMMENT '删除标志 (0存在 1删除)',
|
||||
`create_by` varchar(64) DEFAULT NULL COMMENT '创建者',
|
||||
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
|
||||
`update_by` varchar(64) DEFAULT NULL COMMENT '更新者',
|
||||
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
|
||||
PRIMARY KEY (`bom_id`),
|
||||
UNIQUE KEY `uk_bom_code` (`bom_code`, `tenant_id`) COMMENT 'BOM编码唯一索引',
|
||||
KEY `idx_bom_item` (`item_id`) COMMENT '产品物料ID索引',
|
||||
KEY `idx_bom_tenant` (`tenant_id`) COMMENT '租户ID索引',
|
||||
KEY `idx_bom_status` (`status`) COMMENT '状态索引',
|
||||
KEY `idx_bom_code` (`bom_code`) COMMENT 'BOM编码索引'
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='产品BOM表头 (同步自ERP: erp_md_bom)';
|
||||
|
||||
-- ============================================================
|
||||
-- 表结构说明
|
||||
-- ============================================================
|
||||
--
|
||||
-- 1. 表名: md_bom
|
||||
-- 2. 说明: 存储产品BOM的表头信息,对应ERP系统的erp_md_bom表
|
||||
-- 3. 主键: bom_id (自增)
|
||||
-- 4. 唯一约束: bom_code + tenant_id (同一租户内BOM编码唯一)
|
||||
-- 5. 外键关联: item_id → md_item.item_id (产品物料)
|
||||
--
|
||||
-- 6. 与md_product_bom的关系:
|
||||
-- - md_bom (1) ←→ (N) md_product_bom
|
||||
-- - 一个BOM表头可以有多条明细记录
|
||||
-- - 通过md_product_bom.bom_id外键关联md_bom.bom_id
|
||||
--
|
||||
-- 7. 与md_item的关系:
|
||||
-- - md_bom.item_id → md_item.item_id (外键)
|
||||
-- - md_item.default_bom_id → md_bom.bom_id (冗余字段,用于快速查询默认BOM)
|
||||
-- - 一个产品可以有多个BOM版本,但只有一个默认BOM
|
||||
--
|
||||
-- ============================================================
|
||||
-- 字段映射说明 (ERP → MOM)
|
||||
-- ============================================================
|
||||
--
|
||||
-- erp_md_bom.bom_id → md_bom.bom_id
|
||||
-- erp_md_bom.tenant_id → md_bom.tenant_id
|
||||
-- erp_md_bom.bom_code → md_bom.bom_code
|
||||
-- erp_md_bom.bom_name → md_bom.bom_name
|
||||
-- erp_md_bom.item_id → md_bom.item_id
|
||||
-- erp_md_bom.item_code → md_bom.item_code
|
||||
-- erp_md_bom.item_name → md_bom.item_name
|
||||
-- erp_md_bom.unit_name → md_bom.unit_name
|
||||
-- erp_md_bom.base_qty → md_bom.base_qty
|
||||
-- erp_md_bom.version → md_bom.version
|
||||
-- erp_md_bom.version_desc → md_bom.version_desc
|
||||
-- erp_md_bom.status → md_bom.status
|
||||
-- erp_md_bom.enable_flag → md_bom.enable_flag
|
||||
-- erp_md_bom.remark → md_bom.remark
|
||||
-- erp_md_bom.del_flag → md_bom.del_flag
|
||||
--
|
||||
-- ============================================================
|
||||
-- 索引说明
|
||||
-- ============================================================
|
||||
--
|
||||
-- 1. PRIMARY KEY (bom_id): 主键索引
|
||||
-- 2. UNIQUE KEY uk_bom_code (bom_code, tenant_id): BOM编码唯一索引
|
||||
-- 3. KEY idx_bom_item (item_id): 产品物料ID索引,用于关联查询
|
||||
-- 4. KEY idx_bom_tenant (tenant_id): 租户ID索引,用于多租户隔离
|
||||
-- 5. KEY idx_bom_status (status): 状态索引,用于状态筛选
|
||||
-- 6. KEY idx_bom_code (bom_code): BOM编码索引,用于编码查询
|
||||
--
|
||||
-- ============================================================
|
||||
-- 数据同步规则
|
||||
-- ============================================================
|
||||
--
|
||||
-- 1. 同步方向: ERP → MOM
|
||||
-- 2. 同步频率: 实时/准实时
|
||||
-- 3. 同步顺序:
|
||||
-- a. 先同步 erp_md_bom → md_bom (表头)
|
||||
-- b. 再同步 erp_md_bom_line → md_product_bom (明细)
|
||||
-- 4. 关联方式: 通过 bom_code 或 bom_id 关联
|
||||
-- 5. 事务处理: 表头和明细必须在同一事务中同步
|
||||
-- 6. 删除规则: 删除BOM时,先删除所有明细记录,再删除表头记录
|
||||
--
|
||||
-- ============================================================
|
||||
-- 使用示例
|
||||
-- ============================================================
|
||||
--
|
||||
-- -- 查询产品的所有BOM版本
|
||||
-- SELECT * FROM md_bom
|
||||
-- WHERE item_id = 123 AND del_flag = '0'
|
||||
-- ORDER BY version DESC;
|
||||
--
|
||||
-- -- 查询产品的默认BOM(通过md_item表)
|
||||
-- SELECT b.* FROM md_bom b
|
||||
-- INNER JOIN md_item i ON b.bom_id = i.default_bom_id
|
||||
-- WHERE i.item_id = 123 AND b.del_flag = '0';
|
||||
--
|
||||
-- -- 查询BOM及其所有明细
|
||||
-- SELECT b.*, pb.* FROM md_bom b
|
||||
-- LEFT JOIN md_product_bom pb ON b.bom_id = pb.bom_id
|
||||
-- WHERE b.bom_id = 456 AND b.del_flag = '0' AND pb.del_flag = '0'
|
||||
-- ORDER BY pb.line_no;
|
||||
--
|
||||
-- ============================================================
|
||||
204
prd/db/erp_auto_code_rules_init.sql
Normal file
204
prd/db/erp_auto_code_rules_init.sql
Normal file
@@ -0,0 +1,204 @@
|
||||
-- ============================================================
|
||||
-- ERP 业务单据编码规则初始化脚本
|
||||
-- 将 15 条单据编码规则配置到通用编码引擎表中
|
||||
-- 对应文档:prd/mom系统单据编码规则文档.md
|
||||
-- ============================================================
|
||||
-- rule_id / part_id 均为自增主键,无需指定值
|
||||
-- sys_auto_code_part.rule_id 通过子查询关联 sys_auto_code_rule.rule_code
|
||||
-- ============================================================
|
||||
|
||||
SET NAMES utf8mb4;
|
||||
|
||||
-- ============================================================
|
||||
-- 一、sys_auto_code_rule — 编码规则主表(共 15 条)
|
||||
-- ============================================================
|
||||
|
||||
-- ---------- 销售模块(排序 1-5)----------
|
||||
INSERT INTO `sys_auto_code_rule` (`rule_code`, `rule_name`, `rule_desc`, `max_length`, `is_padded`, `padded_char`, `padded_method`, `enable_flag`, `remark`, `attr1`, `attr2`, `attr3`, `attr4`, `create_by`, `create_time`, `update_by`, `update_time`)
|
||||
VALUES ('XSDD_CODE', '销售订单编码规则', '销售订单(销售订单),格式:XSDD + 6位流水号', 10, 'N', NULL, 'L', 'Y', NULL, NULL, NULL, 0, 0, 'admin', NOW(), '', NULL);
|
||||
|
||||
INSERT INTO `sys_auto_code_rule` (`rule_code`, `rule_name`, `rule_desc`, `max_length`, `is_padded`, `padded_char`, `padded_method`, `enable_flag`, `remark`, `attr1`, `attr2`, `attr3`, `attr4`, `create_by`, `create_time`, `update_by`, `update_time`)
|
||||
VALUES ('XSBH_CODE', '备货订单编码规则', '销售订单(备货订单),格式:XSBH + 6位流水号', 10, 'N', NULL, 'L', 'Y', NULL, NULL, NULL, 0, 0, 'admin', NOW(), '', NULL);
|
||||
|
||||
INSERT INTO `sys_auto_code_rule` (`rule_code`, `rule_name`, `rule_desc`, `max_length`, `is_padded`, `padded_char`, `padded_method`, `enable_flag`, `remark`, `attr1`, `attr2`, `attr3`, `attr4`, `create_by`, `create_time`, `update_by`, `update_time`)
|
||||
VALUES ('LJBK_CODE', '零部件订单编码规则', '销售订单(零部件订单),格式:LJBK + 6位流水号', 10, 'N', NULL, 'L', 'Y', NULL, NULL, NULL, 0, 0, 'admin', NOW(), '', NULL);
|
||||
|
||||
INSERT INTO `sys_auto_code_rule` (`rule_code`, `rule_name`, `rule_desc`, `max_length`, `is_padded`, `padded_char`, `padded_method`, `enable_flag`, `remark`, `attr1`, `attr2`, `attr3`, `attr4`, `create_by`, `create_time`, `update_by`, `update_time`)
|
||||
VALUES ('XSFH_CODE', '发货通知单编码规则', '发货通知单,格式:XSFH + 6位流水号', 10, 'N', NULL, 'L', 'Y', NULL, NULL, NULL, 0, 0, 'admin', NOW(), '', NULL);
|
||||
|
||||
INSERT INTO `sys_auto_code_rule` (`rule_code`, `rule_name`, `rule_desc`, `max_length`, `is_padded`, `padded_char`, `padded_method`, `enable_flag`, `remark`, `attr1`, `attr2`, `attr3`, `attr4`, `create_by`, `create_time`, `update_by`, `update_time`)
|
||||
VALUES ('XSTH_CODE', '退货通知单编码规则', '退货通知单,格式:XSTH + 6位流水号', 10, 'N', NULL, 'L', 'Y', NULL, NULL, NULL, 0, 0, 'admin', NOW(), '', NULL);
|
||||
|
||||
INSERT INTO `sys_auto_code_rule` (`rule_code`, `rule_name`, `rule_desc`, `max_length`, `is_padded`, `padded_char`, `padded_method`, `enable_flag`, `remark`, `attr1`, `attr2`, `attr3`, `attr4`, `create_by`, `create_time`, `update_by`, `update_time`)
|
||||
VALUES ('XSKP_CODE', '开票通知单编码规则', '开票通知单,格式:XSKP + 6位流水号', 10, 'N', NULL, 'L', 'Y', NULL, NULL, NULL, 0, 0, 'admin', NOW(), '', NULL);
|
||||
|
||||
-- ---------- 生产模块(排序 10-11)----------
|
||||
INSERT INTO `sys_auto_code_rule` (`rule_code`, `rule_name`, `rule_desc`, `max_length`, `is_padded`, `padded_char`, `padded_method`, `enable_flag`, `remark`, `attr1`, `attr2`, `attr3`, `attr4`, `create_by`, `create_time`, `update_by`, `update_time`)
|
||||
VALUES ('SCJH_CODE', '生产计划单编码规则', '生产计划单,格式:SCJH + yyyyMMdd + 3位序号(按日循环)', 15, 'N', NULL, 'L', 'Y', NULL, NULL, NULL, 0, 0, 'admin', NOW(), '', NULL);
|
||||
|
||||
INSERT INTO `sys_auto_code_rule` (`rule_code`, `rule_name`, `rule_desc`, `max_length`, `is_padded`, `padded_char`, `padded_method`, `enable_flag`, `remark`, `attr1`, `attr2`, `attr3`, `attr4`, `create_by`, `create_time`, `update_by`, `update_time`)
|
||||
VALUES ('MBOM_CODE', '物料清单编码规则', '物料清单,格式:MBOM + 6位流水号', 10, 'N', NULL, 'L', 'Y', NULL, NULL, NULL, 0, 0, 'admin', NOW(), '', NULL);
|
||||
|
||||
-- WORKORDER_CODE: 生产工单编码规则(数据库中已配置,无需重复插入)
|
||||
-- INSERT INTO `sys_auto_code_rule` ... VALUES ('WORKORDER_CODE', '生产工单编码规则', ...);
|
||||
|
||||
-- ---------- 采购模块(排序 12-23)----------
|
||||
INSERT INTO `sys_auto_code_rule` (`rule_code`, `rule_name`, `rule_desc`, `max_length`, `is_padded`, `padded_char`, `padded_method`, `enable_flag`, `remark`, `attr1`, `attr2`, `attr3`, `attr4`, `create_by`, `create_time`, `update_by`, `update_time`)
|
||||
VALUES ('CGJH_CODE', '采购计划单编码规则(原材料)', '采购计划单(原材料),格式:CGJH + 6位流水号', 10, 'N', NULL, 'L', 'Y', NULL, NULL, NULL, 0, 0, 'admin', NOW(), '', NULL);
|
||||
|
||||
INSERT INTO `sys_auto_code_rule` (`rule_code`, `rule_name`, `rule_desc`, `max_length`, `is_padded`, `padded_char`, `padded_method`, `enable_flag`, `remark`, `attr1`, `attr2`, `attr3`, `attr4`, `create_by`, `create_time`, `update_by`, `update_time`)
|
||||
VALUES ('FLJH_CODE', '采购计划单编码规则(零部件)', '采购计划单(零部件),格式:FLJH + 6位流水号', 10, 'N', NULL, 'L', 'Y', NULL, NULL, NULL, 0, 0, 'admin', NOW(), '', NULL);
|
||||
|
||||
INSERT INTO `sys_auto_code_rule` (`rule_code`, `rule_name`, `rule_desc`, `max_length`, `is_padded`, `padded_char`, `padded_method`, `enable_flag`, `remark`, `attr1`, `attr2`, `attr3`, `attr4`, `create_by`, `create_time`, `update_by`, `update_time`)
|
||||
VALUES ('BCJH_CODE', '采购计划单编码规则(五金)', '采购计划单(五金),格式:BCJH + 6位流水号', 10, 'N', NULL, 'L', 'Y', NULL, NULL, NULL, 0, 0, 'admin', NOW(), '', NULL);
|
||||
|
||||
INSERT INTO `sys_auto_code_rule` (`rule_code`, `rule_name`, `rule_desc`, `max_length`, `is_padded`, `padded_char`, `padded_method`, `enable_flag`, `remark`, `attr1`, `attr2`, `attr3`, `attr4`, `create_by`, `create_time`, `update_by`, `update_time`)
|
||||
VALUES ('CGDD_CODE', '采购订单编码规则', '采购订单,格式:CGDD + 6位流水号', 10, 'N', NULL, 'L', 'Y', NULL, NULL, NULL, 0, 0, 'admin', NOW(), '', NULL);
|
||||
|
||||
INSERT INTO `sys_auto_code_rule` (`rule_code`, `rule_name`, `rule_desc`, `max_length`, `is_padded`, `padded_char`, `padded_method`, `enable_flag`, `remark`, `attr1`, `attr2`, `attr3`, `attr4`, `create_by`, `create_time`, `update_by`, `update_time`)
|
||||
VALUES ('CGDH_CODE', '采购到货单编码规则', '采购到货单,格式:CGDH + 6位流水号', 10, 'N', NULL, 'L', 'Y', NULL, NULL, NULL, 0, 0, 'admin', NOW(), '', NULL);
|
||||
|
||||
INSERT INTO `sys_auto_code_rule` (`rule_code`, `rule_name`, `rule_desc`, `max_length`, `is_padded`, `padded_char`, `padded_method`, `enable_flag`, `remark`, `attr1`, `attr2`, `attr3`, `attr4`, `create_by`, `create_time`, `update_by`, `update_time`)
|
||||
VALUES ('CGTH_CODE', '采购退货单编码规则', '采购退货单,格式:CGTH + 6位流水号', 10, 'N', NULL, 'L', 'Y', NULL, NULL, NULL, 0, 0, 'admin', NOW(), '', NULL);
|
||||
|
||||
INSERT INTO `sys_auto_code_rule` (`rule_code`, `rule_name`, `rule_desc`, `max_length`, `is_padded`, `padded_char`, `padded_method`, `enable_flag`, `remark`, `attr1`, `attr2`, `attr3`, `attr4`, `create_by`, `create_time`, `update_by`, `update_time`)
|
||||
VALUES ('CGFP_CODE', '采购发票单编码规则', '采购发票单,格式:CGFP + 6位流水号', 10, 'N', NULL, 'L', 'Y', NULL, NULL, NULL, 0, 0, 'admin', NOW(), '', NULL);
|
||||
|
||||
|
||||
-- ============================================================
|
||||
-- 二、sys_auto_code_part — 编码规则组成表(共 31 条)
|
||||
-- rule_id 通过子查询 (SELECT rule_id FROM sys_auto_code_rule WHERE rule_code = ?) 关联
|
||||
-- ============================================================
|
||||
|
||||
-- -------------------------------------------------------
|
||||
-- 格式 A:FIXCHAR(前缀4位) + SERIALNO(流水号6位),共 14 条规则 x 2 = 28 个 part
|
||||
-- -------------------------------------------------------
|
||||
|
||||
-- XSDD_CODE: 销售订单
|
||||
INSERT INTO `sys_auto_code_part` (`rule_id`, `part_index`, `part_type`, `part_code`, `part_name`, `part_length`, `date_format`, `input_character`, `fix_character`, `seria_start_no`, `seria_step`, `seria_now_no`, `cycle_flag`, `cycle_method`, `remark`, `attr1`, `attr2`, `attr3`, `attr4`, `create_by`, `create_time`, `update_by`, `update_time`)
|
||||
VALUES ((SELECT rule_id FROM sys_auto_code_rule WHERE rule_code = 'XSDD_CODE'), 1, 'FIXCHAR', 'PREFIX', '前缀', 4, NULL, NULL, 'XSDD', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, 'admin', NOW(), '', NULL);
|
||||
INSERT INTO `sys_auto_code_part` (`rule_id`, `part_index`, `part_type`, `part_code`, `part_name`, `part_length`, `date_format`, `input_character`, `fix_character`, `seria_start_no`, `seria_step`, `seria_now_no`, `cycle_flag`, `cycle_method`, `remark`, `attr1`, `attr2`, `attr3`, `attr4`, `create_by`, `create_time`, `update_by`, `update_time`)
|
||||
VALUES ((SELECT rule_id FROM sys_auto_code_rule WHERE rule_code = 'XSDD_CODE'), 2, 'SERIALNO', 'SERIAL', '流水号', 6, NULL, NULL, NULL, 1, 1, NULL, 'N', NULL, NULL, NULL, NULL, 0, 0, 'admin', NOW(), '', NULL);
|
||||
|
||||
-- XSBH_CODE: 备货订单
|
||||
INSERT INTO `sys_auto_code_part` (`rule_id`, `part_index`, `part_type`, `part_code`, `part_name`, `part_length`, `date_format`, `input_character`, `fix_character`, `seria_start_no`, `seria_step`, `seria_now_no`, `cycle_flag`, `cycle_method`, `remark`, `attr1`, `attr2`, `attr3`, `attr4`, `create_by`, `create_time`, `update_by`, `update_time`)
|
||||
VALUES ((SELECT rule_id FROM sys_auto_code_rule WHERE rule_code = 'XSBH_CODE'), 1, 'FIXCHAR', 'PREFIX', '前缀', 4, NULL, NULL, 'XSBH', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, 'admin', NOW(), '', NULL);
|
||||
INSERT INTO `sys_auto_code_part` (`rule_id`, `part_index`, `part_type`, `part_code`, `part_name`, `part_length`, `date_format`, `input_character`, `fix_character`, `seria_start_no`, `seria_step`, `seria_now_no`, `cycle_flag`, `cycle_method`, `remark`, `attr1`, `attr2`, `attr3`, `attr4`, `create_by`, `create_time`, `update_by`, `update_time`)
|
||||
VALUES ((SELECT rule_id FROM sys_auto_code_rule WHERE rule_code = 'XSBH_CODE'), 2, 'SERIALNO', 'SERIAL', '流水号', 6, NULL, NULL, NULL, 1, 1, NULL, 'N', NULL, NULL, NULL, NULL, 0, 0, 'admin', NOW(), '', NULL);
|
||||
|
||||
-- LJBK_CODE: 零部件订单
|
||||
INSERT INTO `sys_auto_code_part` (`rule_id`, `part_index`, `part_type`, `part_code`, `part_name`, `part_length`, `date_format`, `input_character`, `fix_character`, `seria_start_no`, `seria_step`, `seria_now_no`, `cycle_flag`, `cycle_method`, `remark`, `attr1`, `attr2`, `attr3`, `attr4`, `create_by`, `create_time`, `update_by`, `update_time`)
|
||||
VALUES ((SELECT rule_id FROM sys_auto_code_rule WHERE rule_code = 'LJBK_CODE'), 1, 'FIXCHAR', 'PREFIX', '前缀', 4, NULL, NULL, 'LJBK', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, 'admin', NOW(), '', NULL);
|
||||
INSERT INTO `sys_auto_code_part` (`rule_id`, `part_index`, `part_type`, `part_code`, `part_name`, `part_length`, `date_format`, `input_character`, `fix_character`, `seria_start_no`, `seria_step`, `seria_now_no`, `cycle_flag`, `cycle_method`, `remark`, `attr1`, `attr2`, `attr3`, `attr4`, `create_by`, `create_time`, `update_by`, `update_time`)
|
||||
VALUES ((SELECT rule_id FROM sys_auto_code_rule WHERE rule_code = 'LJBK_CODE'), 2, 'SERIALNO', 'SERIAL', '流水号', 6, NULL, NULL, NULL, 1, 1, NULL, 'N', NULL, NULL, NULL, NULL, 0, 0, 'admin', NOW(), '', NULL);
|
||||
|
||||
-- XSFH_CODE: 发货通知单
|
||||
INSERT INTO `sys_auto_code_part` (`rule_id`, `part_index`, `part_type`, `part_code`, `part_name`, `part_length`, `date_format`, `input_character`, `fix_character`, `seria_start_no`, `seria_step`, `seria_now_no`, `cycle_flag`, `cycle_method`, `remark`, `attr1`, `attr2`, `attr3`, `attr4`, `create_by`, `create_time`, `update_by`, `update_time`)
|
||||
VALUES ((SELECT rule_id FROM sys_auto_code_rule WHERE rule_code = 'XSFH_CODE'), 1, 'FIXCHAR', 'PREFIX', '前缀', 4, NULL, NULL, 'XSFH', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, 'admin', NOW(), '', NULL);
|
||||
INSERT INTO `sys_auto_code_part` (`rule_id`, `part_index`, `part_type`, `part_code`, `part_name`, `part_length`, `date_format`, `input_character`, `fix_character`, `seria_start_no`, `seria_step`, `seria_now_no`, `cycle_flag`, `cycle_method`, `remark`, `attr1`, `attr2`, `attr3`, `attr4`, `create_by`, `create_time`, `update_by`, `update_time`)
|
||||
VALUES ((SELECT rule_id FROM sys_auto_code_rule WHERE rule_code = 'XSFH_CODE'), 2, 'SERIALNO', 'SERIAL', '流水号', 6, NULL, NULL, NULL, 1, 1, NULL, 'N', NULL, NULL, NULL, NULL, 0, 0, 'admin', NOW(), '', NULL);
|
||||
|
||||
-- XSTH_CODE: 退货通知单
|
||||
INSERT INTO `sys_auto_code_part` (`rule_id`, `part_index`, `part_type`, `part_code`, `part_name`, `part_length`, `date_format`, `input_character`, `fix_character`, `seria_start_no`, `seria_step`, `seria_now_no`, `cycle_flag`, `cycle_method`, `remark`, `attr1`, `attr2`, `attr3`, `attr4`, `create_by`, `create_time`, `update_by`, `update_time`)
|
||||
VALUES ((SELECT rule_id FROM sys_auto_code_rule WHERE rule_code = 'XSTH_CODE'), 1, 'FIXCHAR', 'PREFIX', '前缀', 4, NULL, NULL, 'XSTH', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, 'admin', NOW(), '', NULL);
|
||||
INSERT INTO `sys_auto_code_part` (`rule_id`, `part_index`, `part_type`, `part_code`, `part_name`, `part_length`, `date_format`, `input_character`, `fix_character`, `seria_start_no`, `seria_step`, `seria_now_no`, `cycle_flag`, `cycle_method`, `remark`, `attr1`, `attr2`, `attr3`, `attr4`, `create_by`, `create_time`, `update_by`, `update_time`)
|
||||
VALUES ((SELECT rule_id FROM sys_auto_code_rule WHERE rule_code = 'XSTH_CODE'), 2, 'SERIALNO', 'SERIAL', '流水号', 6, NULL, NULL, NULL, 1, 1, NULL, 'N', NULL, NULL, NULL, NULL, 0, 0, 'admin', NOW(), '', NULL);
|
||||
|
||||
-- XSKP_CODE: 开票通知单
|
||||
INSERT INTO `sys_auto_code_part` (`rule_id`, `part_index`, `part_type`, `part_code`, `part_name`, `part_length`, `date_format`, `input_character`, `fix_character`, `seria_start_no`, `seria_step`, `seria_now_no`, `cycle_flag`, `cycle_method`, `remark`, `attr1`, `attr2`, `attr3`, `attr4`, `create_by`, `create_time`, `update_by`, `update_time`)
|
||||
VALUES ((SELECT rule_id FROM sys_auto_code_rule WHERE rule_code = 'XSKP_CODE'), 1, 'FIXCHAR', 'PREFIX', '前缀', 4, NULL, NULL, 'XSKP', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, 'admin', NOW(), '', NULL);
|
||||
INSERT INTO `sys_auto_code_part` (`rule_id`, `part_index`, `part_type`, `part_code`, `part_name`, `part_length`, `date_format`, `input_character`, `fix_character`, `seria_start_no`, `seria_step`, `seria_now_no`, `cycle_flag`, `cycle_method`, `remark`, `attr1`, `attr2`, `attr3`, `attr4`, `create_by`, `create_time`, `update_by`, `update_time`)
|
||||
VALUES ((SELECT rule_id FROM sys_auto_code_rule WHERE rule_code = 'XSKP_CODE'), 2, 'SERIALNO', 'SERIAL', '流水号', 6, NULL, NULL, NULL, 1, 1, NULL, 'N', NULL, NULL, NULL, NULL, 0, 0, 'admin', NOW(), '', NULL);
|
||||
|
||||
-- -------------------------------------------------------
|
||||
-- 格式 B:FIXCHAR(前缀4位) + NOWDATE(日期8位) + SERIALNO(序号3位,按日循环)
|
||||
-- -------------------------------------------------------
|
||||
|
||||
-- SCJH_CODE: 生产计划单
|
||||
INSERT INTO `sys_auto_code_part` (`rule_id`, `part_index`, `part_type`, `part_code`, `part_name`, `part_length`, `date_format`, `input_character`, `fix_character`, `seria_start_no`, `seria_step`, `seria_now_no`, `cycle_flag`, `cycle_method`, `remark`, `attr1`, `attr2`, `attr3`, `attr4`, `create_by`, `create_time`, `update_by`, `update_time`)
|
||||
VALUES ((SELECT rule_id FROM sys_auto_code_rule WHERE rule_code = 'SCJH_CODE'), 1, 'FIXCHAR', 'PREFIX', '前缀', 4, NULL, NULL, 'SCJH', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, 'admin', NOW(), '', NULL);
|
||||
INSERT INTO `sys_auto_code_part` (`rule_id`, `part_index`, `part_type`, `part_code`, `part_name`, `part_length`, `date_format`, `input_character`, `fix_character`, `seria_start_no`, `seria_step`, `seria_now_no`, `cycle_flag`, `cycle_method`, `remark`, `attr1`, `attr2`, `attr3`, `attr4`, `create_by`, `create_time`, `update_by`, `update_time`)
|
||||
VALUES ((SELECT rule_id FROM sys_auto_code_rule WHERE rule_code = 'SCJH_CODE'), 2, 'NOWDATE', 'DATEPART', '年月日', 8, 'yyyyMMdd', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, 'admin', NOW(), '', NULL);
|
||||
INSERT INTO `sys_auto_code_part` (`rule_id`, `part_index`, `part_type`, `part_code`, `part_name`, `part_length`, `date_format`, `input_character`, `fix_character`, `seria_start_no`, `seria_step`, `seria_now_no`, `cycle_flag`, `cycle_method`, `remark`, `attr1`, `attr2`, `attr3`, `attr4`, `create_by`, `create_time`, `update_by`, `update_time`)
|
||||
VALUES ((SELECT rule_id FROM sys_auto_code_rule WHERE rule_code = 'SCJH_CODE'), 3, 'SERIALNO', 'SERIAL', '流水号', 3, NULL, NULL, NULL, 1, 1, NULL, 'Y', 'DAY', NULL, NULL, NULL, 0, 0, 'admin', NOW(), '', NULL);
|
||||
|
||||
-- -------------------------------------------------------
|
||||
-- 继续格式 A
|
||||
-- -------------------------------------------------------
|
||||
|
||||
-- MBOM_CODE: 物料清单
|
||||
INSERT INTO `sys_auto_code_part` (`rule_id`, `part_index`, `part_type`, `part_code`, `part_name`, `part_length`, `date_format`, `input_character`, `fix_character`, `seria_start_no`, `seria_step`, `seria_now_no`, `cycle_flag`, `cycle_method`, `remark`, `attr1`, `attr2`, `attr3`, `attr4`, `create_by`, `create_time`, `update_by`, `update_time`)
|
||||
VALUES ((SELECT rule_id FROM sys_auto_code_rule WHERE rule_code = 'MBOM_CODE'), 1, 'FIXCHAR', 'PREFIX', '前缀', 4, NULL, NULL, 'MBOM', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, 'admin', NOW(), '', NULL);
|
||||
INSERT INTO `sys_auto_code_part` (`rule_id`, `part_index`, `part_type`, `part_code`, `part_name`, `part_length`, `date_format`, `input_character`, `fix_character`, `seria_start_no`, `seria_step`, `seria_now_no`, `cycle_flag`, `cycle_method`, `remark`, `attr1`, `attr2`, `attr3`, `attr4`, `create_by`, `create_time`, `update_by`, `update_time`)
|
||||
VALUES ((SELECT rule_id FROM sys_auto_code_rule WHERE rule_code = 'MBOM_CODE'), 2, 'SERIALNO', 'SERIAL', '流水号', 6, NULL, NULL, NULL, 1, 1, NULL, 'N', NULL, NULL, NULL, NULL, 0, 0, 'admin', NOW(), '', NULL);
|
||||
|
||||
-- WORKORDER_CODE: 生产工单(数据库中已配置,无需重复插入)
|
||||
|
||||
-- CGJH_CODE: 采购计划单(原材料)
|
||||
INSERT INTO `sys_auto_code_part` (`rule_id`, `part_index`, `part_type`, `part_code`, `part_name`, `part_length`, `date_format`, `input_character`, `fix_character`, `seria_start_no`, `seria_step`, `seria_now_no`, `cycle_flag`, `cycle_method`, `remark`, `attr1`, `attr2`, `attr3`, `attr4`, `create_by`, `create_time`, `update_by`, `update_time`)
|
||||
VALUES ((SELECT rule_id FROM sys_auto_code_rule WHERE rule_code = 'CGJH_CODE'), 1, 'FIXCHAR', 'PREFIX', '前缀', 4, NULL, NULL, 'CGJH', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, 'admin', NOW(), '', NULL);
|
||||
INSERT INTO `sys_auto_code_part` (`rule_id`, `part_index`, `part_type`, `part_code`, `part_name`, `part_length`, `date_format`, `input_character`, `fix_character`, `seria_start_no`, `seria_step`, `seria_now_no`, `cycle_flag`, `cycle_method`, `remark`, `attr1`, `attr2`, `attr3`, `attr4`, `create_by`, `create_time`, `update_by`, `update_time`)
|
||||
VALUES ((SELECT rule_id FROM sys_auto_code_rule WHERE rule_code = 'CGJH_CODE'), 2, 'SERIALNO', 'SERIAL', '流水号', 6, NULL, NULL, NULL, 1, 1, NULL, 'N', NULL, NULL, NULL, NULL, 0, 0, 'admin', NOW(), '', NULL);
|
||||
|
||||
-- FLJH_CODE: 采购计划单(零部件)
|
||||
INSERT INTO `sys_auto_code_part` (`rule_id`, `part_index`, `part_type`, `part_code`, `part_name`, `part_length`, `date_format`, `input_character`, `fix_character`, `seria_start_no`, `seria_step`, `seria_now_no`, `cycle_flag`, `cycle_method`, `remark`, `attr1`, `attr2`, `attr3`, `attr4`, `create_by`, `create_time`, `update_by`, `update_time`)
|
||||
VALUES ((SELECT rule_id FROM sys_auto_code_rule WHERE rule_code = 'FLJH_CODE'), 1, 'FIXCHAR', 'PREFIX', '前缀', 4, NULL, NULL, 'FLJH', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, 'admin', NOW(), '', NULL);
|
||||
INSERT INTO `sys_auto_code_part` (`rule_id`, `part_index`, `part_type`, `part_code`, `part_name`, `part_length`, `date_format`, `input_character`, `fix_character`, `seria_start_no`, `seria_step`, `seria_now_no`, `cycle_flag`, `cycle_method`, `remark`, `attr1`, `attr2`, `attr3`, `attr4`, `create_by`, `create_time`, `update_by`, `update_time`)
|
||||
VALUES ((SELECT rule_id FROM sys_auto_code_rule WHERE rule_code = 'FLJH_CODE'), 2, 'SERIALNO', 'SERIAL', '流水号', 6, NULL, NULL, NULL, 1, 1, NULL, 'N', NULL, NULL, NULL, NULL, 0, 0, 'admin', NOW(), '', NULL);
|
||||
|
||||
-- BCJH_CODE: 采购计划单(五金)
|
||||
INSERT INTO `sys_auto_code_part` (`rule_id`, `part_index`, `part_type`, `part_code`, `part_name`, `part_length`, `date_format`, `input_character`, `fix_character`, `seria_start_no`, `seria_step`, `seria_now_no`, `cycle_flag`, `cycle_method`, `remark`, `attr1`, `attr2`, `attr3`, `attr4`, `create_by`, `create_time`, `update_by`, `update_time`)
|
||||
VALUES ((SELECT rule_id FROM sys_auto_code_rule WHERE rule_code = 'BCJH_CODE'), 1, 'FIXCHAR', 'PREFIX', '前缀', 4, NULL, NULL, 'BCJH', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, 'admin', NOW(), '', NULL);
|
||||
INSERT INTO `sys_auto_code_part` (`rule_id`, `part_index`, `part_type`, `part_code`, `part_name`, `part_length`, `date_format`, `input_character`, `fix_character`, `seria_start_no`, `seria_step`, `seria_now_no`, `cycle_flag`, `cycle_method`, `remark`, `attr1`, `attr2`, `attr3`, `attr4`, `create_by`, `create_time`, `update_by`, `update_time`)
|
||||
VALUES ((SELECT rule_id FROM sys_auto_code_rule WHERE rule_code = 'BCJH_CODE'), 2, 'SERIALNO', 'SERIAL', '流水号', 6, NULL, NULL, NULL, 1, 1, NULL, 'N', NULL, NULL, NULL, NULL, 0, 0, 'admin', NOW(), '', NULL);
|
||||
|
||||
-- CGDD_CODE: 采购订单
|
||||
INSERT INTO `sys_auto_code_part` (`rule_id`, `part_index`, `part_type`, `part_code`, `part_name`, `part_length`, `date_format`, `input_character`, `fix_character`, `seria_start_no`, `seria_step`, `seria_now_no`, `cycle_flag`, `cycle_method`, `remark`, `attr1`, `attr2`, `attr3`, `attr4`, `create_by`, `create_time`, `update_by`, `update_time`)
|
||||
VALUES ((SELECT rule_id FROM sys_auto_code_rule WHERE rule_code = 'CGDD_CODE'), 1, 'FIXCHAR', 'PREFIX', '前缀', 4, NULL, NULL, 'CGDD', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, 'admin', NOW(), '', NULL);
|
||||
INSERT INTO `sys_auto_code_part` (`rule_id`, `part_index`, `part_type`, `part_code`, `part_name`, `part_length`, `date_format`, `input_character`, `fix_character`, `seria_start_no`, `seria_step`, `seria_now_no`, `cycle_flag`, `cycle_method`, `remark`, `attr1`, `attr2`, `attr3`, `attr4`, `create_by`, `create_time`, `update_by`, `update_time`)
|
||||
VALUES ((SELECT rule_id FROM sys_auto_code_rule WHERE rule_code = 'CGDD_CODE'), 2, 'SERIALNO', 'SERIAL', '流水号', 6, NULL, NULL, NULL, 1, 1, NULL, 'N', NULL, NULL, NULL, NULL, 0, 0, 'admin', NOW(), '', NULL);
|
||||
|
||||
-- CGDH_CODE: 采购到货单
|
||||
INSERT INTO `sys_auto_code_part` (`rule_id`, `part_index`, `part_type`, `part_code`, `part_name`, `part_length`, `date_format`, `input_character`, `fix_character`, `seria_start_no`, `seria_step`, `seria_now_no`, `cycle_flag`, `cycle_method`, `remark`, `attr1`, `attr2`, `attr3`, `attr4`, `create_by`, `create_time`, `update_by`, `update_time`)
|
||||
VALUES ((SELECT rule_id FROM sys_auto_code_rule WHERE rule_code = 'CGDH_CODE'), 1, 'FIXCHAR', 'PREFIX', '前缀', 4, NULL, NULL, 'CGDH', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, 'admin', NOW(), '', NULL);
|
||||
INSERT INTO `sys_auto_code_part` (`rule_id`, `part_index`, `part_type`, `part_code`, `part_name`, `part_length`, `date_format`, `input_character`, `fix_character`, `seria_start_no`, `seria_step`, `seria_now_no`, `cycle_flag`, `cycle_method`, `remark`, `attr1`, `attr2`, `attr3`, `attr4`, `create_by`, `create_time`, `update_by`, `update_time`)
|
||||
VALUES ((SELECT rule_id FROM sys_auto_code_rule WHERE rule_code = 'CGDH_CODE'), 2, 'SERIALNO', 'SERIAL', '流水号', 6, NULL, NULL, NULL, 1, 1, NULL, 'N', NULL, NULL, NULL, NULL, 0, 0, 'admin', NOW(), '', NULL);
|
||||
|
||||
-- CGTH_CODE: 采购退货单
|
||||
INSERT INTO `sys_auto_code_part` (`rule_id`, `part_index`, `part_type`, `part_code`, `part_name`, `part_length`, `date_format`, `input_character`, `fix_character`, `seria_start_no`, `seria_step`, `seria_now_no`, `cycle_flag`, `cycle_method`, `remark`, `attr1`, `attr2`, `attr3`, `attr4`, `create_by`, `create_time`, `update_by`, `update_time`)
|
||||
VALUES ((SELECT rule_id FROM sys_auto_code_rule WHERE rule_code = 'CGTH_CODE'), 1, 'FIXCHAR', 'PREFIX', '前缀', 4, NULL, NULL, 'CGTH', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, 'admin', NOW(), '', NULL);
|
||||
INSERT INTO `sys_auto_code_part` (`rule_id`, `part_index`, `part_type`, `part_code`, `part_name`, `part_length`, `date_format`, `input_character`, `fix_character`, `seria_start_no`, `seria_step`, `seria_now_no`, `cycle_flag`, `cycle_method`, `remark`, `attr1`, `attr2`, `attr3`, `attr4`, `create_by`, `create_time`, `update_by`, `update_time`)
|
||||
VALUES ((SELECT rule_id FROM sys_auto_code_rule WHERE rule_code = 'CGTH_CODE'), 2, 'SERIALNO', 'SERIAL', '流水号', 6, NULL, NULL, NULL, 1, 1, NULL, 'N', NULL, NULL, NULL, NULL, 0, 0, 'admin', NOW(), '', NULL);
|
||||
|
||||
-- CGFP_CODE: 采购发票单
|
||||
INSERT INTO `sys_auto_code_part` (`rule_id`, `part_index`, `part_type`, `part_code`, `part_name`, `part_length`, `date_format`, `input_character`, `fix_character`, `seria_start_no`, `seria_step`, `seria_now_no`, `cycle_flag`, `cycle_method`, `remark`, `attr1`, `attr2`, `attr3`, `attr4`, `create_by`, `create_time`, `update_by`, `update_time`)
|
||||
VALUES ((SELECT rule_id FROM sys_auto_code_rule WHERE rule_code = 'CGFP_CODE'), 1, 'FIXCHAR', 'PREFIX', '前缀', 4, NULL, NULL, 'CGFP', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, 'admin', NOW(), '', NULL);
|
||||
INSERT INTO `sys_auto_code_part` (`rule_id`, `part_index`, `part_type`, `part_code`, `part_name`, `part_length`, `date_format`, `input_character`, `fix_character`, `seria_start_no`, `seria_step`, `seria_now_no`, `cycle_flag`, `cycle_method`, `remark`, `attr1`, `attr2`, `attr3`, `attr4`, `create_by`, `create_time`, `update_by`, `update_time`)
|
||||
VALUES ((SELECT rule_id FROM sys_auto_code_rule WHERE rule_code = 'CGFP_CODE'), 2, 'SERIALNO', 'SERIAL', '流水号', 6, NULL, NULL, NULL, 1, 1, NULL, 'N', NULL, NULL, NULL, NULL, 0, 0, 'admin', NOW(), '', NULL);
|
||||
|
||||
|
||||
-- ============================================================
|
||||
-- 三、规则速查表
|
||||
-- ============================================================
|
||||
-- rule_code | rule_name | 生成示例
|
||||
-- ---------------+------------------------+---------------------
|
||||
-- XSDD_CODE | 销售订单编码规则 | XSDD000001
|
||||
-- XSBH_CODE | 备货订单编码规则 | XSBH000001
|
||||
-- LJBK_CODE | 零部件订单编码规则 | LJBK000001
|
||||
-- XSFH_CODE | 发货通知单编码规则 | XSFH000001
|
||||
-- XSTH_CODE | 退货通知单编码规则 | XSTH000001
|
||||
-- XSKP_CODE | 开票通知单编码规则 | XSKP000001
|
||||
-- SCJH_CODE | 生产计划单编码规则 | SCJH20260213001
|
||||
-- MBOM_CODE | 物料清单编码规则 | MBOM000001
|
||||
-- WORKORDER_CODE | 生产工单编码规则 | (已在数据库中配置)
|
||||
-- CGJH_CODE | 采购计划单编码(原材料) | CGJH000001
|
||||
-- FLJH_CODE | 采购计划单编码(零部件) | FLJH000001
|
||||
-- BCJH_CODE | 采购计划单编码(五金) | BCJH000001
|
||||
-- CGDD_CODE | 采购订单编码规则 | CGDD000001
|
||||
-- CGDH_CODE | 采购到货单编码规则 | CGDH000001
|
||||
-- CGTH_CODE | 采购退货单编码规则 | CGTH000001
|
||||
-- CGFP_CODE | 采购发票单编码规则 | CGFP000001
|
||||
-- ============================================================
|
||||
-- 调用方式:GET /system/autocode/get/{ruleCode}
|
||||
-- 示例:GET /system/autocode/get/XSDD_CODE => XSDD000001
|
||||
-- ============================================================
|
||||
1012
prd/db/erp与mom数据库表映射对照表.md
Normal file
1012
prd/db/erp与mom数据库表映射对照表.md
Normal file
File diff suppressed because it is too large
Load Diff
2687
prd/db/erp数据库设计-DDL.sql
Normal file
2687
prd/db/erp数据库设计-DDL.sql
Normal file
File diff suppressed because it is too large
Load Diff
417
prd/db/erp数据库设计-Swagger补充模块.md
Normal file
417
prd/db/erp数据库设计-Swagger补充模块.md
Normal file
@@ -0,0 +1,417 @@
|
||||
# ERP数据库设计 - Swagger API补充模块
|
||||
|
||||
> 版本: 1.0.0
|
||||
> 创建日期: 2026-02-06
|
||||
> 数据来源: 目标ERP系统 Swagger 2.0 API文档实时抓取
|
||||
> 说明: 本文档记录从Swagger API中发现的、当前数据库设计文档尚未覆盖的模块和表结构
|
||||
|
||||
---
|
||||
|
||||
## 1. 发现概述
|
||||
|
||||
通过实时抓取目标ERP系统的 Swagger API(`https://demo.rsun.vip/prod-api/v2/api-docs?group=*`),发现以下模块在当前 `erp数据库设计-数据字典.md` 和 `erp数据库设计-DDL.sql` 中**尚未收录**:
|
||||
|
||||
| 序号 | 模块 | API前缀 | Java包前缀 | 现有文档状态 | 表数量(估) |
|
||||
|------|------|---------|-----------|-------------|-----------|
|
||||
| 1 | 生产管理(车间) | /prs | Prs* | **未收录** | ~20 |
|
||||
| 2 | 研发管理 | /rd | Rd* | **未收录** | ~10 |
|
||||
| 3 | 委外管理 | /pu | Pu* | **未收录** | ~14 |
|
||||
| 4 | 财务管理 | /fd | Fd* | **未收录** | ~30+ |
|
||||
| 5 | 车间设置 | /prs (基础) | Prs* | **未收录** | ~8 |
|
||||
|
||||
### 1.1 重要发现:ERP实际命名规范
|
||||
|
||||
通过Swagger API分析,目标ERP系统的实际字段命名与当前数据库设计文档中**基于推测的命名存在差异**:
|
||||
|
||||
| 概念 | 数据字典中的假设命名 | Swagger API实际命名 | 说明 |
|
||||
|------|---------------------|-------------------|------|
|
||||
| 主键ID | order_id, plan_id 等 | **uniqueId** | 统一使用uniqueId作为主键名 |
|
||||
| 单据编码 | order_code, plan_code 等 | **模块Code** (如 puCode, prsCode, rdCode) | 按模块区分 |
|
||||
| 物料编码 | item_code | **invCode** | inv = Inventory |
|
||||
| 物料名称 | item_name | **invName** | inv = Inventory |
|
||||
| 物料属性 | specification | **invAttribute** | |
|
||||
| 物料分类ID | item_type_id | **invSortId** | sort = 分类 |
|
||||
| 物料根分类 | - | **invSortRoot** | 顶级分类 |
|
||||
| 计量单位编码 | unit_of_measure | **unitCode** | |
|
||||
| 计量单位名称 | unit_name | **unitName** | 一致 |
|
||||
| 单据日期 | order_date, plan_date | **invoiceDate** | 统一用invoiceDate |
|
||||
| 单据状态 | status | **invoiceStatus** | invoice=单据 |
|
||||
| 单据类型 | order_type | **invoiceType** | |
|
||||
| 业务状态 | business_status | **workStatus** | |
|
||||
| 业务类型 | business_type / work_type | **workType** | |
|
||||
| 业务部门 | dept_name | **workDept** | |
|
||||
| 业务人员 | operator_name | **workStaff** | |
|
||||
| 跟单编号 | track_code | **ppNumber** | 全局唯一,关联销售订单 |
|
||||
| 操作员 | operator_name | **userOper** | |
|
||||
| 审核员 | approver_name | **userCheck** | |
|
||||
| 审核日期 | approve_date | **checkDate** | |
|
||||
| 表单配置 | - | **formConfig** | 动态表单配置标识 |
|
||||
| 版本号 | version | **version** (int64) | 乐观锁版本号 |
|
||||
| 供应方式 | supply_type | **invSupplyType** | |
|
||||
| 已完成数量 | delivered_qty, arrived_qty | **wiQuantity** | wi = Written In |
|
||||
| 删除标志 | del_flag | **delFlag** | 一致 |
|
||||
|
||||
> **关键结论**: ERP系统所有单据模块共享一套统一的基类字段(BaseEntity),包含: uniqueId, ppNumber, invoiceDate, invoiceStatus, invoiceType, workType, workStatus, workDept, workStaff, userOper, userCheck, checkDate, formConfig, version, delFlag, createBy, createTime, updateBy, updateTime, remark, remarks
|
||||
|
||||
---
|
||||
|
||||
## 2. 生产管理模块 (prs_*)
|
||||
|
||||
### 2.1 模块功能清单(来自Swagger tags)
|
||||
|
||||
| 序号 | 功能 | API前缀 | Java实体 | 说明 |
|
||||
|------|------|---------|---------|------|
|
||||
| 1 | 生产订单 | /prs/order | PrsOrderMaster | 生产订单(从计划单下发) |
|
||||
| 2 | 生产领料单 | /prs/pick | PrsPickMaster | 车间生产领料 |
|
||||
| 3 | 生产完工单 | /prs/product | PrsProductMaster | 工序报工/生产完工 |
|
||||
| 4 | 生产入库单 | /prs/checkin | PrsCheckinMaster | 生产入库 |
|
||||
| 5 | 生产指令单 | /prs/instruct | PrsInstructMaster | 生产指令(批次管理) |
|
||||
| 6 | 生产报工单 | /prs/yield | PrsYieldMaster | 工序报工 |
|
||||
| 7 | 工序完工单 | /prs/process | PrsProductProcess | 工序级完工 |
|
||||
| 8 | 生产线 | /prs/beltline | PrsBeltline | 生产线管理 |
|
||||
| 9 | 班组 | /prs/team | PrsTeam | 班组管理 |
|
||||
| 10 | 工人 | /prs/worker | PrsWorker | 工人档案 |
|
||||
| 11 | 工人工资 | /prs/wages | PrsWorkerWages | 计件工资 |
|
||||
| 12 | 工种 | /prs/jobs | PrsJobs | 工种定义 |
|
||||
| 13 | 标准工序段 | /prs/operate | PrsOperateSection | 工序段定义 |
|
||||
| 14 | 工艺路线 | /prs/route | PrsProcessRoute | 产品工艺路线 |
|
||||
| 15 | 设备 | /prs/equipment | PrsEquipment | 设备管理 |
|
||||
| 16 | 包装线 | /prs/pack/line | PrsPackLine | 包装产线 |
|
||||
| 17 | 包装工序 | /prs/pack/section | PrsPackSection | 包装工序 |
|
||||
| 18 | 包装指令单 | /prs/pack | PrsPackMaster | 包装指令 |
|
||||
|
||||
### 2.2 生产订单 (PrsOrderMaster) 关键字段
|
||||
|
||||
> 来源: Swagger API GET /prs/order/list 参数列表
|
||||
|
||||
| Swagger字段名 | 数据库推断字段名 | 类型 | 说明 |
|
||||
|--------------|----------------|------|------|
|
||||
| uniqueId | unique_id | bigint | 主键ID |
|
||||
| prsCode | prs_code | varchar | 生产订单编码 |
|
||||
| invCode | inv_code | varchar | 物料编码 |
|
||||
| invName | inv_name | varchar | 物料名称 |
|
||||
| invAttribute | inv_attribute | varchar | 物料属性/规格 |
|
||||
| invQuantity | inv_quantity | decimal | 物料数量 |
|
||||
| invSortId | inv_sort_id | varchar | 物料分类ID |
|
||||
| invSortRoot | inv_sort_root | varchar | 物料根分类ID |
|
||||
| invSupplyType | inv_supply_type | varchar | 供应方式 |
|
||||
| unitCode | unit_code | varchar | 计量单位编码 |
|
||||
| unitName | unit_name | varchar | 计量单位名称 |
|
||||
| drawingNo | drawing_no | varchar | 图纸号 |
|
||||
| mpOrderCode | mp_order_code | varchar | 关联计划单编码 |
|
||||
| woCode | wo_code | varchar | 关联工单编码(上游) |
|
||||
| woQuantity | wo_quantity | decimal | 工单数量 |
|
||||
| woDate | wo_date | datetime | 工单日期 |
|
||||
| woType | wo_type | varchar | 工单类型 |
|
||||
| woTypeId | wo_type_id | varchar | 工单类型ID |
|
||||
| woInvoice | wo_invoice | varchar | 上游单据 |
|
||||
| woInvoiceId | wo_invoice_id | varchar | 上游单据ID |
|
||||
| woConfig | wo_config | varchar | 工单配置 |
|
||||
| wiQuantity | wi_quantity | decimal | 已完成数量 |
|
||||
| wiInstruct | wi_instruct | decimal | 已下达指令数量 |
|
||||
| process | process | varchar | 工艺路线 |
|
||||
| processId | process_id | varchar | 工艺路线ID |
|
||||
| prsProcessCode | prs_process_code | varchar | 生产工序编码 |
|
||||
| beltline | beltline | varchar | 生产线名称 |
|
||||
| beltlineId | beltline_id | varchar | 生产线ID |
|
||||
| warehouse | warehouse | varchar | 入库仓库 |
|
||||
| duration | duration | bigint | 加工时长 |
|
||||
| arrangeDate | arrange_date | datetime | 排产日期 |
|
||||
| needDate | need_date | datetime | 需求日期 |
|
||||
| ppDate | pp_date | datetime | 计划日期 |
|
||||
| salesman | salesman | varchar | 销售员 |
|
||||
| upstreamType | upstream_type | varchar | 上游类型 |
|
||||
| nonZero | non_zero | varchar | 是否显示未完成 |
|
||||
| *+BaseEntity公共字段* | | | 见上方公共字段表 |
|
||||
|
||||
### 2.3 车间基础设置表
|
||||
|
||||
| 表名推断 | 实体名 | 关键字段 | 说明 |
|
||||
|---------|--------|---------|------|
|
||||
| prs_beltline | PrsBeltline | uniqueId, code, name, processRoute, status | 生产线 |
|
||||
| prs_team | PrsTeam | uniqueId, code, name, status | 班组 |
|
||||
| prs_worker | PrsWorker | uniqueId, code, name, jobs, status | 工人 |
|
||||
| prs_jobs | PrsJobs | uniqueId, code, name, jobs, ratio | 工种 |
|
||||
| prs_operate_section | PrsOperateSection | uniqueId, code, name, duration, costRatio, countType, isQuality | 标准工序段 |
|
||||
| prs_process_route | PrsProcessRoute | uniqueId, code, name, status | 工艺路线 |
|
||||
| prs_equipment | PrsEquipment | uniqueId, code, name, deptName, status | 设备 |
|
||||
|
||||
---
|
||||
|
||||
## 3. 研发管理模块 (rd_*)
|
||||
|
||||
### 3.1 模块功能清单
|
||||
|
||||
| 序号 | 功能 | API前缀 | Java实体 | 说明 |
|
||||
|------|------|---------|---------|------|
|
||||
| 1 | 产品BOM(EBOM) | /rd/ebom | RdEbomMaster / RdEbomSalve | 研发物料清单(主从表) |
|
||||
| 2 | 样品配方 | /rd/sample | RdSampleMaster / RdSampleSalve | 样品配方(主从表) |
|
||||
| 3 | 孪生物料 | /rd/twin | RdTwinMaster / RdTwinSalve | 可替换/同色物料(主从表) |
|
||||
| 4 | 放量 | /rd/tret | RdTret | 物料分类放量系数 |
|
||||
| 5 | 研发设置 | /rd/setting | RdSetting | 参数配置 |
|
||||
|
||||
### 3.2 EBOM表头 (RdEbomMaster) 字段定义
|
||||
|
||||
> 来源: Swagger definitions.RdEbomMaster
|
||||
|
||||
| Swagger字段名 | 数据库推断字段名 | 类型 | 说明 |
|
||||
|--------------|----------------|------|------|
|
||||
| uniqueId | unique_id | bigint | 主键 |
|
||||
| rdCode | rd_code | varchar | BOM单据编码 |
|
||||
| invCode | inv_code | varchar | 母件物料编码 |
|
||||
| invName | inv_name | varchar | 母件物料名称 |
|
||||
| invAttribute | inv_attribute | varchar | 母件物料属性 |
|
||||
| invSortId | inv_sort_id | bigint | 物料分类ID |
|
||||
| invSortRoot | inv_sort_root | bigint | 物料根分类ID |
|
||||
| unitCode | unit_code | varchar | 计量单位编码 |
|
||||
| unitName | unit_name | varchar | 计量单位名称 |
|
||||
| baseNumber | base_number | decimal | 母件基数 |
|
||||
| verNumber | ver_number | varchar | 版本号 |
|
||||
| verRemark | ver_remark | varchar | 版本说明 |
|
||||
| drawingNo | drawing_no | varchar | 图纸号 |
|
||||
| attribute | attribute | varchar | 属性 |
|
||||
| colour | colour | varchar | 颜色 |
|
||||
| density | density | float | 密度 |
|
||||
| cost | cost | varchar | 成本 |
|
||||
| cust | cust | varchar | 客户 |
|
||||
| property | property | varchar | 性质 |
|
||||
| rdRecipeSalveList | - | array | 明细行列表 |
|
||||
| *+BaseEntity公共字段* | | | |
|
||||
|
||||
### 3.3 EBOM明细 (RdEbomSalve) 字段定义
|
||||
|
||||
| Swagger字段名 | 数据库推断字段名 | 类型 | 说明 |
|
||||
|--------------|----------------|------|------|
|
||||
| uniqueId | unique_id | bigint | 明细行主键 |
|
||||
| rdCode | rd_code | varchar | 关联BOM编码 |
|
||||
| invCode | inv_code | varchar | 子件物料编码 |
|
||||
| invName | inv_name | varchar | 子件物料名称 |
|
||||
| invAttribute | inv_attribute | varchar | 子件物料属性 |
|
||||
| invSortId | inv_sort_id | bigint | 子件分类ID |
|
||||
| invSortRoot | inv_sort_root | bigint | 子件根分类ID |
|
||||
| invSupplyType | inv_supply_type | varchar | 子件供应方式 |
|
||||
| invOutType | inv_out_type | varchar | 领料方式 |
|
||||
| unitCode | unit_code | varchar | 计量单位编码 |
|
||||
| unitName | unit_name | varchar | 计量单位名称 |
|
||||
| ratio | ratio | decimal | 用量比例(分子) |
|
||||
| fill | fill | varchar | 填充/用量方式 |
|
||||
| drawingNo | drawing_no | varchar | 子件图纸号 |
|
||||
| formula | formula | varchar | 公式 |
|
||||
| orderNum | order_num | int | 排序号 |
|
||||
| parentId | parent_id | bigint | 父节点ID(多阶) |
|
||||
| ancestors | ancestors | varchar | 祖级列表 |
|
||||
| children | - | array | 子节点(树形) |
|
||||
|
||||
### 3.4 孪生物料表头 (RdTwinMaster)
|
||||
|
||||
| Swagger字段名 | 说明 |
|
||||
|--------------|------|
|
||||
| uniqueId | 主键 |
|
||||
| rdCode | 孪生物料单据编码 |
|
||||
| invCode / invName | 物料编码/名称 |
|
||||
| title | 标题/说明 |
|
||||
| dynamicSpec | 动态规格 |
|
||||
| rdTwinSalveList | 明细行(含 colour, priority 字段) |
|
||||
|
||||
### 3.5 放量表 (RdTret)
|
||||
|
||||
| Swagger字段名 | 说明 |
|
||||
|--------------|------|
|
||||
| uniqueId | 主键 |
|
||||
| sortId / sortCode / sortName | 物料分类ID/编码/名称 |
|
||||
| f1, f2, f3, f4, f5 | 5个放量系数(number类型) |
|
||||
|
||||
### 3.6 研发设置表 (RdSetting)
|
||||
|
||||
| Swagger字段名 | 说明 |
|
||||
|--------------|------|
|
||||
| uniqueId | 主键 |
|
||||
| invCode / invName / invAttribute | 物料信息 |
|
||||
| invSortId / invSortRoot | 物料分类 |
|
||||
| enableColor | 启用颜色管理 |
|
||||
| enableContent | 启用含量管理 |
|
||||
| jsonContent | JSON配置内容 |
|
||||
|
||||
---
|
||||
|
||||
## 4. 委外管理模块 (pu_*)
|
||||
|
||||
### 4.1 模块功能清单
|
||||
|
||||
| 序号 | 功能 | API前缀 | Java实体 | 说明 |
|
||||
|------|------|---------|---------|------|
|
||||
| 1 | 委外商 | /pu/supplier | PuSupplier | 委外加工商档案 |
|
||||
| 2 | 委外订单 | /pu/order | PuOrderMaster | 委外加工订单(主从表) |
|
||||
| 3 | 委外到货单 | /pu/product | PuProductMaster | 委外到货(主从表) |
|
||||
| 4 | 委外入库单 | /pu/checkin | PuCheckinMaster | 委外入库(主从表) |
|
||||
| 5 | 委外发料单 | /pu/pick | PuPickMaster | 向委外商发料(主从表) |
|
||||
| 6 | 委外退料单 | /pu/unpick | PuUnPickMaster | 委外退料(主从表) |
|
||||
| 7 | 委外发票 | /pu/fapiao | PuFapiaoMaster | 委外加工费发票(含发票查验) |
|
||||
|
||||
### 4.2 委外订单 (PuOrderMaster) 关键特有字段
|
||||
|
||||
| Swagger字段名 | 说明 |
|
||||
|--------------|------|
|
||||
| puCode | 委外订单编码 |
|
||||
| supplier / supplierId | 委外商名称/ID |
|
||||
| contract | 合同号 |
|
||||
| processingFee | 加工费 |
|
||||
| shippingFee | 运费 |
|
||||
| mpOrderCode | 关联计划单编码 |
|
||||
| salesman | 销售员(跟单) |
|
||||
| item | 物料项 |
|
||||
| woCode / woQuantity / woDate / woType | 上游工单信息 |
|
||||
| drawingNo | 图纸号 |
|
||||
| duration | 加工周期 |
|
||||
| arrangeDate | 排期日期 |
|
||||
| needDate | 需求日期 |
|
||||
|
||||
### 4.3 委外发票 (PuFapiaoMaster) 特有字段
|
||||
|
||||
| Swagger字段名 | 说明 |
|
||||
|--------------|------|
|
||||
| puCode | 发票单据编码 |
|
||||
| supplier / supplierId | 委外商 |
|
||||
| vatCode | 发票代码 |
|
||||
| vatNo | 发票号码 |
|
||||
| vatDate | 开票日期 |
|
||||
| vatKind | 发票种类 |
|
||||
| vatType | 发票类型 |
|
||||
| vatAmount | 发票金额(不含税) |
|
||||
| vatTax | 税额 |
|
||||
| vatTotal | 价税合计 |
|
||||
| vatRate | 税率 |
|
||||
| vatStatus | 发票状态 |
|
||||
| taxNumber | 纳税人识别号 |
|
||||
| entryType | 入账类型 |
|
||||
| fdPeriod | 财务期间 |
|
||||
| filePdf / fileXml / fileOfd | 发票附件 |
|
||||
| bredNo / bredReason / bredVouch | 红冲信息 |
|
||||
| wiAmount / wiAmountR / wiTaxR | 已核销金额 |
|
||||
|
||||
---
|
||||
|
||||
## 5. 与现有数据库设计的差异分析
|
||||
|
||||
### 5.1 已有文档中的命名 vs Swagger实际命名
|
||||
|
||||
现有 `erp数据库设计-DDL.sql` 中的表采用了**规范化的英文命名**(如 `erp_sl_order`, `order_code`, `item_code`),这些是**我们自行设计的DDL结构**。而目标ERP系统Swagger API揭示的**实际字段命名不同**。
|
||||
|
||||
| 现有DDL表名 | 实际API路径 | 实际实体名 | 状态 |
|
||||
|-----------|-----------|-----------|------|
|
||||
| erp_sl_order | /sl/order | SlOrderMaster | ✅ API已文档化,DDL已设计 |
|
||||
| erp_sl_deliver | /sl/deliver | SlDeliverMaster | ✅ API已文档化,DDL已设计 |
|
||||
| erp_po_order | /po/order | PoOrderMaster | ✅ API已文档化,DDL已设计 |
|
||||
| erp_po_checkin | /po/checkin | PoCheckinMaster | ✅ API已文档化,DDL已设计 |
|
||||
| erp_mp_plan | /mp/plan | MpPlanMaster | ✅ API已文档化,DDL已设计 |
|
||||
| erp_mp_mbom | /mp/mbom | MpMbomMaster | ✅ API已文档化,DDL已设计 |
|
||||
| (无) | /prs/order | PrsOrderMaster | ❌ **新发现 - 需补充** |
|
||||
| (无) | /prs/pick | PrsPickMaster | ❌ **新发现 - 需补充** |
|
||||
| (无) | /prs/checkin | PrsCheckinMaster | ❌ **新发现 - 需补充** |
|
||||
| (无) | /rd/ebom | RdEbomMaster | ❌ **新发现 - 需补充** |
|
||||
| (无) | /rd/sample | RdSampleMaster | ❌ **新发现 - 需补充** |
|
||||
| (无) | /rd/twin | RdTwinMaster | ❌ **新发现 - 需补充** |
|
||||
| (无) | /pu/order | PuOrderMaster | ❌ **新发现 - 需补充** |
|
||||
| (无) | /pu/checkin | PuCheckinMaster | ❌ **新发现 - 需补充** |
|
||||
| (无) | /pu/fapiao | PuFapiaoMaster | ❌ **新发现 - 需补充** |
|
||||
| (无) | /fd/* | Fd* | ❌ **新发现 - 需补充** |
|
||||
|
||||
### 5.2 关于公共基类字段(BaseEntity)
|
||||
|
||||
Swagger API揭示所有单据实体都继承自同一个基类,包含以下标准化字段。现有DDL中这些字段的命名**大部分一致**,但有几个需要特别注意:
|
||||
|
||||
| 基类字段 | 现有DDL命名 | 对齐建议 |
|
||||
|---------|-----------|---------|
|
||||
| ppNumber | track_code / order_code | 建议在DDL中增加 pp_number 字段 |
|
||||
| invoiceDate | order_date / plan_date | 各模块已有对应日期字段,无需修改 |
|
||||
| invoiceStatus | status | 一致 |
|
||||
| workType | business_type / work_type | 一致 |
|
||||
| workStatus | business_status | 建议统一 |
|
||||
| formConfig | (无) | 建议增加 form_config 字段 |
|
||||
| version | (无) | 建议增加 version 字段(乐观锁) |
|
||||
| remarks | (无) | 建议增加 remarks 字段 |
|
||||
|
||||
---
|
||||
|
||||
## 6. 待补充到DDL的表清单
|
||||
|
||||
### 6.1 优先级P0 - 生产管理核心表
|
||||
|
||||
| 序号 | 推断表名 | 说明 | 对应API |
|
||||
|------|---------|------|---------|
|
||||
| 1 | erp_prs_order | 生产订单表头 | /prs/order |
|
||||
| 2 | erp_prs_order_line | 生产订单明细 | /prs/order/chain |
|
||||
| 3 | erp_prs_pick | 生产领料单表头 | /prs/pick |
|
||||
| 4 | erp_prs_pick_line | 生产领料单明细 | /prs/pick/getDetail |
|
||||
| 5 | erp_prs_product | 生产完工单表头 | /prs/product |
|
||||
| 6 | erp_prs_product_line | 生产完工单明细 | /prs/product/chain |
|
||||
| 7 | erp_prs_checkin | 生产入库单表头 | /prs/checkin |
|
||||
| 8 | erp_prs_checkin_line | 生产入库单明细 | /prs/checkin/getDetail |
|
||||
|
||||
### 6.2 优先级P0 - 研发管理核心表
|
||||
|
||||
| 序号 | 推断表名 | 说明 | 对应API |
|
||||
|------|---------|------|---------|
|
||||
| 1 | erp_rd_ebom | EBOM表头 | /rd/ebom |
|
||||
| 2 | erp_rd_ebom_line | EBOM明细 | /rd/ebom/getDetail |
|
||||
| 3 | erp_rd_sample | 样品配方表头 | /rd/sample |
|
||||
| 4 | erp_rd_sample_line | 样品配方明细 | /rd/sample/chain |
|
||||
| 5 | erp_rd_twin | 孪生物料表头 | /rd/twin |
|
||||
| 6 | erp_rd_twin_line | 孪生物料明细 | /rd/twin/chain |
|
||||
| 7 | erp_rd_tret | 放量表 | /rd/tret |
|
||||
| 8 | erp_rd_setting | 研发设置 | /rd/setting |
|
||||
|
||||
### 6.3 优先级P1 - 委外管理表
|
||||
|
||||
| 序号 | 推断表名 | 说明 | 对应API |
|
||||
|------|---------|------|---------|
|
||||
| 1 | erp_pu_supplier | 委外商档案 | /pu/supplier |
|
||||
| 2 | erp_pu_order | 委外订单表头 | /pu/order |
|
||||
| 3 | erp_pu_order_line | 委外订单明细 | /pu/order/chain |
|
||||
| 4 | erp_pu_product | 委外到货单表头 | /pu/product |
|
||||
| 5 | erp_pu_checkin | 委外入库单表头 | /pu/checkin |
|
||||
| 6 | erp_pu_pick | 委外发料单表头 | /pu/pick |
|
||||
| 7 | erp_pu_unpick | 委外退料单表头 | /pu/unpick |
|
||||
| 8 | erp_pu_fapiao | 委外发票表头 | /pu/fapiao |
|
||||
|
||||
### 6.4 优先级P1 - 车间设置基础表
|
||||
|
||||
| 序号 | 推断表名 | 说明 | 对应API |
|
||||
|------|---------|------|---------|
|
||||
| 1 | erp_prs_beltline | 生产线 | /prs/beltline |
|
||||
| 2 | erp_prs_team | 班组 | /prs/team |
|
||||
| 3 | erp_prs_worker | 工人 | /prs/worker |
|
||||
| 4 | erp_prs_jobs | 工种 | /prs/jobs |
|
||||
| 5 | erp_prs_operate_section | 标准工序段 | /prs/operate |
|
||||
| 6 | erp_prs_process_route | 工艺路线 | /prs/route |
|
||||
| 7 | erp_prs_equipment | 设备 | /prs/equipment |
|
||||
|
||||
### 6.5 优先级P2 - 财务管理表
|
||||
|
||||
> 财务模块接口数量多,功能复杂(含凭证、科目、应收应付、成本核算等),建议后续单独分析和设计。
|
||||
|
||||
---
|
||||
|
||||
## 7. API路径与现有文档的完整对照
|
||||
|
||||
| 模块 | API前缀 | Swagger API文档地址 | 现有数据字典 | 现有DDL |
|
||||
|------|---------|-------------------|------------|--------|
|
||||
| 销售模块 | /sl | group=销售模块 | ✅ Section 6 | ✅ erp_sl_* |
|
||||
| 采购模块 | /po | group=采购模块 | ✅ Section 7 | ✅ erp_po_* |
|
||||
| 生产计划 | /mp | group=计划模块 (部分) | ✅ Section 8 | ✅ erp_mp_* |
|
||||
| 物料模块 | /md | group=物料模块 | ✅ Section 4 | ✅ erp_md_* |
|
||||
| 仓库模块 | /wm | group=仓库模块 | ✅ Section 5 | ✅ erp_wm_* |
|
||||
| **生产管理** | **/prs** | **group=生产模块** | **❌ 缺失** | **❌ 缺失** |
|
||||
| **研发管理** | **/rd** | **group=研发模块** | **❌ 缺失** | **❌ 缺失** |
|
||||
| **委外管理** | **/pu** | **group=委外模块** | **❌ 缺失** | **❌ 缺失** |
|
||||
| **财务管理** | **/fd** | **group=财务模块** | **❌ 缺失** | **❌ 缺失** |
|
||||
| 计划模块 | /pl | group=计划模块 | 部分 | 部分 |
|
||||
| 系统管理 | /system | group=系统模块 | ❌ | ❌ |
|
||||
|
||||
---
|
||||
|
||||
## 修订历史
|
||||
|
||||
| 版本 | 日期 | 修订内容 | 修订人 |
|
||||
|------|------|----------|--------|
|
||||
| 1.0.0 | 2026-02-06 | 初始版本,基于Swagger API实时分析整理 | System |
|
||||
213
prd/db/erp数据库设计-初始数据.sql
Normal file
213
prd/db/erp数据库设计-初始数据.sql
Normal file
@@ -0,0 +1,213 @@
|
||||
-- =====================================================
|
||||
-- ERP系统数据库设计 - 初始数据脚本
|
||||
-- 版本: 1.0.0
|
||||
-- 创建日期: 2026-01-25
|
||||
-- 说明: 系统初始化数据,包含默认租户、字典、计量单位等
|
||||
-- =====================================================
|
||||
|
||||
SET NAMES utf8mb4;
|
||||
|
||||
-- =====================================================
|
||||
-- 1. 默认租户数据
|
||||
-- 说明: 用户表(sys_user)和部门表(sys_dept)已在原项目数据库中定义,此处不再插入初始数据
|
||||
-- =====================================================
|
||||
|
||||
INSERT INTO `sys_tenant` (`tenant_id`, `tenant_name`, `contact_name`, `contact_phone`, `status`, `del_flag`, `create_time`) VALUES
|
||||
('000000', '默认租户', '管理员', '13800000000', '0', '0', NOW());
|
||||
|
||||
-- =====================================================
|
||||
-- 2. 计量单位数据
|
||||
-- =====================================================
|
||||
|
||||
INSERT INTO `erp_md_unit` (`tenant_id`, `unit_code`, `unit_name`, `unit_type`, `order_num`, `enable_flag`, `del_flag`, `create_time`) VALUES
|
||||
-- 数量单位
|
||||
('000000', 'PCS', '个', 'COUNT', 1, 'Y', '0', NOW()),
|
||||
('000000', 'SET', '套', 'COUNT', 2, 'Y', '0', NOW()),
|
||||
('000000', 'PAIR', '对', 'COUNT', 3, 'Y', '0', NOW()),
|
||||
('000000', 'BATCH', '批', 'COUNT', 4, 'Y', '0', NOW()),
|
||||
('000000', 'ROLL', '卷', 'COUNT', 5, 'Y', '0', NOW()),
|
||||
('000000', 'SHEET', '张', 'COUNT', 6, 'Y', '0', NOW()),
|
||||
('000000', 'BOX', '箱', 'COUNT', 7, 'Y', '0', NOW()),
|
||||
('000000', 'BAG', '袋', 'COUNT', 8, 'Y', '0', NOW()),
|
||||
('000000', 'BOTTLE', '瓶', 'COUNT', 9, 'Y', '0', NOW()),
|
||||
('000000', 'CAN', '罐', 'COUNT', 10, 'Y', '0', NOW()),
|
||||
-- 重量单位
|
||||
('000000', 'KG', '千克', 'WEIGHT', 20, 'Y', '0', NOW()),
|
||||
('000000', 'G', '克', 'WEIGHT', 21, 'Y', '0', NOW()),
|
||||
('000000', 'T', '吨', 'WEIGHT', 22, 'Y', '0', NOW()),
|
||||
('000000', 'MG', '毫克', 'WEIGHT', 23, 'Y', '0', NOW()),
|
||||
-- 长度单位
|
||||
('000000', 'M', '米', 'LENGTH', 30, 'Y', '0', NOW()),
|
||||
('000000', 'CM', '厘米', 'LENGTH', 31, 'Y', '0', NOW()),
|
||||
('000000', 'MM', '毫米', 'LENGTH', 32, 'Y', '0', NOW()),
|
||||
('000000', 'KM', '千米', 'LENGTH', 33, 'Y', '0', NOW()),
|
||||
-- 面积单位
|
||||
('000000', 'M2', '平方米', 'AREA', 40, 'Y', '0', NOW()),
|
||||
('000000', 'CM2', '平方厘米', 'AREA', 41, 'Y', '0', NOW()),
|
||||
-- 体积单位
|
||||
('000000', 'M3', '立方米', 'VOLUME', 50, 'Y', '0', NOW()),
|
||||
('000000', 'L', '升', 'VOLUME', 51, 'Y', '0', NOW()),
|
||||
('000000', 'ML', '毫升', 'VOLUME', 52, 'Y', '0', NOW());
|
||||
|
||||
-- =====================================================
|
||||
-- 3. 物料分类数据
|
||||
-- =====================================================
|
||||
|
||||
INSERT INTO `erp_md_item_type` (`tenant_id`, `item_type_code`, `item_type_name`, `parent_type_id`, `ancestors`, `order_num`, `enable_flag`, `del_flag`, `create_time`) VALUES
|
||||
-- 一级分类
|
||||
('000000', 'RAW', '原材料', NULL, NULL, 1, 'Y', '0', NOW()),
|
||||
('000000', 'PARTS', '零部件', NULL, NULL, 2, 'Y', '0', NOW()),
|
||||
('000000', 'SEMI', '半成品', NULL, NULL, 3, 'Y', '0', NOW()),
|
||||
('000000', 'FINISHED', '成品', NULL, NULL, 4, 'Y', '0', NOW()),
|
||||
('000000', 'PACKAGING', '包装物', NULL, NULL, 5, 'Y', '0', NOW()),
|
||||
('000000', 'CONSUMABLE', '辅料', NULL, NULL, 6, 'Y', '0', NOW());
|
||||
|
||||
-- 原材料子分类
|
||||
INSERT INTO `erp_md_item_type` (`tenant_id`, `item_type_code`, `item_type_name`, `parent_type_id`, `ancestors`, `order_num`, `enable_flag`, `del_flag`, `create_time`)
|
||||
SELECT '000000', 'RAW_STEEL', '钢材', item_type_id, CONCAT(item_type_id), 1, 'Y', '0', NOW() FROM erp_md_item_type WHERE item_type_code = 'RAW' AND tenant_id = '000000';
|
||||
|
||||
INSERT INTO `erp_md_item_type` (`tenant_id`, `item_type_code`, `item_type_name`, `parent_type_id`, `ancestors`, `order_num`, `enable_flag`, `del_flag`, `create_time`)
|
||||
SELECT '000000', 'RAW_ALUMINUM', '铝材', item_type_id, CONCAT(item_type_id), 2, 'Y', '0', NOW() FROM erp_md_item_type WHERE item_type_code = 'RAW' AND tenant_id = '000000';
|
||||
|
||||
INSERT INTO `erp_md_item_type` (`tenant_id`, `item_type_code`, `item_type_name`, `parent_type_id`, `ancestors`, `order_num`, `enable_flag`, `del_flag`, `create_time`)
|
||||
SELECT '000000', 'RAW_PLASTIC', '塑料', item_type_id, CONCAT(item_type_id), 3, 'Y', '0', NOW() FROM erp_md_item_type WHERE item_type_code = 'RAW' AND tenant_id = '000000';
|
||||
|
||||
INSERT INTO `erp_md_item_type` (`tenant_id`, `item_type_code`, `item_type_name`, `parent_type_id`, `ancestors`, `order_num`, `enable_flag`, `del_flag`, `create_time`)
|
||||
SELECT '000000', 'RAW_RUBBER', '橡胶', item_type_id, CONCAT(item_type_id), 4, 'Y', '0', NOW() FROM erp_md_item_type WHERE item_type_code = 'RAW' AND tenant_id = '000000';
|
||||
|
||||
-- 零部件子分类
|
||||
INSERT INTO `erp_md_item_type` (`tenant_id`, `item_type_code`, `item_type_name`, `parent_type_id`, `ancestors`, `order_num`, `enable_flag`, `del_flag`, `create_time`)
|
||||
SELECT '000000', 'PARTS_ELEC', '电子元器件', item_type_id, CONCAT(item_type_id), 1, 'Y', '0', NOW() FROM erp_md_item_type WHERE item_type_code = 'PARTS' AND tenant_id = '000000';
|
||||
|
||||
INSERT INTO `erp_md_item_type` (`tenant_id`, `item_type_code`, `item_type_name`, `parent_type_id`, `ancestors`, `order_num`, `enable_flag`, `del_flag`, `create_time`)
|
||||
SELECT '000000', 'PARTS_MECH', '机械部件', item_type_id, CONCAT(item_type_id), 2, 'Y', '0', NOW() FROM erp_md_item_type WHERE item_type_code = 'PARTS' AND tenant_id = '000000';
|
||||
|
||||
INSERT INTO `erp_md_item_type` (`tenant_id`, `item_type_code`, `item_type_name`, `parent_type_id`, `ancestors`, `order_num`, `enable_flag`, `del_flag`, `create_time`)
|
||||
SELECT '000000', 'PARTS_HARDWARE', '五金件', item_type_id, CONCAT(item_type_id), 3, 'Y', '0', NOW() FROM erp_md_item_type WHERE item_type_code = 'PARTS' AND tenant_id = '000000';
|
||||
|
||||
-- =====================================================
|
||||
-- 4. 默认仓库数据
|
||||
-- =====================================================
|
||||
|
||||
INSERT INTO `erp_wm_warehouse` (`tenant_id`, `warehouse_code`, `warehouse_name`, `warehouse_type`, `location`, `charge`, `enable_flag`, `del_flag`, `create_time`) VALUES
|
||||
('000000', 'WH_RAW', '原材料仓', 'RAW', 'A区', '张三', 'Y', '0', NOW()),
|
||||
('000000', 'WH_SEMI', '半成品仓', 'SEMI', 'B区', '李四', 'Y', '0', NOW()),
|
||||
('000000', 'WH_FINISHED', '成品仓', 'FINISHED', 'C区', '王五', 'Y', '0', NOW()),
|
||||
('000000', 'WH_DEFECT', '不良品仓', 'DEFECT', 'D区', '赵六', 'Y', '0', NOW());
|
||||
|
||||
-- =====================================================
|
||||
-- 5. 系统字典类型表 (如需要)
|
||||
-- =====================================================
|
||||
|
||||
-- 如果系统有字典表,可以在此添加字典数据
|
||||
-- 以下为示例结构
|
||||
|
||||
/*
|
||||
-- 字典类型表
|
||||
CREATE TABLE IF NOT EXISTS `erp_sys_dict_type` (
|
||||
`dict_id` bigint NOT NULL AUTO_INCREMENT,
|
||||
`dict_name` varchar(100) NOT NULL COMMENT '字典名称',
|
||||
`dict_type` varchar(100) NOT NULL COMMENT '字典类型',
|
||||
`status` char(1) DEFAULT '0' COMMENT '状态',
|
||||
`create_time` datetime DEFAULT NULL,
|
||||
PRIMARY KEY (`dict_id`),
|
||||
UNIQUE KEY `dict_type` (`dict_type`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='字典类型表';
|
||||
|
||||
-- 字典数据表
|
||||
CREATE TABLE IF NOT EXISTS `erp_sys_dict_data` (
|
||||
`dict_code` bigint NOT NULL AUTO_INCREMENT,
|
||||
`dict_sort` int DEFAULT 0 COMMENT '排序',
|
||||
`dict_label` varchar(100) NOT NULL COMMENT '字典标签',
|
||||
`dict_value` varchar(100) NOT NULL COMMENT '字典值',
|
||||
`dict_type` varchar(100) NOT NULL COMMENT '字典类型',
|
||||
`css_class` varchar(100) DEFAULT NULL COMMENT '样式',
|
||||
`list_class` varchar(100) DEFAULT NULL COMMENT '表格样式',
|
||||
`is_default` char(1) DEFAULT 'N' COMMENT '默认',
|
||||
`status` char(1) DEFAULT '0' COMMENT '状态',
|
||||
`create_time` datetime DEFAULT NULL,
|
||||
PRIMARY KEY (`dict_code`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='字典数据表';
|
||||
|
||||
-- 字典数据: 单据状态
|
||||
INSERT INTO `erp_sys_dict_type` VALUES (1, '单据状态', 'doc_status', '0', NOW());
|
||||
INSERT INTO `erp_sys_dict_data` VALUES (1, 1, '开立', 'DRAFT', 'doc_status', NULL, 'primary', 'Y', '0', NOW());
|
||||
INSERT INTO `erp_sys_dict_data` VALUES (2, 2, '已提交', 'SUBMITTED', 'doc_status', NULL, 'warning', 'N', '0', NOW());
|
||||
INSERT INTO `erp_sys_dict_data` VALUES (3, 3, '已审核', 'APPROVED', 'doc_status', NULL, 'success', 'N', '0', NOW());
|
||||
INSERT INTO `erp_sys_dict_data` VALUES (4, 4, '已驳回', 'REJECTED', 'doc_status', NULL, 'danger', 'N', '0', NOW());
|
||||
INSERT INTO `erp_sys_dict_data` VALUES (5, 5, '已关闭', 'CLOSED', 'doc_status', NULL, 'info', 'N', '0', NOW());
|
||||
INSERT INTO `erp_sys_dict_data` VALUES (6, 6, '已取消', 'CANCELLED', 'doc_status', NULL, 'info', 'N', '0', NOW());
|
||||
|
||||
-- 字典数据: 业务状态
|
||||
INSERT INTO `erp_sys_dict_type` VALUES (2, '业务状态', 'business_status', '0', NOW());
|
||||
INSERT INTO `erp_sys_dict_data` VALUES (10, 1, '正常', 'NORMAL', 'business_status', NULL, 'success', 'Y', '0', NOW());
|
||||
INSERT INTO `erp_sys_dict_data` VALUES (11, 2, '暂停', 'PAUSE', 'business_status', NULL, 'warning', 'N', '0', NOW());
|
||||
INSERT INTO `erp_sys_dict_data` VALUES (12, 3, '取消', 'CANCEL', 'business_status', NULL, 'danger', 'N', '0', NOW());
|
||||
|
||||
-- 字典数据: 供应方式
|
||||
INSERT INTO `erp_sys_dict_type` VALUES (3, '供应方式', 'supply_type', '0', NOW());
|
||||
INSERT INTO `erp_sys_dict_data` VALUES (20, 1, '采购', 'PURCHASE', 'supply_type', NULL, 'primary', 'Y', '0', NOW());
|
||||
INSERT INTO `erp_sys_dict_data` VALUES (21, 2, '自制', 'SELF_MADE', 'supply_type', NULL, 'success', 'N', '0', NOW());
|
||||
INSERT INTO `erp_sys_dict_data` VALUES (22, 3, '委外', 'OUTSOURCE', 'supply_type', NULL, 'warning', 'N', '0', NOW());
|
||||
|
||||
-- 字典数据: 客户等级
|
||||
INSERT INTO `erp_sys_dict_type` VALUES (4, '客户等级', 'client_level', '0', NOW());
|
||||
INSERT INTO `erp_sys_dict_data` VALUES (30, 1, 'A级', 'A', 'client_level', NULL, 'danger', 'N', '0', NOW());
|
||||
INSERT INTO `erp_sys_dict_data` VALUES (31, 2, 'B级', 'B', 'client_level', NULL, 'warning', 'Y', '0', NOW());
|
||||
INSERT INTO `erp_sys_dict_data` VALUES (32, 3, 'C级', 'C', 'client_level', NULL, 'primary', 'N', '0', NOW());
|
||||
INSERT INTO `erp_sys_dict_data` VALUES (33, 4, 'D级', 'D', 'client_level', NULL, 'info', 'N', '0', NOW());
|
||||
|
||||
-- 字典数据: 采购业务类型
|
||||
INSERT INTO `erp_sys_dict_type` VALUES (5, '采购业务类型', 'po_business_type', '0', NOW());
|
||||
INSERT INTO `erp_sys_dict_data` VALUES (40, 1, '原材料', 'RAW_MATERIAL', 'po_business_type', NULL, 'primary', 'Y', '0', NOW());
|
||||
INSERT INTO `erp_sys_dict_data` VALUES (41, 2, '零部件', 'PARTS', 'po_business_type', NULL, 'success', 'N', '0', NOW());
|
||||
INSERT INTO `erp_sys_dict_data` VALUES (42, 3, '装配件', 'ASSEMBLY', 'po_business_type', NULL, 'warning', 'N', '0', NOW());
|
||||
INSERT INTO `erp_sys_dict_data` VALUES (43, 4, '成品', 'FINISHED', 'po_business_type', NULL, 'danger', 'N', '0', NOW());
|
||||
INSERT INTO `erp_sys_dict_data` VALUES (44, 5, '五金件', 'HARDWARE', 'po_business_type', NULL, 'info', 'N', '0', NOW());
|
||||
INSERT INTO `erp_sys_dict_data` VALUES (45, 6, '包装物', 'PACKAGING', 'po_business_type', NULL, 'info', 'N', '0', NOW());
|
||||
*/
|
||||
|
||||
-- =====================================================
|
||||
-- 6. 示例物料数据 (可选)
|
||||
-- =====================================================
|
||||
|
||||
/*
|
||||
-- 示例产品物料
|
||||
INSERT INTO `erp_md_item` (`tenant_id`, `item_code`, `item_name`, `specification`, `unit_of_measure`, `item_type_code`, `item_type_name`, `item_or_product`, `enable_flag`, `del_flag`, `create_time`) VALUES
|
||||
('000000', 'P001', '产品A', '100*100*50', '套', 'FINISHED', '成品', 'PRODUCT', 'Y', '0', NOW()),
|
||||
('000000', 'P002', '产品B', '200*150*80', '套', 'FINISHED', '成品', 'PRODUCT', 'Y', '0', NOW());
|
||||
|
||||
-- 示例原材料
|
||||
INSERT INTO `erp_md_item` (`tenant_id`, `item_code`, `item_name`, `specification`, `unit_of_measure`, `item_type_code`, `item_type_name`, `item_or_product`, `enable_flag`, `del_flag`, `create_time`) VALUES
|
||||
('000000', 'M001', '钢板', '2mm厚', '张', 'RAW_STEEL', '钢材', 'ITEM', 'Y', '0', NOW()),
|
||||
('000000', 'M002', '铝板', '3mm厚', '张', 'RAW_ALUMINUM', '铝材', 'ITEM', 'Y', '0', NOW()),
|
||||
('000000', 'M003', '螺丝', 'M6*20', '个', 'PARTS_HARDWARE', '五金件', 'ITEM', 'Y', '0', NOW()),
|
||||
('000000', 'M004', '螺母', 'M6', '个', 'PARTS_HARDWARE', '五金件', 'ITEM', 'Y', '0', NOW());
|
||||
*/
|
||||
|
||||
-- =====================================================
|
||||
-- 7. 示例客户数据 (可选)
|
||||
-- =====================================================
|
||||
|
||||
/*
|
||||
-- 客户数据已合并到 md_client 表,使用基础数据模块的客户管理功能
|
||||
INSERT INTO `md_client` (`tenant_id`, `client_code`, `client_name`, `client_nick`, `client_level`, `address`, `tel`, `contact1`, `contact1_tel`, `enable_flag`, `del_flag`, `create_time`) VALUES
|
||||
('000000', 'C001', '深圳科技有限公司', '深圳科技', 'A', '深圳市南山区科技园', '0755-12345678', '张经理', '13800001111', 'Y', '0', NOW()),
|
||||
('000000', 'C002', '广州制造有限公司', '广州制造', 'B', '广州市天河区工业区', '020-87654321', '李总', '13900002222', 'Y', '0', NOW()),
|
||||
('000000', 'C003', '东莞贸易有限公司', '东莞贸易', 'B', '东莞市虎门镇商业中心', '0769-55556666', '王总', '13700003333', 'Y', '0', NOW());
|
||||
*/
|
||||
|
||||
-- =====================================================
|
||||
-- 8. 示例供应商数据 (可选)
|
||||
-- =====================================================
|
||||
|
||||
/*
|
||||
INSERT INTO `erp_po_supplier` (`tenant_id`, `supplier_code`, `supplier_name`, `supplier_nick`, `supplier_level`, `address`, `tel`, `contact1`, `contact1_tel`, `enable_flag`, `del_flag`, `create_time`) VALUES
|
||||
('000000', 'S001', '佛山钢材供应商', '佛山钢材', 'A', '佛山市顺德区钢材市场', '0757-11112222', '陈经理', '13600001111', 'Y', '0', NOW()),
|
||||
('000000', 'S002', '中山五金供应商', '中山五金', 'B', '中山市小榄镇五金城', '0760-33334444', '林经理', '13500002222', 'Y', '0', NOW()),
|
||||
('000000', 'S003', '惠州塑料供应商', '惠州塑料', 'B', '惠州市博罗县工业区', '0752-55556666', '黄经理', '13400003333', 'Y', '0', NOW());
|
||||
*/
|
||||
|
||||
-- =====================================================
|
||||
-- 完成
|
||||
-- =====================================================
|
||||
980
prd/db/erp数据库设计-数据字典.md
Normal file
980
prd/db/erp数据库设计-数据字典.md
Normal file
@@ -0,0 +1,980 @@
|
||||
# ERP系统数据库设计 - 数据字典
|
||||
|
||||
> 版本: 1.0.0
|
||||
> 创建日期: 2026-01-25
|
||||
> 数据库: MySQL 8.0+
|
||||
> 字符集: utf8mb4
|
||||
|
||||
---
|
||||
|
||||
## 目录
|
||||
|
||||
1. [概述](#1-概述)
|
||||
2. [命名规范](#2-命名规范)
|
||||
3. [公共字段说明](#3-公共字段说明)
|
||||
4. [基础数据模块](#4-基础数据模块)
|
||||
5. [仓库管理模块](#5-仓库管理模块)
|
||||
6. [销售管理模块](#6-销售管理模块)
|
||||
7. [采购管理模块](#7-采购管理模块)
|
||||
8. [生产计划模块](#8-生产计划模块)
|
||||
9. [枚举值定义](#9-枚举值定义)
|
||||
10. [索引设计规范](#10-索引设计规范)
|
||||
11. [ER图](#11-er图)
|
||||
|
||||
---
|
||||
|
||||
## 1. 概述
|
||||
|
||||
### 1.1 文档目的
|
||||
|
||||
本文档定义ERP系统的数据库表结构、字段说明、枚举值和关联关系,为后端API开发和系统维护提供数据模型支持。
|
||||
|
||||
### 1.2 涵盖模块
|
||||
|
||||
| 模块 | 表前缀 | API前缀 | 说明 | 本文档状态 |
|
||||
|------|--------|---------|------|-----------|
|
||||
| 系统管理 | erp_sys_ | /system | 租户、用户、部门等 | ✅ 已收录 |
|
||||
| 基础数据 | erp_md_ | /md | 物料、BOM、单位等 | ✅ 已收录 |
|
||||
| 仓库管理 | erp_wm_ | /wm | 仓库、库存、出入库等 | ✅ 已收录 |
|
||||
| 销售管理 | erp_sl_ | /sl | 客户、订单、发货等 | ✅ 已收录 |
|
||||
| 采购管理 | erp_po_ | /po | 供应商、采购订单等 | ✅ 已收录 |
|
||||
| 生产计划 | erp_mp_ | /mp | 生产计划、物料清单等 | ✅ 已收录 |
|
||||
| 生产管理 | erp_prs_ | /prs | 生产订单、领料、完工、入库等 | ⚠️ 见补充文档 |
|
||||
| 研发管理 | erp_rd_ | /rd | EBOM、样品配方、孪生物料等 | ⚠️ 见补充文档 |
|
||||
| 委外管理 | erp_pu_ | /pu | 委外订单、发料、入库等 | ⚠️ 见补充文档 |
|
||||
| 财务管理 | erp_fd_ | /fd | 凭证、应收应付、成本核算等 | ⚠️ 见补充文档 |
|
||||
|
||||
> ⚠️ 标记的模块详见 `erp数据库设计-Swagger补充模块.md`
|
||||
|
||||
### 1.3 表清单总览
|
||||
|
||||
| 序号 | 表名 | 中文名 | 模块 |
|
||||
|------|------|--------|------|
|
||||
| 1 | sys_tenant | 租户表 | 系统管理 |
|
||||
| 2 | erp_md_item_type | 物料分类表 | 基础数据 |
|
||||
| 3 | erp_md_item | 物料档案表 | 基础数据 |
|
||||
| 4 | erp_md_unit | 计量单位表 | 基础数据 |
|
||||
| 5 | erp_md_bom | BOM表头 | 基础数据 |
|
||||
| 6 | erp_md_bom_line | BOM明细表 | 基础数据 |
|
||||
| 7 | erp_wm_warehouse | 仓库表 | 仓库管理 |
|
||||
| 8 | erp_wm_location | 库区表 | 仓库管理 |
|
||||
| 9 | erp_wm_area | 库位表 | 仓库管理 |
|
||||
| 10 | erp_wm_stock | 库存表 | 仓库管理 |
|
||||
| 11 | erp_wm_item_recpt | 入库单表头 | 仓库管理 |
|
||||
| 12 | erp_wm_item_recpt_line | 入库单明细 | 仓库管理 |
|
||||
| 13 | erp_wm_issue | 出库单表头 | 仓库管理 |
|
||||
| 14 | erp_wm_issue_line | 出库单明细 | 仓库管理 |
|
||||
| 15 | erp_sl_contract | 销售合同表头 | 销售管理 |
|
||||
| 17 | erp_sl_contract_line | 销售合同明细 | 销售管理 |
|
||||
| 18 | erp_sl_order | 销售订单表头 | 销售管理 |
|
||||
| 19 | erp_sl_order_line | 销售订单明细 | 销售管理 |
|
||||
| 20 | erp_sl_deliver | 发货单表头 | 销售管理 |
|
||||
| 21 | erp_sl_deliver_line | 发货单明细 | 销售管理 |
|
||||
| 22 | erp_sl_invoice | 销售发票表头 | 销售管理 |
|
||||
| 23 | erp_sl_invoice_line | 销售发票明细 | 销售管理 |
|
||||
| 24 | erp_sl_saleback | 销售退货单表头 | 销售管理 |
|
||||
| 25 | erp_sl_saleback_line | 销售退货单明细 | 销售管理 |
|
||||
| 26 | erp_po_supplier | 供应商档案表 | 采购管理 |
|
||||
| 27 | erp_po_order | 采购订单表头 | 采购管理 |
|
||||
| 28 | erp_po_order_line | 采购订单明细 | 采购管理 |
|
||||
| 29 | erp_po_checkin | 采购到货单表头 | 采购管理 |
|
||||
| 30 | erp_po_checkin_line | 采购到货单明细 | 采购管理 |
|
||||
| 31 | erp_po_invoice | 采购发票表头 | 采购管理 |
|
||||
| 32 | erp_po_invoice_line | 采购发票明细 | 采购管理 |
|
||||
| 33 | erp_po_reject | 采购退货单表头 | 采购管理 |
|
||||
| 34 | erp_po_reject_line | 采购退货单明细 | 采购管理 |
|
||||
| 35 | erp_mp_plan | 生产计划单表头 | 生产计划 |
|
||||
| 36 | erp_mp_plan_line | 生产计划单明细 | 生产计划 |
|
||||
| 37 | erp_mp_mbom | 物料清单表头 | 生产计划 |
|
||||
| 38 | erp_mp_mbom_line | 物料清单明细 | 生产计划 |
|
||||
| 39 | erp_mp_purchase | 采购计划单表 | 生产计划 |
|
||||
| 40 | erp_mp_parts | 零部件订单表 | 生产计划 |
|
||||
| | **以下为Swagger API发现的待补充表** | | |
|
||||
| 41 | erp_prs_order | 生产订单表头 | 生产管理 |
|
||||
| 42 | erp_prs_order_line | 生产订单明细 | 生产管理 |
|
||||
| 43 | erp_prs_pick | 生产领料单表头 | 生产管理 |
|
||||
| 44 | erp_prs_product | 生产完工单表头 | 生产管理 |
|
||||
| 45 | erp_prs_checkin | 生产入库单表头 | 生产管理 |
|
||||
| 46 | erp_prs_instruct | 生产指令单表头 | 生产管理 |
|
||||
| 47 | erp_prs_yield | 生产报工单表头 | 生产管理 |
|
||||
| 48 | erp_prs_beltline | 生产线 | 生产管理 |
|
||||
| 49 | erp_prs_team | 班组 | 生产管理 |
|
||||
| 50 | erp_prs_worker | 工人 | 生产管理 |
|
||||
| 51 | erp_prs_jobs | 工种 | 生产管理 |
|
||||
| 52 | erp_prs_operate_section | 标准工序段 | 生产管理 |
|
||||
| 53 | erp_prs_process_route | 工艺路线 | 生产管理 |
|
||||
| 54 | erp_prs_equipment | 设备 | 生产管理 |
|
||||
| 55 | erp_rd_ebom | EBOM表头 | 研发管理 |
|
||||
| 56 | erp_rd_ebom_line | EBOM明细 | 研发管理 |
|
||||
| 57 | erp_rd_sample | 样品配方表头 | 研发管理 |
|
||||
| 58 | erp_rd_sample_line | 样品配方明细 | 研发管理 |
|
||||
| 59 | erp_rd_twin | 孪生物料表头 | 研发管理 |
|
||||
| 60 | erp_rd_twin_line | 孪生物料明细 | 研发管理 |
|
||||
| 61 | erp_rd_tret | 放量表 | 研发管理 |
|
||||
| 62 | erp_rd_setting | 研发设置 | 研发管理 |
|
||||
| 63 | erp_pu_supplier | 委外商档案 | 委外管理 |
|
||||
| 64 | erp_pu_order | 委外订单表头 | 委外管理 |
|
||||
| 65 | erp_pu_order_line | 委外订单明细 | 委外管理 |
|
||||
| 66 | erp_pu_product | 委外到货单表头 | 委外管理 |
|
||||
| 67 | erp_pu_checkin | 委外入库单表头 | 委外管理 |
|
||||
| 68 | erp_pu_pick | 委外发料单表头 | 委外管理 |
|
||||
| 69 | erp_pu_unpick | 委外退料单表头 | 委外管理 |
|
||||
| 70 | erp_pu_fapiao | 委外发票表头 | 委外管理 |
|
||||
|
||||
---
|
||||
|
||||
## 2. 命名规范
|
||||
|
||||
### 2.1 表命名规范
|
||||
|
||||
| 规则 | 说明 | 示例 |
|
||||
|------|------|------|
|
||||
| 前缀 | erp_模块缩写_业务名 | erp_sl_order (销售订单) |
|
||||
| 主从表 | 主表不加后缀,从表加_line | erp_sl_order, erp_sl_order_line |
|
||||
| 小写 | 全部小写,下划线分隔 | erp_po_order_line |
|
||||
|
||||
### 2.2 字段命名规范
|
||||
|
||||
| 规则 | 说明 | 示例 |
|
||||
|------|------|------|
|
||||
| 主键 | 业务名_id | order_id, item_id |
|
||||
| 编码 | 业务名_code | order_code, item_code |
|
||||
| 名称 | 业务名_name | order_name, item_name |
|
||||
| 外键 | 关联表业务名_id | client_id, supplier_id |
|
||||
| 冗余字段 | 关联表业务名_code/name | client_code, client_name |
|
||||
| 标志 | xxx_flag | del_flag, enable_flag |
|
||||
| 数量 | quantity, xxx_qty | quantity, delivered_qty |
|
||||
| 金额 | amount, xxx_amount | amount, total_amount |
|
||||
|
||||
### 2.3 数据类型规范
|
||||
|
||||
| 用途 | 数据类型 | 说明 |
|
||||
|------|----------|------|
|
||||
| 主键 | bigint | 自增长ID |
|
||||
| 编码 | varchar(32) | 业务编码 |
|
||||
| 名称 | varchar(100) | 短名称 |
|
||||
| 描述 | varchar(500) | 长文本 |
|
||||
| 日期 | date | 纯日期 |
|
||||
| 时间 | datetime | 日期时间 |
|
||||
| 数量 | decimal(18,4) | 数量类 |
|
||||
| 金额 | decimal(18,2) | 金额类 |
|
||||
| 单价 | decimal(18,4) | 单价类 |
|
||||
| 比例 | decimal(5,2) | 百分比 |
|
||||
| 标志 | char(1) | Y/N, 0/1 |
|
||||
| 状态 | varchar(20) | 状态枚举 |
|
||||
|
||||
---
|
||||
|
||||
## 3. 公共字段说明
|
||||
|
||||
### 3.1 必备公共字段
|
||||
|
||||
所有业务表必须包含以下字段:
|
||||
|
||||
| 字段名 | 类型 | 说明 |
|
||||
|--------|------|------|
|
||||
| tenant_id | varchar(20) | 租户ID (多租户隔离) |
|
||||
| del_flag | char(1) | 删除标志 (0存在 1删除) |
|
||||
| create_by | varchar(64) | 创建者 |
|
||||
| create_time | datetime | 创建时间 |
|
||||
| update_by | varchar(64) | 更新者 |
|
||||
| update_time | datetime | 更新时间 |
|
||||
|
||||
### 3.2 单据类公共字段
|
||||
|
||||
单据类表通常包含以下字段:
|
||||
|
||||
| 字段名 | 类型 | 说明 |
|
||||
|--------|------|------|
|
||||
| status | varchar(20) | 单据状态 |
|
||||
| operator_id | bigint | 操作员ID |
|
||||
| operator_name | varchar(50) | 操作员名称 |
|
||||
| approver_id | bigint | 审核员ID |
|
||||
| approver_name | varchar(50) | 审核员名称 |
|
||||
| approve_date | datetime | 审核日期 |
|
||||
| remark | varchar(500) | 备注 |
|
||||
|
||||
---
|
||||
|
||||
## 4. 基础数据模块
|
||||
|
||||
### 4.1 物料分类表 (erp_md_item_type)
|
||||
|
||||
> API路径: `/md/itemtype`
|
||||
|
||||
| 字段名 | 类型 | 长度 | 允许空 | 默认值 | 说明 |
|
||||
|--------|------|------|--------|--------|------|
|
||||
| item_type_id | bigint | - | N | AUTO | 分类ID (主键) |
|
||||
| tenant_id | varchar | 20 | N | - | 租户ID |
|
||||
| item_type_code | varchar | 32 | N | - | 分类编码 |
|
||||
| item_type_name | varchar | 50 | N | - | 分类名称 |
|
||||
| parent_type_id | bigint | - | Y | NULL | 父分类ID |
|
||||
| ancestors | varchar | 500 | Y | NULL | 祖级列表 |
|
||||
| order_num | int | - | Y | 0 | 排序号 |
|
||||
| enable_flag | char | 1 | N | 'Y' | 启用状态 |
|
||||
| del_flag | char | 1 | N | '0' | 删除标志 |
|
||||
| create_by | varchar | 64 | Y | NULL | 创建者 |
|
||||
| create_time | datetime | - | Y | NULL | 创建时间 |
|
||||
| update_by | varchar | 64 | Y | NULL | 更新者 |
|
||||
| update_time | datetime | - | Y | NULL | 更新时间 |
|
||||
|
||||
**索引设计:**
|
||||
|
||||
| 索引名 | 字段 | 类型 |
|
||||
|--------|------|------|
|
||||
| uk_item_type_code | item_type_code, tenant_id | UNIQUE |
|
||||
| idx_item_type_parent | parent_type_id | INDEX |
|
||||
| idx_item_type_tenant | tenant_id | INDEX |
|
||||
|
||||
---
|
||||
|
||||
### 4.2 物料档案表 (erp_md_item)
|
||||
|
||||
> API路径: `/md/item`
|
||||
|
||||
| 字段名 | 类型 | 长度 | 允许空 | 默认值 | 说明 |
|
||||
|--------|------|------|--------|--------|------|
|
||||
| item_id | bigint | - | N | AUTO | 物料ID (主键) |
|
||||
| tenant_id | varchar | 20 | N | - | 租户ID |
|
||||
| item_code | varchar | 32 | N | - | 物料编码 |
|
||||
| item_name | varchar | 100 | N | - | 物料名称 |
|
||||
| specification | varchar | 200 | Y | NULL | 规格型号 |
|
||||
| unit_of_measure | varchar | 20 | Y | NULL | 主计量单位 |
|
||||
| item_type_id | bigint | - | Y | NULL | 物料分类ID |
|
||||
| item_type_code | varchar | 32 | Y | NULL | 物料分类编码 |
|
||||
| item_type_name | varchar | 50 | Y | NULL | 物料分类名称 |
|
||||
| item_sub_type_code | varchar | 32 | Y | NULL | 二级分类编码 |
|
||||
| item_sub_type_name | varchar | 50 | Y | NULL | 二级分类名称 |
|
||||
| item_or_product | varchar | 20 | Y | 'ITEM' | 物料/产品 |
|
||||
| safe_stock_flag | char | 1 | Y | 'N' | 启用安全库存 |
|
||||
| min_stock | decimal | 18,4 | Y | 0 | 最小库存 |
|
||||
| max_stock | decimal | 18,4 | Y | 0 | 最大库存 |
|
||||
| default_warehouse_id | bigint | - | Y | NULL | 默认仓库ID |
|
||||
| default_warehouse_name | varchar | 50 | Y | NULL | 默认仓库名称 |
|
||||
| weight | decimal | 18,6 | Y | NULL | 重量(kg) |
|
||||
| volume | decimal | 18,6 | Y | NULL | 体积(m³) |
|
||||
| enable_flag | char | 1 | N | 'Y' | 启用状态 |
|
||||
| remark | varchar | 500 | Y | NULL | 备注 |
|
||||
| del_flag | char | 1 | N | '0' | 删除标志 |
|
||||
| create_by | varchar | 64 | Y | NULL | 创建者 |
|
||||
| create_time | datetime | - | Y | NULL | 创建时间 |
|
||||
| update_by | varchar | 64 | Y | NULL | 更新者 |
|
||||
| update_time | datetime | - | Y | NULL | 更新时间 |
|
||||
|
||||
**索引设计:**
|
||||
|
||||
| 索引名 | 字段 | 类型 |
|
||||
|--------|------|------|
|
||||
| uk_item_code | item_code, tenant_id | UNIQUE |
|
||||
| idx_item_type | item_type_id | INDEX |
|
||||
| idx_item_name | item_name | INDEX |
|
||||
| idx_item_tenant | tenant_id | INDEX |
|
||||
|
||||
---
|
||||
|
||||
### 4.3 BOM表头 (erp_md_bom)
|
||||
|
||||
> API路径: `/md/bom`
|
||||
|
||||
| 字段名 | 类型 | 长度 | 允许空 | 默认值 | 说明 |
|
||||
|--------|------|------|--------|--------|------|
|
||||
| bom_id | bigint | - | N | AUTO | BOM ID (主键) |
|
||||
| tenant_id | varchar | 20 | N | - | 租户ID |
|
||||
| bom_code | varchar | 32 | N | - | BOM编码 |
|
||||
| bom_name | varchar | 100 | Y | NULL | BOM名称 |
|
||||
| item_id | bigint | - | N | - | 产品物料ID |
|
||||
| item_code | varchar | 32 | N | - | 产品物料编码 |
|
||||
| item_name | varchar | 100 | N | - | 产品物料名称 |
|
||||
| unit_name | varchar | 20 | Y | NULL | 计量单位 |
|
||||
| base_qty | decimal | 18,4 | N | 1 | 基本数量 |
|
||||
| version | varchar | 20 | Y | NULL | 版本号 |
|
||||
| version_desc | varchar | 200 | Y | NULL | 版本说明 |
|
||||
| status | varchar | 20 | N | 'DRAFT' | 状态 |
|
||||
| enable_flag | char | 1 | N | 'Y' | 启用状态 |
|
||||
| remark | varchar | 500 | Y | NULL | 备注 |
|
||||
| del_flag | char | 1 | N | '0' | 删除标志 |
|
||||
|
||||
### 4.4 BOM明细表 (erp_md_bom_line)
|
||||
|
||||
| 字段名 | 类型 | 长度 | 允许空 | 默认值 | 说明 |
|
||||
|--------|------|------|--------|--------|------|
|
||||
| line_id | bigint | - | N | AUTO | 明细ID (主键) |
|
||||
| bom_id | bigint | - | N | - | BOM ID (外键) |
|
||||
| line_no | int | - | N | - | 行号 |
|
||||
| item_id | bigint | - | N | - | 子件物料ID |
|
||||
| item_code | varchar | 32 | N | - | 子件物料编码 |
|
||||
| item_name | varchar | 100 | N | - | 子件物料名称 |
|
||||
| specification | varchar | 200 | Y | NULL | 规格型号 |
|
||||
| unit_name | varchar | 20 | Y | NULL | 计量单位 |
|
||||
| base_qty | decimal | 18,6 | N | 1 | 基本用量 |
|
||||
| loss_rate | decimal | 5,2 | Y | 0 | 损耗率(%) |
|
||||
| supply_type | varchar | 20 | Y | 'PURCHASE' | 供应方式 |
|
||||
| remark | varchar | 200 | Y | NULL | 备注 |
|
||||
| del_flag | char | 1 | N | '0' | 删除标志 |
|
||||
| tenant_id | varchar | 20 | N | - | 租户ID |
|
||||
|
||||
---
|
||||
|
||||
## 5. 仓库管理模块
|
||||
|
||||
### 5.1 仓库表 (erp_wm_warehouse)
|
||||
|
||||
> API路径: `/wm/warehouse`
|
||||
|
||||
| 字段名 | 类型 | 长度 | 允许空 | 默认值 | 说明 |
|
||||
|--------|------|------|--------|--------|------|
|
||||
| warehouse_id | bigint | - | N | AUTO | 仓库ID (主键) |
|
||||
| tenant_id | varchar | 20 | N | - | 租户ID |
|
||||
| warehouse_code | varchar | 32 | N | - | 仓库编码 |
|
||||
| warehouse_name | varchar | 50 | N | - | 仓库名称 |
|
||||
| warehouse_type | varchar | 20 | Y | NULL | 仓库类型 |
|
||||
| location | varchar | 100 | Y | NULL | 位置 |
|
||||
| area | decimal | 10,2 | Y | NULL | 面积(m²) |
|
||||
| charge | varchar | 50 | Y | NULL | 负责人 |
|
||||
| charge_tel | varchar | 20 | Y | NULL | 负责人电话 |
|
||||
| enable_flag | char | 1 | N | 'Y' | 启用状态 |
|
||||
| remark | varchar | 500 | Y | NULL | 备注 |
|
||||
| del_flag | char | 1 | N | '0' | 删除标志 |
|
||||
|
||||
### 5.2 库存表 (erp_wm_stock)
|
||||
|
||||
> API路径: `/wm/stock`
|
||||
|
||||
| 字段名 | 类型 | 长度 | 允许空 | 默认值 | 说明 |
|
||||
|--------|------|------|--------|--------|------|
|
||||
| stock_id | bigint | - | N | AUTO | 库存ID (主键) |
|
||||
| tenant_id | varchar | 20 | N | - | 租户ID |
|
||||
| item_id | bigint | - | N | - | 物料ID |
|
||||
| item_code | varchar | 32 | Y | NULL | 物料编码 |
|
||||
| item_name | varchar | 100 | Y | NULL | 物料名称 |
|
||||
| specification | varchar | 200 | Y | NULL | 规格型号 |
|
||||
| unit_name | varchar | 20 | Y | NULL | 计量单位 |
|
||||
| warehouse_id | bigint | - | N | - | 仓库ID |
|
||||
| warehouse_code | varchar | 32 | Y | NULL | 仓库编码 |
|
||||
| warehouse_name | varchar | 50 | Y | NULL | 仓库名称 |
|
||||
| location_id | bigint | - | Y | NULL | 库区ID |
|
||||
| area_id | bigint | - | Y | NULL | 库位ID |
|
||||
| batch_no | varchar | 50 | Y | NULL | 批次号 |
|
||||
| quantity_on_hand | decimal | 18,4 | N | 0 | 在库数量 |
|
||||
| quantity_locked | decimal | 18,4 | N | 0 | 锁定数量 |
|
||||
| quantity_available | decimal | 18,4 | N | 0 | 可用数量 |
|
||||
| unit_cost | decimal | 18,4 | Y | 0 | 单位成本 |
|
||||
| expire_date | date | - | Y | NULL | 有效期 |
|
||||
| update_time | datetime | - | Y | NULL | 更新时间 |
|
||||
|
||||
**业务规则:**
|
||||
- `quantity_available = quantity_on_hand - quantity_locked`
|
||||
- 库存更新时自动计算可用数量
|
||||
|
||||
---
|
||||
|
||||
## 6. 销售管理模块
|
||||
|
||||
> 说明: 客户档案表使用 md_client(基础数据模块),已合并原 erp_sl_client 的所有字段
|
||||
|
||||
### 6.1 销售订单表头 (erp_sl_order)
|
||||
|
||||
> API路径: `/sl/order`
|
||||
|
||||
| 字段名 | 类型 | 长度 | 允许空 | 默认值 | 说明 |
|
||||
|--------|------|------|--------|--------|------|
|
||||
| order_id | bigint | - | N | AUTO | 订单ID (主键) |
|
||||
| tenant_id | varchar | 20 | N | - | 租户ID |
|
||||
| order_code | varchar | 32 | N | - | 订单编码 |
|
||||
| order_name | varchar | 100 | Y | NULL | 订单名称 |
|
||||
| order_date | date | - | N | - | 订单日期 |
|
||||
| status | varchar | 20 | N | 'DRAFT' | 单据状态 |
|
||||
| business_status | varchar | 20 | Y | 'NORMAL' | 业务状态 |
|
||||
| order_type | varchar | 20 | Y | NULL | 订单类型 |
|
||||
| contract_id | bigint | - | Y | NULL | 合同ID |
|
||||
| contract_code | varchar | 32 | Y | NULL | 合同编码 |
|
||||
| client_id | bigint | - | N | - | 客户ID |
|
||||
| client_code | varchar | 32 | Y | NULL | 客户编码 |
|
||||
| client_name | varchar | 100 | Y | NULL | 客户名称 |
|
||||
| sales_user_id | bigint | - | Y | NULL | 销售员ID |
|
||||
| sales_user_name | varchar | 50 | Y | NULL | 销售员名称 |
|
||||
| dept_id | bigint | - | Y | NULL | 部门ID |
|
||||
| dept_name | varchar | 50 | Y | NULL | 部门名称 |
|
||||
| delivery_date | date | - | Y | NULL | 交货日期 |
|
||||
| delivery_address | varchar | 200 | Y | NULL | 收货地址 |
|
||||
| total_quantity | decimal | 18,4 | Y | 0 | 总数量 |
|
||||
| total_amount | decimal | 18,2 | Y | 0 | 总金额 |
|
||||
| delivered_quantity | decimal | 18,4 | Y | 0 | 已发货数量 |
|
||||
| delivered_amount | decimal | 18,2 | Y | 0 | 已发货金额 |
|
||||
| remark | varchar | 500 | Y | NULL | 备注 |
|
||||
| operator_id | bigint | - | Y | NULL | 操作员ID |
|
||||
| operator_name | varchar | 50 | Y | NULL | 操作员名称 |
|
||||
| approver_id | bigint | - | Y | NULL | 审核员ID |
|
||||
| approver_name | varchar | 50 | Y | NULL | 审核员名称 |
|
||||
| approve_date | datetime | - | Y | NULL | 审核日期 |
|
||||
| del_flag | char | 1 | N | '0' | 删除标志 |
|
||||
|
||||
### 6.2 销售订单明细 (erp_sl_order_line)
|
||||
|
||||
| 字段名 | 类型 | 长度 | 允许空 | 默认值 | 说明 |
|
||||
|--------|------|------|--------|--------|------|
|
||||
| line_id | bigint | - | N | AUTO | 明细ID (主键) |
|
||||
| order_id | bigint | - | N | - | 订单ID (外键) |
|
||||
| order_code | varchar | 32 | N | - | 订单编码 |
|
||||
| line_no | int | - | N | - | 行号 |
|
||||
| track_code | varchar | 32 | Y | NULL | 跟单编号 |
|
||||
| contract_line_id | bigint | - | Y | NULL | 合同明细ID |
|
||||
| item_id | bigint | - | N | - | 物料ID |
|
||||
| item_code | varchar | 32 | N | - | 物料编码 |
|
||||
| item_name | varchar | 100 | N | - | 物料名称 |
|
||||
| specification | varchar | 200 | Y | NULL | 规格型号 |
|
||||
| unit_id | bigint | - | Y | NULL | 计量单位ID |
|
||||
| unit_name | varchar | 20 | Y | NULL | 计量单位 |
|
||||
| quantity | decimal | 18,4 | N | 0 | 订单数量 |
|
||||
| unit_price | decimal | 18,4 | Y | 0 | 单价 |
|
||||
| amount | decimal | 18,2 | Y | 0 | 金额 |
|
||||
| delivered_qty | decimal | 18,4 | Y | 0 | 已发货数量 |
|
||||
| quality_req | varchar | 200 | Y | NULL | 质量要求 |
|
||||
| remark | varchar | 200 | Y | NULL | 备注 |
|
||||
| del_flag | char | 1 | N | '0' | 删除标志 |
|
||||
| tenant_id | varchar | 20 | N | - | 租户ID |
|
||||
|
||||
### 6.4 发货单表头 (erp_sl_deliver)
|
||||
|
||||
> API路径: `/sl/deliver`
|
||||
|
||||
| 字段名 | 类型 | 长度 | 允许空 | 默认值 | 说明 |
|
||||
|--------|------|------|--------|--------|------|
|
||||
| deliver_id | bigint | - | N | AUTO | 发货单ID (主键) |
|
||||
| tenant_id | varchar | 20 | N | - | 租户ID |
|
||||
| deliver_code | varchar | 32 | N | - | 发货单编码 |
|
||||
| deliver_name | varchar | 100 | Y | NULL | 发货单名称 |
|
||||
| deliver_date | date | - | N | - | 发货日期 |
|
||||
| status | varchar | 20 | N | 'DRAFT' | 状态 |
|
||||
| order_id | bigint | - | Y | NULL | 销售订单ID |
|
||||
| order_code | varchar | 32 | Y | NULL | 销售订单编码 |
|
||||
| client_id | bigint | - | N | - | 客户ID |
|
||||
| client_code | varchar | 32 | Y | NULL | 客户编码 |
|
||||
| client_name | varchar | 100 | Y | NULL | 客户名称 |
|
||||
| warehouse_id | bigint | - | Y | NULL | 发货仓库ID |
|
||||
| warehouse_name | varchar | 50 | Y | NULL | 仓库名称 |
|
||||
| delivery_address | varchar | 200 | Y | NULL | 收货地址 |
|
||||
| total_quantity | decimal | 18,4 | Y | 0 | 总数量 |
|
||||
| total_amount | decimal | 18,2 | Y | 0 | 总金额 |
|
||||
| remark | varchar | 500 | Y | NULL | 备注 |
|
||||
|
||||
---
|
||||
|
||||
## 7. 采购管理模块
|
||||
|
||||
### 7.1 供应商档案表 (erp_po_supplier)
|
||||
|
||||
> API路径: `/po/supplier`
|
||||
|
||||
| 字段名 | 类型 | 长度 | 允许空 | 默认值 | 说明 |
|
||||
|--------|------|------|--------|--------|------|
|
||||
| supplier_id | bigint | - | N | AUTO | 供应商ID (主键) |
|
||||
| tenant_id | varchar | 20 | N | - | 租户ID |
|
||||
| supplier_code | varchar | 32 | N | - | 供应商编码 |
|
||||
| supplier_name | varchar | 100 | N | - | 供应商名称 |
|
||||
| supplier_alias | varchar | 100 | Y | NULL | 供应商别名 |
|
||||
| supplier_nick | varchar | 50 | Y | NULL | 供应商简称 |
|
||||
| supplier_type | varchar | 20 | Y | NULL | 供应商分类 |
|
||||
| supplier_level | varchar | 10 | Y | 'B' | 供应商等级(A/B/C/D) |
|
||||
| province | varchar | 50 | Y | NULL | 省份 |
|
||||
| city | varchar | 50 | Y | NULL | 城市 |
|
||||
| address | varchar | 200 | Y | NULL | 公司地址 |
|
||||
| zip_code | varchar | 10 | Y | NULL | 邮编 |
|
||||
| tel | varchar | 20 | Y | NULL | 电话 |
|
||||
| fax | varchar | 20 | Y | NULL | 传真 |
|
||||
| email | varchar | 100 | Y | NULL | 邮箱 |
|
||||
| website | varchar | 200 | Y | NULL | 网址 |
|
||||
| contact1 | varchar | 50 | Y | NULL | 业务联系人 |
|
||||
| contact1_tel | varchar | 20 | Y | NULL | 业务联系人电话 |
|
||||
| contact2 | varchar | 50 | Y | NULL | 财务联系人 |
|
||||
| contact2_tel | varchar | 20 | Y | NULL | 财务联系人电话 |
|
||||
| bank_name | varchar | 100 | Y | NULL | 开户银行 |
|
||||
| bank_account | varchar | 30 | Y | NULL | 银行账号 |
|
||||
| bank_address | varchar | 200 | Y | NULL | 开票地址电话 |
|
||||
| tax_no | varchar | 30 | Y | NULL | 税号 |
|
||||
| supply_items | varchar | 500 | Y | NULL | 供应料品 |
|
||||
| enable_flag | char | 1 | N | 'Y' | 启用状态 |
|
||||
| remark | varchar | 500 | Y | NULL | 备注 |
|
||||
| del_flag | char | 1 | N | '0' | 删除标志 |
|
||||
|
||||
### 7.2 采购订单表头 (erp_po_order)
|
||||
|
||||
> API路径: `/po/order`
|
||||
|
||||
| 字段名 | 类型 | 长度 | 允许空 | 默认值 | 说明 |
|
||||
|--------|------|------|--------|--------|------|
|
||||
| order_id | bigint | - | N | AUTO | 订单ID (主键) |
|
||||
| tenant_id | varchar | 20 | N | - | 租户ID |
|
||||
| order_code | varchar | 32 | N | - | 订单编码 |
|
||||
| order_date | date | - | N | - | 订单日期 |
|
||||
| status | varchar | 20 | N | 'DRAFT' | 单据状态 |
|
||||
| business_status | varchar | 20 | Y | 'NORMAL' | 业务状态 |
|
||||
| business_type | varchar | 20 | Y | NULL | 业务类型 |
|
||||
| order_type | varchar | 20 | Y | NULL | 单据类型 |
|
||||
| material_need | varchar | 20 | Y | NULL | 用料需求 |
|
||||
| supplier_id | bigint | - | Y | NULL | 供应商ID |
|
||||
| supplier_code | varchar | 32 | Y | NULL | 供应商编码 |
|
||||
| supplier_name | varchar | 100 | Y | NULL | 供应商名称 |
|
||||
| dept_id | bigint | - | Y | NULL | 采购部门ID |
|
||||
| dept_name | varchar | 50 | Y | NULL | 采购部门名称 |
|
||||
| user_id | bigint | - | Y | NULL | 采购人员ID |
|
||||
| user_name | varchar | 50 | Y | NULL | 采购人员名称 |
|
||||
| delivery_date | date | - | Y | NULL | 到货日期 |
|
||||
| contract_no | varchar | 50 | Y | NULL | 合同号 |
|
||||
| contract_file | varchar | 500 | Y | NULL | 合同附件 |
|
||||
| total_quantity | decimal | 18,4 | Y | 0 | 总数量 |
|
||||
| total_amount | decimal | 18,2 | Y | 0 | 总金额 |
|
||||
| arrived_quantity | decimal | 18,4 | Y | 0 | 已到货数量 |
|
||||
| remark | varchar | 500 | Y | NULL | 备注 |
|
||||
|
||||
### 7.3 采购订单明细 (erp_po_order_line)
|
||||
|
||||
| 字段名 | 类型 | 长度 | 允许空 | 默认值 | 说明 |
|
||||
|--------|------|------|--------|--------|------|
|
||||
| line_id | bigint | - | N | AUTO | 明细ID (主键) |
|
||||
| order_id | bigint | - | N | - | 订单ID (外键) |
|
||||
| order_code | varchar | 32 | N | - | 订单编码 |
|
||||
| line_no | int | - | N | - | 行号 |
|
||||
| track_code | varchar | 32 | Y | NULL | 跟单编号 |
|
||||
| plan_code | varchar | 32 | Y | NULL | 计划单号 |
|
||||
| plan_line_id | bigint | - | Y | NULL | 计划明细ID |
|
||||
| item_id | bigint | - | N | - | 物料ID |
|
||||
| item_code | varchar | 32 | N | - | 物料编码 |
|
||||
| item_name | varchar | 100 | N | - | 物料名称 |
|
||||
| specification | varchar | 200 | Y | NULL | 型号规格 |
|
||||
| unit_id | bigint | - | Y | NULL | 计量单位ID |
|
||||
| unit_name | varchar | 20 | Y | NULL | 计量单位 |
|
||||
| need_date | date | - | Y | NULL | 需求日期 |
|
||||
| quantity | decimal | 18,4 | N | 0 | 采购数量 |
|
||||
| unit_price | decimal | 18,4 | Y | 0 | 采购单价 |
|
||||
| amount | decimal | 18,2 | Y | 0 | 金额 |
|
||||
| arrived_quantity | decimal | 18,4 | Y | 0 | 已到货数量 |
|
||||
| remark | varchar | 200 | Y | NULL | 采购说明 |
|
||||
| del_flag | char | 1 | N | '0' | 删除标志 |
|
||||
| tenant_id | varchar | 20 | N | - | 租户ID |
|
||||
|
||||
---
|
||||
|
||||
## 8. 生产计划模块
|
||||
|
||||
### 8.1 生产计划单表头 (erp_mp_plan)
|
||||
|
||||
> API路径: `/mp/plan/order`
|
||||
|
||||
| 字段名 | 类型 | 长度 | 允许空 | 默认值 | 说明 |
|
||||
|--------|------|------|--------|--------|------|
|
||||
| plan_id | bigint | - | N | AUTO | 计划ID (主键) |
|
||||
| tenant_id | varchar | 20 | N | - | 租户ID |
|
||||
| plan_code | varchar | 32 | N | - | 计划单编码 |
|
||||
| plan_date | date | - | N | - | 计划日期 |
|
||||
| status | varchar | 20 | N | 'DRAFT' | 单据状态 |
|
||||
| business_status | varchar | 20 | Y | 'NORMAL' | 业务状态 |
|
||||
| business_type | varchar | 20 | Y | NULL | 业务类型 |
|
||||
| work_type | int | - | N | 0 | 工作类型 |
|
||||
| sales_order_id | bigint | - | Y | NULL | 销售订单ID |
|
||||
| sales_order_code | varchar | 32 | Y | NULL | 销售订单编码 |
|
||||
| sales_user_id | bigint | - | Y | NULL | 销售员ID |
|
||||
| sales_user_name | varchar | 50 | Y | NULL | 销售员名称 |
|
||||
| delivery_date | date | - | Y | NULL | 订单交期 |
|
||||
| bom_id | bigint | - | Y | NULL | BOM ID |
|
||||
| bom_version | varchar | 20 | Y | NULL | BOM版本号 |
|
||||
| bom_desc | varchar | 200 | Y | NULL | BOM版本说明 |
|
||||
| total_quantity | decimal | 18,4 | Y | 0 | 生产总量 |
|
||||
| remark | varchar | 500 | Y | NULL | 备注 |
|
||||
|
||||
### 8.2 物料清单表头 (erp_mp_mbom)
|
||||
|
||||
> API路径: `/mp/plan/mbom`
|
||||
|
||||
| 字段名 | 类型 | 长度 | 允许空 | 默认值 | 说明 |
|
||||
|--------|------|------|--------|--------|------|
|
||||
| mbom_id | bigint | - | N | AUTO | 物料清单ID (主键) |
|
||||
| tenant_id | varchar | 20 | N | - | 租户ID |
|
||||
| mbom_code | varchar | 32 | N | - | 物料清单编码 |
|
||||
| mbom_date | date | - | N | - | 单据日期 |
|
||||
| status | varchar | 20 | N | 'DRAFT' | 单据状态 |
|
||||
| business_type | varchar | 20 | Y | NULL | 业务类型 |
|
||||
| issue_status | varchar | 20 | Y | NULL | 下发状态 |
|
||||
| plan_id | bigint | - | N | - | 生产计划ID |
|
||||
| plan_code | varchar | 32 | N | - | 生产计划编码 |
|
||||
| sales_order_id | bigint | - | Y | NULL | 销售订单ID |
|
||||
| sales_order_code | varchar | 32 | Y | NULL | 销售订单编码 |
|
||||
| delivery_date | date | - | Y | NULL | 订单交期 |
|
||||
| item_id | bigint | - | N | - | 产品物料ID |
|
||||
| item_code | varchar | 32 | N | - | 产品物料编码 |
|
||||
| item_name | varchar | 100 | N | - | 产品物料名称 |
|
||||
| unit_name | varchar | 20 | Y | NULL | 计量单位 |
|
||||
| supply_type | varchar | 20 | Y | NULL | 供应方式 |
|
||||
| quantity | decimal | 18,4 | N | 0 | 生产数量 |
|
||||
| workshop_id | bigint | - | Y | NULL | 下发车间ID |
|
||||
| workshop_name | varchar | 50 | Y | NULL | 下发车间名称 |
|
||||
| remark | varchar | 500 | Y | NULL | 备注 |
|
||||
|
||||
### 8.3 采购计划单表 (erp_mp_purchase)
|
||||
|
||||
> API路径: `/mp/plan/purchase`
|
||||
|
||||
| 字段名 | 类型 | 长度 | 允许空 | 默认值 | 说明 |
|
||||
|--------|------|------|--------|--------|------|
|
||||
| purchase_id | bigint | - | N | AUTO | 采购计划ID (主键) |
|
||||
| tenant_id | varchar | 20 | N | - | 租户ID |
|
||||
| purchase_code | varchar | 32 | N | - | 采购计划编码 |
|
||||
| purchase_date | date | - | N | - | 计划日期 |
|
||||
| status | varchar | 20 | N | 'DRAFT' | 单据状态 |
|
||||
| need_type | int | - | N | 0 | 需求方式 |
|
||||
| plan_id | bigint | - | Y | NULL | 生产计划ID |
|
||||
| plan_code | varchar | 32 | Y | NULL | 生产计划编码 |
|
||||
| sales_order_id | bigint | - | Y | NULL | 销售订单ID |
|
||||
| sales_order_code | varchar | 32 | Y | NULL | 销售订单编码 |
|
||||
| delivery_date | date | - | Y | NULL | 订单交期 |
|
||||
| item_id | bigint | - | N | - | 物料ID |
|
||||
| item_code | varchar | 32 | N | - | 物料编码 |
|
||||
| item_name | varchar | 100 | N | - | 物料名称 |
|
||||
| specification | varchar | 200 | Y | NULL | 型号规格 |
|
||||
| unit_name | varchar | 20 | Y | NULL | 计量单位 |
|
||||
| purchase_qty | decimal | 18,4 | N | 0 | 采购数量 |
|
||||
| ordered_qty | decimal | 18,4 | Y | 0 | 已订数量 |
|
||||
| remark | varchar | 500 | Y | NULL | 备注 |
|
||||
|
||||
---
|
||||
|
||||
## 9. 枚举值定义
|
||||
|
||||
### 9.1 通用单据状态 (status)
|
||||
|
||||
| 枚举值 | 中文名 | 说明 |
|
||||
|--------|--------|------|
|
||||
| DRAFT | 开立/草稿 | 可编辑状态 |
|
||||
| SUBMITTED | 已提交 | 等待审核 |
|
||||
| APPROVED | 已审核 | 审核通过,不可编辑 |
|
||||
| REJECTED | 已驳回 | 审核驳回 |
|
||||
| CLOSED | 已关闭 | 业务完结 |
|
||||
| CANCELLED | 已取消 | 取消作废 |
|
||||
|
||||
### 9.2 业务状态 (business_status)
|
||||
|
||||
| 枚举值 | 中文名 | 说明 |
|
||||
|--------|--------|------|
|
||||
| NORMAL | 正常 | 正常执行 |
|
||||
| PAUSE | 暂停 | 暂停执行 |
|
||||
| CANCEL | 取消 | 已取消 |
|
||||
|
||||
### 9.3 启用状态 (enable_flag)
|
||||
|
||||
| 枚举值 | 中文名 | 说明 |
|
||||
|--------|--------|------|
|
||||
| Y | 启用 | 正常使用 |
|
||||
| N | 停用 | 禁止使用 |
|
||||
|
||||
### 9.4 删除标志 (del_flag)
|
||||
|
||||
| 枚举值 | 中文名 | 说明 |
|
||||
|--------|--------|------|
|
||||
| 0 | 存在 | 正常数据 |
|
||||
| 1 | 删除 | 逻辑删除 |
|
||||
|
||||
### 9.5 物料类型 (item_or_product)
|
||||
|
||||
| 枚举值 | 中文名 | 说明 |
|
||||
|--------|--------|------|
|
||||
| ITEM | 物料 | 原材料/零部件 |
|
||||
| PRODUCT | 产品 | 成品 |
|
||||
|
||||
### 9.6 供应方式 (supply_type)
|
||||
|
||||
| 枚举值 | 中文名 | 说明 |
|
||||
|--------|--------|------|
|
||||
| PURCHASE | 采购 | 外部采购 |
|
||||
| SELF_MADE | 自制 | 自己生产 |
|
||||
| OUTSOURCE | 委外 | 委外加工 |
|
||||
|
||||
### 9.7 采购业务类型 (business_type)
|
||||
|
||||
| 枚举值 | 中文名 | 说明 |
|
||||
|--------|--------|------|
|
||||
| RAW_MATERIAL | 原材料 | 原材料采购 |
|
||||
| PARTS | 零部件 | 零部件采购 |
|
||||
| ASSEMBLY | 装配件 | 装配件采购 |
|
||||
| FINISHED | 成品 | 成品采购 |
|
||||
| HARDWARE | 五金件 | 五金件采购 |
|
||||
| PACKAGING | 包装物 | 包装物采购 |
|
||||
|
||||
### 9.8 用料需求 (material_need)
|
||||
|
||||
| 枚举值 | 中文名 | 说明 |
|
||||
|--------|--------|------|
|
||||
| ORDER_USE | 订单用料 | 按订单需求采购 |
|
||||
| STOCK_USE | 备库用料 | 备库采购 |
|
||||
|
||||
### 9.9 工作类型 (work_type)
|
||||
|
||||
| 枚举值 | 中文名 | 说明 |
|
||||
|--------|--------|------|
|
||||
| 0 | 生产计划单 | 主生产计划 |
|
||||
| 1 | 零部件计划单 | 零部件生产计划 |
|
||||
| 2 | 零部件订单 | 零部件加工订单 |
|
||||
|
||||
### 9.10 需求方式 (need_type)
|
||||
|
||||
| 枚举值 | 中文名 | 说明 |
|
||||
|--------|--------|------|
|
||||
| 0 | 订单用料 | 按订单需求采购 |
|
||||
| 1 | 库存备料 | 备库采购 |
|
||||
|
||||
### 9.11 下发状态 (issue_status)
|
||||
|
||||
| 枚举值 | 中文名 | 说明 |
|
||||
|--------|--------|------|
|
||||
| NOT_ISSUED | 未下发 | 未下发到车间 |
|
||||
| ISSUED | 已下发 | 已下发到车间 |
|
||||
| COMPLETED | 已完成 | 生产完成 |
|
||||
|
||||
### 9.12 财务状态 (finance_status)
|
||||
|
||||
| 枚举值 | 中文名 | 说明 |
|
||||
|--------|--------|------|
|
||||
| RECORDED | 录入 | 已录入 |
|
||||
| ENTERED | 入账 | 已入账 |
|
||||
|
||||
### 9.13 客户/供应商等级 (client_level / supplier_level)
|
||||
|
||||
| 枚举值 | 中文名 | 说明 |
|
||||
|--------|--------|------|
|
||||
| A | A级 | 核心客户/供应商 |
|
||||
| B | B级 | 重要客户/供应商 |
|
||||
| C | C级 | 一般客户/供应商 |
|
||||
| D | D级 | 潜在客户/供应商 |
|
||||
|
||||
---
|
||||
|
||||
## 10. 索引设计规范
|
||||
|
||||
### 10.1 索引命名规范
|
||||
|
||||
| 索引类型 | 命名格式 | 示例 |
|
||||
|----------|----------|------|
|
||||
| 主键 | pk_表名 | pk_sl_order |
|
||||
| 唯一索引 | uk_表名_字段 | uk_sl_order_code |
|
||||
| 普通索引 | idx_表名_字段 | idx_sl_order_date |
|
||||
| 组合索引 | idx_表名_字段1_字段2 | idx_sl_order_client_date |
|
||||
|
||||
### 10.2 必建索引
|
||||
|
||||
| 场景 | 索引字段 | 说明 |
|
||||
|------|----------|------|
|
||||
| 主键 | xxx_id | 主键自动创建 |
|
||||
| 租户 | tenant_id | 多租户隔离 |
|
||||
| 编码 | xxx_code + tenant_id | 编码唯一 |
|
||||
| 外键 | 关联字段ID | 关联查询 |
|
||||
| 日期 | xxx_date | 范围查询 |
|
||||
| 状态 | status | 条件筛选 |
|
||||
|
||||
### 10.3 索引设计原则
|
||||
|
||||
1. **主键索引**: 使用自增bigint,避免UUID
|
||||
2. **唯一索引**: 编码字段 + tenant_id 组合唯一
|
||||
3. **外键索引**: 所有外键字段必须建立索引
|
||||
4. **组合索引**: 遵循最左前缀原则
|
||||
5. **避免冗余**: 不要在已有索引字段上重复建索引
|
||||
|
||||
---
|
||||
|
||||
## 11. ER图
|
||||
|
||||
### 11.1 销售模块ER图
|
||||
|
||||
```
|
||||
┌──────────────────────┐ ┌──────────────────────┐ ┌──────────────────────┐
|
||||
│ md_client │ │ erp_sl_contract │ │ erp_sl_order │
|
||||
│ (客户档案) │<──│ (销售合同) │<──│ (销售订单) │
|
||||
└──────────────────────┘ └──────────┬───────────┘ └──────────┬───────────┘
|
||||
│ 1:N │ 1:N
|
||||
▼ ▼
|
||||
┌──────────────────────┐ ┌──────────────────────┐
|
||||
│erp_sl_contract_line │ │ erp_sl_order_line │
|
||||
│ (合同明细) │ │ (订单明细) │
|
||||
└──────────────────────┘ └──────────────────────┘
|
||||
│
|
||||
┌──────────────────────────────────────────────────┤
|
||||
│ │ │
|
||||
▼ ▼ ▼
|
||||
┌──────────────────────┐ ┌──────────────────────┐ ┌──────────────────────┐
|
||||
│ erp_sl_deliver │ │ erp_sl_invoice │ │ erp_sl_saleback │
|
||||
│ (发货单) │ │ (销售发票) │ │ (退货单) │
|
||||
└──────────┬───────────┘ └──────────┬───────────┘ └──────────┬───────────┘
|
||||
│ 1:N │ 1:N │ 1:N
|
||||
▼ ▼ ▼
|
||||
┌──────────────────────┐ ┌──────────────────────┐ ┌──────────────────────┐
|
||||
│ erp_sl_deliver_line │ │erp_sl_invoice_line │ │erp_sl_saleback_line │
|
||||
│ (发货明细) │ │ (发票明细) │ │ (退货明细) │
|
||||
└──────────────────────┘ └──────────────────────┘ └──────────────────────┘
|
||||
```
|
||||
|
||||
### 11.2 采购模块ER图
|
||||
|
||||
```
|
||||
┌──────────────────────┐ 1:N ┌──────────────────────┐
|
||||
│ erp_po_supplier │◄──────────────►│ erp_po_order │
|
||||
│ (供应商) │ │ (采购订单) │
|
||||
└──────────────────────┘ └──────────┬───────────┘
|
||||
│ 1:N
|
||||
▼
|
||||
┌──────────────────────┐
|
||||
│ erp_po_order_line │
|
||||
│ (采购明细) │
|
||||
└──────────┬───────────┘
|
||||
│
|
||||
┌───────────────────────────────────────┼───────────────────────────────────────┐
|
||||
│ │ │
|
||||
▼ 1:N ▼ 1:N ▼ 1:N
|
||||
┌──────────────────────┐ ┌──────────────────────┐ ┌──────────────────────┐
|
||||
│ erp_po_checkin │ │ erp_po_invoice │ │ erp_po_reject │
|
||||
│ (采购到货) │ │ (采购发票) │ │ (采购退货) │
|
||||
└──────────┬───────────┘ └──────────┬───────────┘ └──────────┬───────────┘
|
||||
│ 1:N │ 1:N │ 1:N
|
||||
▼ ▼ ▼
|
||||
┌──────────────────────┐ ┌──────────────────────┐ ┌──────────────────────┐
|
||||
│erp_po_checkin_line │ │erp_po_invoice_line │ │ erp_po_reject_line │
|
||||
│ (到货明细) │ │ (发票明细) │ │ (退货明细) │
|
||||
└──────────────────────┘ └──────────────────────┘ └──────────────────────┘
|
||||
```
|
||||
|
||||
### 11.3 生产计划模块ER图
|
||||
|
||||
```
|
||||
┌──────────────────────┐ 1:N ┌──────────────────────┐
|
||||
│ erp_sl_order │◄──────────────►│ erp_mp_plan │
|
||||
│ (销售订单) │ │ (生产计划单) │
|
||||
└──────────────────────┘ └──────────┬───────────┘
|
||||
│ 1:N
|
||||
▼
|
||||
┌──────────────────────┐
|
||||
│ erp_mp_plan_line │
|
||||
│ (生产计划明细) │
|
||||
└──────────┬───────────┘
|
||||
│
|
||||
┌───────────────────────────────────────┼───────────────────────────────────────┐
|
||||
│ │ │
|
||||
▼ 1:N ▼ 1:N ▼ 1:N
|
||||
┌──────────────────────┐ ┌──────────────────────┐ ┌──────────────────────┐
|
||||
│ erp_mp_mbom │ │ erp_mp_purchase │ │ erp_mp_parts │
|
||||
│ (物料清单) │ │ (采购计划单) │ │ (零部件订单) │
|
||||
└──────────┬───────────┘ └──────────────────────┘ └──────────────────────┘
|
||||
│ 1:N
|
||||
▼
|
||||
┌──────────────────────┐
|
||||
│ erp_mp_mbom_line │
|
||||
│ (物料清单明细) │
|
||||
└──────────────────────┘
|
||||
```
|
||||
|
||||
### 11.4 基础数据关联
|
||||
|
||||
```
|
||||
┌──────────────────────┐
|
||||
│ erp_md_item_type │
|
||||
│ (物料分类) │
|
||||
└──────────┬───────────┘
|
||||
│ 1:N
|
||||
▼
|
||||
┌──────────────────────┐ ┌──────────────────────┐ ┌──────────────────────┐
|
||||
│ erp_wm_warehouse │ │ erp_md_item │ │ erp_md_bom │
|
||||
│ (仓库) │ │ (物料档案) │ │ (BOM档案) │
|
||||
└──────────┬───────────┘ └──────────┬───────────┘ └──────────┬───────────┘
|
||||
│ │ │
|
||||
▼ │ ▼
|
||||
┌──────────────────────┐ │ ┌──────────────────────┐
|
||||
│ erp_wm_stock │◄────────────┘ │ erp_md_bom_line │
|
||||
│ (库存) │ │ (BOM明细) │
|
||||
└──────────────────────┘ └──────────────────────┘
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 附录A: API模块路径对照
|
||||
|
||||
| 模块 | API前缀 | 说明 |
|
||||
|------|---------|------|
|
||||
| 系统管理 | /system | 用户、角色、部门等 |
|
||||
| 基础数据 | /md | 物料、BOM、单位等 |
|
||||
| 仓库管理 | /wm | 仓库、库存、出入库等 |
|
||||
| 销售管理 | /sl | 客户、订单、发货等 |
|
||||
| 采购管理 | /po | 供应商、采购订单等 |
|
||||
| 生产计划 | /mp | 生产计划、物料清单等 |
|
||||
| 生产执行 | /pm | 工单、生产任务等 |
|
||||
| 研发管理 | /rd | 研发BOM、样品等 |
|
||||
| 委外管理 | /pu | 委外订单、委外加工等 |
|
||||
| 财务管理 | /fd | 应收应付、凭证等 |
|
||||
|
||||
---
|
||||
|
||||
## 附录B: 数据权限说明
|
||||
|
||||
### B.1 租户隔离
|
||||
|
||||
所有业务表都包含 `tenant_id` 字段,用于多租户数据隔离。
|
||||
|
||||
**隔离规则:**
|
||||
- 查询时自动追加租户条件
|
||||
- 新增时自动填充租户ID
|
||||
- 租户之间数据完全隔离
|
||||
|
||||
### B.2 数据权限范围
|
||||
|
||||
| 权限类型 | 说明 | 实现方式 |
|
||||
|----------|------|----------|
|
||||
| 全部数据 | 可查看所有数据 | 不追加条件 |
|
||||
| 部门数据 | 只能查看本部门数据 | dept_id = 当前部门 |
|
||||
| 部门及以下 | 可查看本部门及下级部门数据 | dept_id IN (部门树) |
|
||||
| 仅本人数据 | 只能查看自己创建的数据 | create_by = 当前用户 |
|
||||
|
||||
---
|
||||
|
||||
## 附录C: 未覆盖模块说明
|
||||
|
||||
> 以下模块已通过Swagger API发现但尚未纳入本数据字典,详见 `erp数据库设计-Swagger补充模块.md`
|
||||
|
||||
### C.1 未覆盖模块清单
|
||||
|
||||
| 模块 | API前缀 | Java包前缀 | 估计表数量 | 说明 |
|
||||
|------|---------|-----------|-----------|------|
|
||||
| 生产管理(车间) | /prs | Prs* | ~20 | 生产订单、领料、完工、入库、报工、指令单等 |
|
||||
| 研发管理 | /rd | Rd* | ~10 | 产品BOM(EBOM)、样品配方、孪生物料、放量、设置 |
|
||||
| 委外管理 | /pu | Pu* | ~14 | 委外商、委外订单、到货、入库、发料、退料、发票 |
|
||||
| 财务管理 | /fd | Fd* | ~30+ | 期间、账套、科目、凭证、应收应付、收付款、成本核算等 |
|
||||
| 车间设置 | /prs (基础) | Prs* | ~8 | 生产线、班组、工人、工种、工序段、工艺路线、设备 |
|
||||
|
||||
### C.2 Swagger API揭示的命名差异
|
||||
|
||||
目标ERP系统的实际API字段命名与本文档中基于行业惯例设计的字段命名存在差异:
|
||||
|
||||
| 概念 | 本文档命名 | Swagger实际命名 | 差异说明 |
|
||||
|------|-----------|---------------|---------|
|
||||
| 主键 | xxx_id (如 order_id) | uniqueId | ERP统一使用uniqueId |
|
||||
| 物料编码 | item_code | invCode | inv = Inventory |
|
||||
| 物料名称 | item_name | invName | inv = Inventory |
|
||||
| 物料分类ID | item_type_id | invSortId | sort = 分类 |
|
||||
| 跟单编号 | track_code | ppNumber | 全局唯一 |
|
||||
| 操作员 | operator_name | userOper | |
|
||||
| 审核员 | approver_name | userCheck | |
|
||||
| 审核日期 | approve_date | checkDate | |
|
||||
| 业务状态 | business_status | workStatus | |
|
||||
|
||||
> **说明**: 本文档中的字段命名遵循行业通用规范,便于理解和对接。实际集成时需根据API字段名进行映射转换。具体映射关系详见 `erp数据库设计-Swagger补充模块.md` 第1节。
|
||||
|
||||
### C.3 相关文档
|
||||
|
||||
| 文档 | 说明 |
|
||||
|------|------|
|
||||
| `erp数据库设计-Swagger补充模块.md` | Swagger API分析的完整报告,含所有缺失模块的字段定义 |
|
||||
| `目标erp系统接口文档Swagger-API.md` | 已整理的API接口文档(含9个模块) |
|
||||
| `ERP系统接口API文档.md` | API接口文档的引用版本 |
|
||||
|
||||
---
|
||||
|
||||
## 修订历史
|
||||
|
||||
| 版本 | 日期 | 修订内容 | 修订人 |
|
||||
|------|------|----------|--------|
|
||||
| 1.0.0 | 2026-01-25 | 初始版本 | System |
|
||||
| 1.1.0 | 2026-02-06 | 增加附录C:基于Swagger API分析的未覆盖模块说明和命名差异对照 | System |
|
||||
7023
prd/db/mom-db-260206.sql
Normal file
7023
prd/db/mom-db-260206.sql
Normal file
File diff suppressed because it is too large
Load Diff
346
prd/db/mom系统同步erp字段-alter.sql
Normal file
346
prd/db/mom系统同步erp字段-alter.sql
Normal file
@@ -0,0 +1,346 @@
|
||||
-- ============================================================
|
||||
-- MOM系统同步ERP字段 ALTER TABLE 脚本
|
||||
-- 将ERP系统的以下表的字段同步到MOM系统对应表:
|
||||
-- - erp_md_item -> md_item
|
||||
-- - erp_md_item_type -> md_item_type
|
||||
-- - erp_md_unit -> md_unit_measure
|
||||
-- - erp_md_bom, erp_md_bom_line -> md_product_bom
|
||||
-- 生成日期: 2026-01-26
|
||||
-- 兼容 MySQL 5.7+
|
||||
-- ============================================================
|
||||
|
||||
SET NAMES utf8mb4;
|
||||
|
||||
-- ============================================================
|
||||
-- 辅助存储过程: 安全添加字段 (字段不存在时才添加)
|
||||
-- ============================================================
|
||||
DROP PROCEDURE IF EXISTS `proc_add_column_if_not_exists`;
|
||||
|
||||
DELIMITER //
|
||||
CREATE PROCEDURE `proc_add_column_if_not_exists`(
|
||||
IN p_table_name VARCHAR(64),
|
||||
IN p_column_name VARCHAR(64),
|
||||
IN p_column_definition VARCHAR(500)
|
||||
)
|
||||
BEGIN
|
||||
DECLARE v_count INT DEFAULT 0;
|
||||
|
||||
SELECT COUNT(*) INTO v_count
|
||||
FROM information_schema.COLUMNS
|
||||
WHERE TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_NAME = p_table_name
|
||||
AND COLUMN_NAME = p_column_name;
|
||||
|
||||
IF v_count = 0 THEN
|
||||
SET @sql = CONCAT('ALTER TABLE `', p_table_name, '` ADD COLUMN `', p_column_name, '` ', p_column_definition);
|
||||
PREPARE stmt FROM @sql;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
SELECT CONCAT('Added column: ', p_table_name, '.', p_column_name) AS result;
|
||||
ELSE
|
||||
SELECT CONCAT('Column already exists: ', p_table_name, '.', p_column_name) AS result;
|
||||
END IF;
|
||||
END //
|
||||
|
||||
-- 辅助存储过程: 安全创建索引 (索引不存在时才创建)
|
||||
CREATE PROCEDURE `proc_add_index_if_not_exists`(
|
||||
IN p_table_name VARCHAR(64),
|
||||
IN p_index_name VARCHAR(64),
|
||||
IN p_column_name VARCHAR(64)
|
||||
)
|
||||
BEGIN
|
||||
DECLARE v_count INT DEFAULT 0;
|
||||
|
||||
SELECT COUNT(*) INTO v_count
|
||||
FROM information_schema.STATISTICS
|
||||
WHERE TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_NAME = p_table_name
|
||||
AND INDEX_NAME = p_index_name;
|
||||
|
||||
IF v_count = 0 THEN
|
||||
SET @sql = CONCAT('CREATE INDEX `', p_index_name, '` ON `', p_table_name, '` (`', p_column_name, '`)');
|
||||
PREPARE stmt FROM @sql;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
SELECT CONCAT('Created index: ', p_index_name) AS result;
|
||||
ELSE
|
||||
SELECT CONCAT('Index already exists: ', p_index_name) AS result;
|
||||
END IF;
|
||||
END //
|
||||
|
||||
DELIMITER ;
|
||||
|
||||
|
||||
-- ============================================================
|
||||
-- 1. md_item 表新增字段 (物料产品表)
|
||||
-- ============================================================
|
||||
|
||||
-- 新增租户ID字段
|
||||
CALL proc_add_column_if_not_exists('md_item', 'tenant_id', 'varchar(20) DEFAULT NULL COMMENT ''租户ID''');
|
||||
|
||||
-- 新增二级分类编码
|
||||
CALL proc_add_column_if_not_exists('md_item', 'item_sub_type_code', 'varchar(32) DEFAULT NULL COMMENT ''二级分类编码''');
|
||||
|
||||
-- 新增二级分类名称
|
||||
CALL proc_add_column_if_not_exists('md_item', 'item_sub_type_name', 'varchar(50) DEFAULT NULL COMMENT ''二级分类名称''');
|
||||
|
||||
-- 新增默认仓库ID
|
||||
CALL proc_add_column_if_not_exists('md_item', 'default_warehouse_id', 'bigint(20) DEFAULT NULL COMMENT ''默认仓库ID''');
|
||||
|
||||
-- 新增默认仓库名称
|
||||
CALL proc_add_column_if_not_exists('md_item', 'default_warehouse_name', 'varchar(50) DEFAULT NULL COMMENT ''默认仓库名称''');
|
||||
|
||||
-- 新增重量
|
||||
CALL proc_add_column_if_not_exists('md_item', 'weight', 'decimal(18,6) DEFAULT NULL COMMENT ''重量(kg)''');
|
||||
|
||||
-- 新增体积
|
||||
CALL proc_add_column_if_not_exists('md_item', 'volume', 'decimal(18,6) DEFAULT NULL COMMENT ''体积(m³)''');
|
||||
|
||||
-- 新增删除标志
|
||||
CALL proc_add_column_if_not_exists('md_item', 'del_flag', 'char(1) NOT NULL DEFAULT ''0'' COMMENT ''删除标志 (0存在 1删除)''');
|
||||
|
||||
-- 新增备注字段
|
||||
CALL proc_add_column_if_not_exists('md_item', 'remark', 'varchar(500) DEFAULT NULL COMMENT ''备注''');
|
||||
|
||||
-- 创建索引
|
||||
CALL proc_add_index_if_not_exists('md_item', 'idx_item_tenant', 'tenant_id');
|
||||
|
||||
|
||||
-- ============================================================
|
||||
-- 2. md_item_type 表新增字段 (物料分类表)
|
||||
-- ============================================================
|
||||
|
||||
-- 新增租户ID字段
|
||||
CALL proc_add_column_if_not_exists('md_item_type', 'tenant_id', 'varchar(20) DEFAULT NULL COMMENT ''租户ID''');
|
||||
|
||||
-- 新增删除标志
|
||||
CALL proc_add_column_if_not_exists('md_item_type', 'del_flag', 'char(1) NOT NULL DEFAULT ''0'' COMMENT ''删除标志 (0存在 1删除)''');
|
||||
|
||||
-- 扩展ancestors字段长度 (从255扩展到500)
|
||||
-- 注意: 这个操作是安全的,扩展长度不会丢失数据
|
||||
ALTER TABLE `md_item_type`
|
||||
MODIFY COLUMN `ancestors` varchar(500) DEFAULT NULL COMMENT '所有层级父节点';
|
||||
|
||||
-- 创建索引
|
||||
CALL proc_add_index_if_not_exists('md_item_type', 'idx_item_type_tenant', 'tenant_id');
|
||||
|
||||
|
||||
-- ============================================================
|
||||
-- 3. md_unit_measure 表新增字段 (计量单位表)
|
||||
-- ============================================================
|
||||
|
||||
-- 新增租户ID字段
|
||||
CALL proc_add_column_if_not_exists('md_unit_measure', 'tenant_id', 'varchar(20) DEFAULT NULL COMMENT ''租户ID''');
|
||||
|
||||
-- 新增主单位ID
|
||||
CALL proc_add_column_if_not_exists('md_unit_measure', 'primary_id', 'bigint(20) DEFAULT NULL COMMENT ''主单位ID''');
|
||||
|
||||
-- 新增是否主单位标志
|
||||
CALL proc_add_column_if_not_exists('md_unit_measure', 'primary_flag', 'char(1) NOT NULL DEFAULT ''Y'' COMMENT ''是否主单位(Y/N)''');
|
||||
|
||||
-- 新增换算比例
|
||||
CALL proc_add_column_if_not_exists('md_unit_measure', 'change_rate', 'decimal(18,6) DEFAULT 1.000000 COMMENT ''与主单位换算比例''');
|
||||
|
||||
-- 新增删除标志
|
||||
CALL proc_add_column_if_not_exists('md_unit_measure', 'del_flag', 'char(1) NOT NULL DEFAULT ''0'' COMMENT ''删除标志 (0存在 1删除)''');
|
||||
|
||||
-- 创建索引
|
||||
CALL proc_add_index_if_not_exists('md_unit_measure', 'idx_measure_tenant', 'tenant_id');
|
||||
|
||||
|
||||
-- ============================================================
|
||||
-- 清理: 删除辅助存储过程 (可选)
|
||||
-- ============================================================
|
||||
-- DROP PROCEDURE IF EXISTS `proc_add_column_if_not_exists`;
|
||||
-- DROP PROCEDURE IF EXISTS `proc_add_index_if_not_exists`;
|
||||
|
||||
|
||||
-- ============================================================
|
||||
-- 4. md_product_bom 表新增字段 (产品BOM关系表)
|
||||
-- 同步自ERP: erp_md_bom, erp_md_bom_line
|
||||
-- ============================================================
|
||||
|
||||
-- 新增BOM编码 (来自 erp_md_bom.bom_code)
|
||||
CALL proc_add_column_if_not_exists('md_product_bom', 'bom_code', 'varchar(32) DEFAULT NULL COMMENT ''BOM编码''');
|
||||
|
||||
-- 新增BOM名称 (来自 erp_md_bom.bom_name)
|
||||
CALL proc_add_column_if_not_exists('md_product_bom', 'bom_name', 'varchar(100) DEFAULT NULL COMMENT ''BOM名称''');
|
||||
|
||||
-- 新增版本号 (来自 erp_md_bom.version)
|
||||
CALL proc_add_column_if_not_exists('md_product_bom', 'version', 'varchar(20) DEFAULT NULL COMMENT ''版本号''');
|
||||
|
||||
-- 新增版本说明 (来自 erp_md_bom.version_desc)
|
||||
CALL proc_add_column_if_not_exists('md_product_bom', 'version_desc', 'varchar(200) DEFAULT NULL COMMENT ''版本说明''');
|
||||
|
||||
-- 新增状态 (来自 erp_md_bom.status)
|
||||
CALL proc_add_column_if_not_exists('md_product_bom', 'status', 'varchar(20) DEFAULT ''APPROVED'' COMMENT ''BOM状态(DRAFT/APPROVED/OBSOLETE)''');
|
||||
|
||||
-- 新增行号 (来自 erp_md_bom_line.line_no)
|
||||
CALL proc_add_column_if_not_exists('md_product_bom', 'line_no', 'int(11) DEFAULT 0 COMMENT ''BOM行号''');
|
||||
|
||||
-- 新增损耗率 (来自 erp_md_bom_line.loss_rate)
|
||||
CALL proc_add_column_if_not_exists('md_product_bom', 'loss_rate', 'decimal(5,2) DEFAULT 0.00 COMMENT ''损耗率(%)''');
|
||||
|
||||
-- 新增供应方式 (来自 erp_md_bom_line.supply_type)
|
||||
CALL proc_add_column_if_not_exists('md_product_bom', 'supply_type', 'varchar(20) DEFAULT ''PURCHASE'' COMMENT ''供应方式(PURCHASE/PRODUCE/OUTSOURCE)''');
|
||||
|
||||
-- 新增租户ID
|
||||
CALL proc_add_column_if_not_exists('md_product_bom', 'tenant_id', 'varchar(20) DEFAULT NULL COMMENT ''租户ID''');
|
||||
|
||||
-- 新增删除标志 (来自 erp_md_bom.del_flag)
|
||||
CALL proc_add_column_if_not_exists('md_product_bom', 'del_flag', 'char(1) NOT NULL DEFAULT ''0'' COMMENT ''删除标志(0存在 1删除)''');
|
||||
|
||||
-- 创建索引
|
||||
CALL proc_add_index_if_not_exists('md_product_bom', 'idx_bom_item', 'item_id');
|
||||
CALL proc_add_index_if_not_exists('md_product_bom', 'idx_bom_tenant', 'tenant_id');
|
||||
CALL proc_add_index_if_not_exists('md_product_bom', 'idx_bom_code', 'bom_code');
|
||||
|
||||
|
||||
-- ============================================================
|
||||
-- 5. md_item 表新增BOM相关字段 (来自 erp_md_bom)
|
||||
-- 物料档案表关联默认BOM信息
|
||||
-- ============================================================
|
||||
|
||||
-- 新增默认BOM ID (关联 erp_md_bom.bom_id)
|
||||
CALL proc_add_column_if_not_exists('md_item', 'default_bom_id', 'bigint(20) DEFAULT NULL COMMENT ''默认BOM ID''');
|
||||
|
||||
-- 新增默认BOM编码 (关联 erp_md_bom.bom_code)
|
||||
CALL proc_add_column_if_not_exists('md_item', 'default_bom_code', 'varchar(32) DEFAULT NULL COMMENT ''默认BOM编码''');
|
||||
|
||||
-- 新增默认BOM名称 (关联 erp_md_bom.bom_name)
|
||||
CALL proc_add_column_if_not_exists('md_item', 'default_bom_name', 'varchar(100) DEFAULT NULL COMMENT ''默认BOM名称''');
|
||||
|
||||
-- 新增基本数量 (来自 erp_md_bom.base_qty)
|
||||
CALL proc_add_column_if_not_exists('md_item', 'base_qty', 'decimal(18,4) DEFAULT 1.0000 COMMENT ''基本数量''');
|
||||
|
||||
-- 新增默认BOM版本号 (关联 erp_md_bom.version)
|
||||
CALL proc_add_column_if_not_exists('md_item', 'default_bom_version', 'varchar(20) DEFAULT NULL COMMENT ''默认BOM版本号''');
|
||||
|
||||
-- 创建索引
|
||||
CALL proc_add_index_if_not_exists('md_item', 'idx_item_default_bom', 'default_bom_id');
|
||||
|
||||
|
||||
-- ============================================================
|
||||
-- 6. md_product_bom 表补充字段 (来自 erp_md_bom_line)
|
||||
-- ============================================================
|
||||
|
||||
-- 新增基本用量 (来自 erp_md_bom_line.base_qty)
|
||||
-- 注: quantity字段已存在,这里添加base_qty作为原始用量
|
||||
CALL proc_add_column_if_not_exists('md_product_bom', 'base_qty', 'decimal(18,6) DEFAULT 1.000000 COMMENT ''基本用量(同步自ERP)''');
|
||||
|
||||
-- 新增产品物料编码 (来自 erp_md_bom.item_code)
|
||||
CALL proc_add_column_if_not_exists('md_product_bom', 'item_code', 'varchar(32) DEFAULT NULL COMMENT ''产品物料编码''');
|
||||
|
||||
-- 新增产品物料名称 (来自 erp_md_bom.item_name)
|
||||
CALL proc_add_column_if_not_exists('md_product_bom', 'item_name', 'varchar(100) DEFAULT NULL COMMENT ''产品物料名称''');
|
||||
|
||||
-- 新增产品物料规格 (关联查询)
|
||||
CALL proc_add_column_if_not_exists('md_product_bom', 'item_spec', 'varchar(200) DEFAULT NULL COMMENT ''产品物料规格''');
|
||||
|
||||
-- 新增子件规格 (来自 erp_md_bom_line.specification)
|
||||
CALL proc_add_column_if_not_exists('md_product_bom', 'specification', 'varchar(200) DEFAULT NULL COMMENT ''子件规格型号''');
|
||||
|
||||
-- 新增计量单位名称 (来自 erp_md_bom_line.unit_name)
|
||||
CALL proc_add_column_if_not_exists('md_product_bom', 'unit_name', 'varchar(20) DEFAULT NULL COMMENT ''计量单位名称''');
|
||||
|
||||
-- 确保enable_flag字段存在
|
||||
CALL proc_add_column_if_not_exists('md_product_bom', 'enable_flag', 'char(1) DEFAULT ''Y'' COMMENT ''是否启用(Y/N)''');
|
||||
|
||||
|
||||
-- ============================================================
|
||||
-- 字段变更汇总
|
||||
-- ============================================================
|
||||
--
|
||||
-- md_item (物料产品表) 新增字段:
|
||||
-- - tenant_id: 租户ID
|
||||
-- - item_sub_type_code: 二级分类编码
|
||||
-- - item_sub_type_name: 二级分类名称
|
||||
-- - default_warehouse_id: 默认仓库ID
|
||||
-- - default_warehouse_name: 默认仓库名称
|
||||
-- - weight: 重量(kg)
|
||||
-- - volume: 体积(m³)
|
||||
-- - del_flag: 删除标志
|
||||
-- - remark: 备注
|
||||
--
|
||||
-- md_item_type (物料分类表) 新增字段:
|
||||
-- - tenant_id: 租户ID
|
||||
-- - del_flag: 删除标志
|
||||
-- - ancestors: 字段长度从255扩展到500
|
||||
--
|
||||
-- md_unit_measure (计量单位表) 新增字段:
|
||||
-- - tenant_id: 租户ID
|
||||
-- - primary_id: 主单位ID
|
||||
-- - primary_flag: 是否主单位
|
||||
-- - change_rate: 与主单位换算比例
|
||||
-- - del_flag: 删除标志
|
||||
--
|
||||
-- md_product_bom (产品BOM关系表) 新增字段:
|
||||
-- - bom_code: BOM编码 (来自 erp_md_bom)
|
||||
-- - bom_name: BOM名称 (来自 erp_md_bom)
|
||||
-- - version: 版本号 (来自 erp_md_bom)
|
||||
-- - version_desc: 版本说明 (来自 erp_md_bom)
|
||||
-- - status: BOM状态 (来自 erp_md_bom)
|
||||
-- - line_no: 行号 (来自 erp_md_bom_line)
|
||||
-- - loss_rate: 损耗率(%) (来自 erp_md_bom_line)
|
||||
-- - supply_type: 供应方式 (来自 erp_md_bom_line)
|
||||
-- - base_qty: 基本用量 (来自 erp_md_bom_line)
|
||||
-- - item_code: 产品物料编码 (来自 erp_md_bom)
|
||||
-- - item_name: 产品物料名称 (来自 erp_md_bom)
|
||||
-- - item_spec: 产品物料规格
|
||||
-- - specification: 子件规格型号 (来自 erp_md_bom_line)
|
||||
-- - unit_name: 计量单位名称 (来自 erp_md_bom_line)
|
||||
-- - enable_flag: 是否启用
|
||||
-- - tenant_id: 租户ID
|
||||
-- - del_flag: 删除标志
|
||||
--
|
||||
-- md_item (物料产品表) 新增BOM关联字段:
|
||||
-- - default_bom_id: 默认BOM ID (来自 erp_md_bom)
|
||||
-- - default_bom_code: 默认BOM编码 (来自 erp_md_bom)
|
||||
-- - default_bom_name: 默认BOM名称 (来自 erp_md_bom)
|
||||
-- - base_qty: 基本数量 (来自 erp_md_bom)
|
||||
-- - default_bom_version: 默认BOM版本号 (来自 erp_md_bom)
|
||||
--
|
||||
-- ============================================================
|
||||
-- ERP BOM字段映射说明:
|
||||
-- ============================================================
|
||||
--
|
||||
-- erp_md_bom (BOM表头) -> md_item (关联字段) + md_product_bom (表头字段)
|
||||
-- ┌─────────────────────┬───────────────────────┬──────────────────────────┐
|
||||
-- │ ERP字段 │ MOM md_item字段 │ MOM md_product_bom字段 │
|
||||
-- ├─────────────────────┼───────────────────────┼──────────────────────────┤
|
||||
-- │ bom_id │ default_bom_id │ - │
|
||||
-- │ bom_code │ default_bom_code │ bom_code │
|
||||
-- │ bom_name │ default_bom_name │ bom_name │
|
||||
-- │ item_id │ - │ item_id │
|
||||
-- │ item_code │ - │ item_code │
|
||||
-- │ item_name │ - │ item_name │
|
||||
-- │ unit_name │ - │ - │
|
||||
-- │ base_qty │ base_qty │ - │
|
||||
-- │ version │ default_bom_version │ version │
|
||||
-- │ version_desc │ - │ version_desc │
|
||||
-- │ status │ - │ status │
|
||||
-- │ enable_flag │ - │ enable_flag │
|
||||
-- │ del_flag │ - │ del_flag │
|
||||
-- └─────────────────────┴───────────────────────┴──────────────────────────┘
|
||||
--
|
||||
-- erp_md_bom_line (BOM明细) -> md_product_bom (明细字段)
|
||||
-- ┌─────────────────────┬──────────────────────────┐
|
||||
-- │ ERP字段 │ MOM md_product_bom字段 │
|
||||
-- ├─────────────────────┼──────────────────────────┤
|
||||
-- │ line_id │ bom_id │
|
||||
-- │ bom_id │ (通过bom_code关联) │
|
||||
-- │ line_no │ line_no │
|
||||
-- │ item_id │ bom_item_id │
|
||||
-- │ item_code │ bom_item_code │
|
||||
-- │ item_name │ bom_item_name │
|
||||
-- │ specification │ bom_item_spec │
|
||||
-- │ unit_name │ unit_name │
|
||||
-- │ base_qty │ base_qty / quantity │
|
||||
-- │ loss_rate │ loss_rate │
|
||||
-- │ supply_type │ supply_type │
|
||||
-- │ remark │ remark │
|
||||
-- │ del_flag │ del_flag │
|
||||
-- │ tenant_id │ tenant_id │
|
||||
-- └─────────────────────┴──────────────────────────┘
|
||||
--
|
||||
-- ============================================================
|
||||
680
prd/db/mom系统数据升级方案-销售采购生产计划.md
Normal file
680
prd/db/mom系统数据升级方案-销售采购生产计划.md
Normal file
@@ -0,0 +1,680 @@
|
||||
# MOM系统数据升级方案 — 销售、采购、生产计划模块
|
||||
|
||||
> 版本: 1.1.0
|
||||
> 创建日期: 2026-02-06
|
||||
> 更新日期: 2026-02-07
|
||||
> 基于: ERP数据字典 / erp数据库设计-DDL.sql / 映射对照表 v1.2.0
|
||||
|
||||
---
|
||||
|
||||
## 1. 升级背景
|
||||
|
||||
MOM系统当前定位为**生产执行层**,不直接管理销售订单、采购订单和生产计划。但随着ERP系统集成深化,MOM需要存储来自ERP的计划层数据以支撑:
|
||||
- 生产排程时查看销售订单交期
|
||||
- 领料时关联采购订单溯源
|
||||
- 工单下发时保留计划单完整信息
|
||||
|
||||
本方案对比两系统在三大模块的数据模型差异,给出MOM侧的具体升级动作。
|
||||
|
||||
---
|
||||
|
||||
## 2. 现状对比总览
|
||||
|
||||
### 2.1 三模块表级覆盖率
|
||||
|
||||
| 模块 | ERP表数量 | MOM已有映射表 | MOM缺失 | 覆盖率 |
|
||||
|------|----------|-------------|---------|--------|
|
||||
| 销售管理 | 10 (含合同/发票) | 3 (间接: workorder+出库) | 销售订单独立存储、合同、发票 | 30% |
|
||||
| 采购管理 | 9 (含发票) | 4 (到货通知+入库+退料) | 采购订单独立存储、发票 | 44% |
|
||||
| 生产计划 | 6 | 2 (workorder+workorder_bom) | 计划单独立存储、物料清单、采购计划 | 33% |
|
||||
|
||||
### 2.2 关键差距
|
||||
|
||||
| 差距项 | 说明 | 影响 |
|
||||
|--------|------|------|
|
||||
| **无销售订单表** | 订单信息仅作为source_code存储在pro_workorder中 | 无法查看订单完整信息(客户/金额/交期/明细) |
|
||||
| **无采购订单表** | 采购单号仅作为po_code存储在wm_arrival_notice中 | 无法追溯采购进度(下单/到货/入库链路) |
|
||||
| **无生产计划单表** | 计划信息合并到pro_workorder | 丢失计划层的BOM版本/关联订单/齐套状态 |
|
||||
| **无计划物料清单(MBOM)** | ERP的BOM计算结果无处存储 | 无法展示按供应方式拆解后的完整用料需求 |
|
||||
| **无采购计划表** | ERP采购计划仅映射到wm_arrival_notice | 丢失计划采购量/已订量/缺口量等跟踪信息 |
|
||||
| **pro_workorder缺字段** | 缺少ERP计划层的关键字段 | 缺少bom_version/bom_desc/sales_user/delivery_date等 |
|
||||
|
||||
---
|
||||
|
||||
## 3. 升级方案
|
||||
|
||||
### 3.1 方案总览
|
||||
|
||||
| 序号 | 升级动作 | 类型 | 优先级 | 说明 |
|
||||
|------|----------|------|--------|------|
|
||||
| A1 | 新建 `erp_sl_order` | 新建表 | P0 | 销售订单表头(接收ERP数据) |
|
||||
| A2 | 新建 `erp_sl_order_line` | 新建表 | P0 | 销售订单明细 |
|
||||
| A3 | 新建 `erp_po_order` | 新建表 | P0 | 采购订单表头(接收ERP数据) |
|
||||
| A4 | 新建 `erp_po_order_line` | 新建表 | P0 | 采购订单明细 |
|
||||
| A5 | 新建 `erp_mp_plan` | 新建表 | P0 | 生产计划单表头(接收ERP数据) |
|
||||
| A6 | 新建 `erp_mp_plan_line` | 新建表 | P0 | 生产计划单明细 |
|
||||
| A7 | 新建 `erp_mp_mbom` | 新建表 | P1 | 计划物料清单表头 |
|
||||
| A8 | 新建 `erp_mp_mbom_line` | 新建表 | P1 | 计划物料清单明细 |
|
||||
| A9 | 新建 `erp_mp_purchase` | 新建表 | P1 | 采购计划单 |
|
||||
| B1 | 修改 `pro_workorder` | ALTER | P0 | 新增ERP计划关联字段 |
|
||||
| B2 | 修改 `wm_item_recpt` | ALTER | P1 | 新增采购订单关联字段 |
|
||||
| B3 | 修改 `wm_arrival_notice` | ALTER | P1 | 增强采购单关联 |
|
||||
|
||||
### 3.2 命名规范
|
||||
|
||||
新建表统一采用 `erp_` 前缀,与MOM已有的ERP同步表保持一致(如 `erp_md_item`、`erp_md_bom_line`),便于识别数据来源:
|
||||
|
||||
| 表前缀 | 含义 | 举例 |
|
||||
|--------|------|------|
|
||||
| `erp_sl_` | 同步自ERP销售模块 | erp_sl_order |
|
||||
| `erp_po_` | 同步自ERP采购模块 | erp_po_order |
|
||||
| `erp_mp_` | 同步自ERP生产计划模块 | erp_mp_plan |
|
||||
| `pro_` | MOM原生生产执行表 | pro_workorder (已有) |
|
||||
| `wm_` | MOM原生仓库管理表 | wm_item_recpt (已有) |
|
||||
|
||||
---
|
||||
|
||||
## 4. 销售模块升级 (P0)
|
||||
|
||||
### 4.1 新建: 销售订单表头 (erp_sl_order)
|
||||
|
||||
> 用途: 接收ERP销售订单审核后的数据,供生产排程和发货查询使用。只存储MOM关心的字段,不含合同/发票等财务信息。
|
||||
|
||||
```sql
|
||||
DROP TABLE IF EXISTS `erp_sl_order`;
|
||||
CREATE TABLE `erp_sl_order` (
|
||||
`order_id` bigint(20) NOT NULL COMMENT '订单ID (同步自ERP)',
|
||||
`tenant_id` varchar(20) DEFAULT NULL COMMENT '租户ID',
|
||||
`order_code` varchar(32) NOT NULL COMMENT '订单编码',
|
||||
`order_name` varchar(100) DEFAULT NULL COMMENT '订单名称',
|
||||
`order_date` date DEFAULT NULL COMMENT '订单日期',
|
||||
`status` varchar(20) DEFAULT 'DRAFT' COMMENT '单据状态(DRAFT/APPROVED/CLOSED)',
|
||||
`business_status` varchar(20) DEFAULT 'NORMAL' COMMENT '业务状态',
|
||||
`order_type` varchar(20) DEFAULT NULL COMMENT '订单类型(销售/备货)',
|
||||
`contract_id` bigint(20) DEFAULT NULL COMMENT '合同ID',
|
||||
`contract_code` varchar(32) DEFAULT NULL COMMENT '合同编码',
|
||||
`client_id` bigint(20) DEFAULT NULL COMMENT '客户ID',
|
||||
`client_code` varchar(32) DEFAULT NULL COMMENT '客户编码',
|
||||
`client_name` varchar(100) DEFAULT NULL COMMENT '客户名称',
|
||||
`sales_user_id` bigint(20) DEFAULT NULL COMMENT '销售员ID',
|
||||
`sales_user_name` varchar(50) DEFAULT NULL COMMENT '销售员名称',
|
||||
`dept_id` bigint(20) DEFAULT NULL COMMENT '部门ID',
|
||||
`dept_name` varchar(50) DEFAULT NULL COMMENT '部门名称',
|
||||
`delivery_date` date DEFAULT NULL COMMENT '交货日期',
|
||||
`delivery_address` varchar(200) DEFAULT NULL COMMENT '收货地址',
|
||||
`total_quantity` decimal(18,4) DEFAULT 0 COMMENT '总数量',
|
||||
`total_amount` decimal(18,2) DEFAULT 0 COMMENT '总金额',
|
||||
`delivered_quantity` decimal(18,4) DEFAULT 0 COMMENT '已发货数量',
|
||||
`delivered_amount` decimal(18,2) DEFAULT 0 COMMENT '已发货金额',
|
||||
`pp_number` varchar(50) DEFAULT NULL COMMENT '跟单编号',
|
||||
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
|
||||
`operator_id` bigint(20) DEFAULT NULL COMMENT '操作员ID',
|
||||
`operator_name` varchar(50) DEFAULT NULL COMMENT '操作员名称',
|
||||
`approver_id` bigint(20) DEFAULT NULL COMMENT '审核员ID',
|
||||
`approver_name` varchar(50) DEFAULT NULL COMMENT '审核员名称',
|
||||
`approve_date` datetime DEFAULT NULL COMMENT '审核日期',
|
||||
`erp_sync_time` datetime DEFAULT NULL COMMENT 'ERP同步时间',
|
||||
`del_flag` char(1) NOT NULL DEFAULT '0' COMMENT '删除标志',
|
||||
`create_by` varchar(64) DEFAULT NULL COMMENT '创建者',
|
||||
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
|
||||
`update_by` varchar(64) DEFAULT NULL COMMENT '更新者',
|
||||
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
|
||||
PRIMARY KEY (`order_id`),
|
||||
UNIQUE KEY `uk_sl_order_code` (`order_code`, `tenant_id`),
|
||||
KEY `idx_sl_order_client` (`client_id`),
|
||||
KEY `idx_sl_order_date` (`delivery_date`),
|
||||
KEY `idx_sl_order_pp` (`pp_number`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='销售订单表头(同步自ERP)';
|
||||
```
|
||||
|
||||
**与ERP字段对照:** 已按《erp数据库设计-数据字典》与 DDL 补齐与 ERP 同名字段,保证 1:1 同步时字段一致。pp_number、erp_sync_time 为 MOM 扩展字段。
|
||||
|
||||
### 4.2 新建: 销售订单明细 (erp_sl_order_line)
|
||||
|
||||
```sql
|
||||
DROP TABLE IF EXISTS `erp_sl_order_line`;
|
||||
CREATE TABLE `erp_sl_order_line` (
|
||||
`line_id` bigint(20) NOT NULL COMMENT '明细ID (同步自ERP)',
|
||||
`order_id` bigint(20) NOT NULL COMMENT '订单ID',
|
||||
`order_code` varchar(32) NOT NULL COMMENT '订单编码',
|
||||
`line_no` int DEFAULT NULL COMMENT '行号',
|
||||
`track_code` varchar(32) DEFAULT NULL COMMENT '跟单编号',
|
||||
`contract_line_id` bigint(20) DEFAULT NULL COMMENT '合同明细ID',
|
||||
`item_id` bigint(20) NOT NULL COMMENT '物料ID',
|
||||
`item_code` varchar(64) DEFAULT NULL COMMENT '物料编码',
|
||||
`item_name` varchar(255) DEFAULT NULL COMMENT '物料名称',
|
||||
`specification` varchar(500) DEFAULT NULL COMMENT '规格型号',
|
||||
`unit_id` bigint(20) DEFAULT NULL COMMENT '计量单位ID',
|
||||
`unit_of_measure` varchar(64) DEFAULT NULL COMMENT '计量单位',
|
||||
`unit_name` varchar(64) DEFAULT NULL COMMENT '单位名称',
|
||||
`quantity` decimal(18,4) NOT NULL DEFAULT 0 COMMENT '订单数量',
|
||||
`unit_price` decimal(18,4) DEFAULT 0 COMMENT '单价',
|
||||
`amount` decimal(18,2) DEFAULT 0 COMMENT '金额',
|
||||
`delivered_qty` decimal(18,4) DEFAULT 0 COMMENT '已发货数量',
|
||||
`quality_req` varchar(200) DEFAULT NULL COMMENT '质量要求',
|
||||
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
|
||||
`del_flag` char(1) NOT NULL DEFAULT '0' COMMENT '删除标志',
|
||||
`tenant_id` varchar(20) DEFAULT NULL COMMENT '租户ID',
|
||||
`create_by` varchar(64) DEFAULT NULL COMMENT '创建者',
|
||||
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
|
||||
`update_by` varchar(64) DEFAULT NULL COMMENT '更新者',
|
||||
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
|
||||
PRIMARY KEY (`line_id`),
|
||||
KEY `idx_sl_order_line_oid` (`order_id`),
|
||||
KEY `idx_sl_order_line_item` (`item_id`),
|
||||
KEY `idx_sl_order_line_track` (`track_code`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='销售订单明细(同步自ERP)';
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 5. 采购模块升级 (P0)
|
||||
|
||||
### 5.1 新建: 采购订单表头 (erp_po_order)
|
||||
|
||||
> 用途: 接收ERP采购订单数据,用于入库时关联溯源、齐套检查时查看采购进度。
|
||||
|
||||
```sql
|
||||
DROP TABLE IF EXISTS `erp_po_order`;
|
||||
CREATE TABLE `erp_po_order` (
|
||||
`order_id` bigint(20) NOT NULL COMMENT '订单ID (同步自ERP)',
|
||||
`tenant_id` varchar(20) DEFAULT NULL COMMENT '租户ID',
|
||||
`order_code` varchar(32) NOT NULL COMMENT '订单编码',
|
||||
`order_date` date DEFAULT NULL COMMENT '订单日期',
|
||||
`status` varchar(20) DEFAULT 'DRAFT' COMMENT '单据状态',
|
||||
`business_status` varchar(20) DEFAULT 'NORMAL' COMMENT '业务状态',
|
||||
`business_type` varchar(20) DEFAULT NULL COMMENT '业务类型',
|
||||
`order_type` varchar(20) DEFAULT NULL COMMENT '单据类型',
|
||||
`material_need` varchar(20) DEFAULT NULL COMMENT '用料需求',
|
||||
`supplier_id` bigint(20) DEFAULT NULL COMMENT '供应商ID (与ERP一致)',
|
||||
`supplier_code` varchar(32) DEFAULT NULL COMMENT '供应商编码',
|
||||
`supplier_name` varchar(100) DEFAULT NULL COMMENT '供应商名称',
|
||||
`dept_id` bigint(20) DEFAULT NULL COMMENT '采购部门ID',
|
||||
`dept_name` varchar(50) DEFAULT NULL COMMENT '采购部门名称',
|
||||
`user_id` bigint(20) DEFAULT NULL COMMENT '采购人员ID',
|
||||
`user_name` varchar(50) DEFAULT NULL COMMENT '采购人员名称',
|
||||
`delivery_date` date DEFAULT NULL COMMENT '到货日期',
|
||||
`contract_no` varchar(50) DEFAULT NULL COMMENT '合同号',
|
||||
`contract_file` varchar(500) DEFAULT NULL COMMENT '合同附件',
|
||||
`total_quantity` decimal(18,4) DEFAULT 0 COMMENT '总数量',
|
||||
`total_amount` decimal(18,2) DEFAULT 0 COMMENT '总金额',
|
||||
`arrived_quantity` decimal(18,4) DEFAULT 0 COMMENT '已到货数量',
|
||||
`plan_code` varchar(32) DEFAULT NULL COMMENT '关联计划单编码',
|
||||
`pp_number` varchar(50) DEFAULT NULL COMMENT '跟单编号',
|
||||
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
|
||||
`operator_id` bigint(20) DEFAULT NULL COMMENT '操作员ID',
|
||||
`operator_name` varchar(50) DEFAULT NULL COMMENT '操作员名称',
|
||||
`approver_id` bigint(20) DEFAULT NULL COMMENT '审核员ID',
|
||||
`approver_name` varchar(50) DEFAULT NULL COMMENT '审核员名称',
|
||||
`approve_date` datetime DEFAULT NULL COMMENT '审核日期',
|
||||
`erp_sync_time` datetime DEFAULT NULL COMMENT 'ERP同步时间',
|
||||
`del_flag` char(1) NOT NULL DEFAULT '0' COMMENT '删除标志',
|
||||
`create_by` varchar(64) DEFAULT NULL COMMENT '创建者',
|
||||
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
|
||||
`update_by` varchar(64) DEFAULT NULL COMMENT '更新者',
|
||||
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
|
||||
PRIMARY KEY (`order_id`),
|
||||
UNIQUE KEY `uk_po_order_code` (`order_code`, `tenant_id`),
|
||||
KEY `idx_po_order_supplier` (`supplier_id`),
|
||||
KEY `idx_po_order_date` (`delivery_date`),
|
||||
KEY `idx_po_order_pp` (`pp_number`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='采购订单表头(同步自ERP)';
|
||||
```
|
||||
|
||||
### 5.2 新建: 采购订单明细 (erp_po_order_line)
|
||||
|
||||
```sql
|
||||
DROP TABLE IF EXISTS `erp_po_order_line`;
|
||||
CREATE TABLE `erp_po_order_line` (
|
||||
`line_id` bigint(20) NOT NULL COMMENT '明细ID (同步自ERP)',
|
||||
`order_id` bigint(20) NOT NULL COMMENT '订单ID',
|
||||
`order_code` varchar(32) NOT NULL COMMENT '订单编码',
|
||||
`line_no` int DEFAULT NULL COMMENT '行号',
|
||||
`track_code` varchar(32) DEFAULT NULL COMMENT '跟单编号',
|
||||
`plan_code` varchar(32) DEFAULT NULL COMMENT '计划单号',
|
||||
`plan_line_id` bigint(20) DEFAULT NULL COMMENT '计划明细ID',
|
||||
`item_id` bigint(20) NOT NULL COMMENT '物料ID',
|
||||
`item_code` varchar(64) DEFAULT NULL COMMENT '物料编码',
|
||||
`item_name` varchar(255) DEFAULT NULL COMMENT '物料名称',
|
||||
`specification` varchar(500) DEFAULT NULL COMMENT '型号规格',
|
||||
`unit_id` bigint(20) DEFAULT NULL COMMENT '计量单位ID',
|
||||
`unit_of_measure` varchar(64) DEFAULT NULL COMMENT '计量单位',
|
||||
`unit_name` varchar(64) DEFAULT NULL COMMENT '单位名称',
|
||||
`need_date` date DEFAULT NULL COMMENT '需求日期',
|
||||
`quantity` decimal(18,4) NOT NULL DEFAULT 0 COMMENT '采购数量',
|
||||
`unit_price` decimal(18,4) DEFAULT 0 COMMENT '采购单价',
|
||||
`amount` decimal(18,2) DEFAULT 0 COMMENT '金额',
|
||||
`arrived_quantity` decimal(18,4) DEFAULT 0 COMMENT '已到货数量',
|
||||
`remark` varchar(500) DEFAULT NULL COMMENT '采购说明',
|
||||
`del_flag` char(1) NOT NULL DEFAULT '0' COMMENT '删除标志',
|
||||
`tenant_id` varchar(20) DEFAULT NULL COMMENT '租户ID',
|
||||
`create_by` varchar(64) DEFAULT NULL COMMENT '创建者',
|
||||
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
|
||||
`update_by` varchar(64) DEFAULT NULL COMMENT '更新者',
|
||||
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
|
||||
PRIMARY KEY (`line_id`),
|
||||
KEY `idx_po_order_line_oid` (`order_id`),
|
||||
KEY `idx_po_order_line_item` (`item_id`),
|
||||
KEY `idx_po_order_line_track` (`track_code`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='采购订单明细(同步自ERP)';
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 6. 生产计划模块升级 (P0)
|
||||
|
||||
### 6.1 新建: 生产计划单表头 (erp_mp_plan)
|
||||
|
||||
> 用途: 接收ERP生产计划单数据,保留计划层的完整信息(BOM版本、关联销售订单、计划数量等),pro_workorder通过source_code关联。
|
||||
|
||||
```sql
|
||||
DROP TABLE IF EXISTS `erp_mp_plan`;
|
||||
CREATE TABLE `erp_mp_plan` (
|
||||
`plan_id` bigint(20) NOT NULL COMMENT '计划ID (同步自ERP)',
|
||||
`tenant_id` varchar(20) DEFAULT NULL COMMENT '租户ID',
|
||||
`plan_code` varchar(32) NOT NULL COMMENT '计划单编码',
|
||||
`plan_date` date DEFAULT NULL COMMENT '计划日期',
|
||||
`status` varchar(20) DEFAULT 'DRAFT' COMMENT '单据状态',
|
||||
`business_status` varchar(20) DEFAULT 'NORMAL' COMMENT '业务状态',
|
||||
`business_type` varchar(20) DEFAULT NULL COMMENT '业务类型',
|
||||
`work_type` int DEFAULT 0 COMMENT '工作类型(0计划单/1零部件计划/2零部件订单)',
|
||||
`sales_order_id` bigint(20) DEFAULT NULL COMMENT '销售订单ID',
|
||||
`sales_order_code` varchar(32) DEFAULT NULL COMMENT '销售订单编码',
|
||||
`sales_user_id` bigint(20) DEFAULT NULL COMMENT '销售员ID',
|
||||
`sales_user_name` varchar(50) DEFAULT NULL COMMENT '销售员名称',
|
||||
`delivery_date` date DEFAULT NULL COMMENT '订单交期',
|
||||
`bom_id` bigint(20) DEFAULT NULL COMMENT 'BOM ID',
|
||||
`bom_version` varchar(20) DEFAULT NULL COMMENT 'BOM版本号',
|
||||
`bom_desc` varchar(200) DEFAULT NULL COMMENT 'BOM版本说明',
|
||||
`total_quantity` decimal(18,4) DEFAULT 0 COMMENT '生产总量',
|
||||
`pp_number` varchar(50) DEFAULT NULL COMMENT '跟单编号',
|
||||
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
|
||||
`operator_id` bigint(20) DEFAULT NULL COMMENT '操作员ID',
|
||||
`operator_name` varchar(50) DEFAULT NULL COMMENT '操作员名称',
|
||||
`approver_id` bigint(20) DEFAULT NULL COMMENT '审核员ID',
|
||||
`approver_name` varchar(50) DEFAULT NULL COMMENT '审核员名称',
|
||||
`approve_date` datetime DEFAULT NULL COMMENT '审核日期',
|
||||
`erp_sync_time` datetime DEFAULT NULL COMMENT 'ERP同步时间',
|
||||
`del_flag` char(1) NOT NULL DEFAULT '0' COMMENT '删除标志',
|
||||
`create_by` varchar(64) DEFAULT NULL COMMENT '创建者',
|
||||
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
|
||||
`update_by` varchar(64) DEFAULT NULL COMMENT '更新者',
|
||||
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
|
||||
PRIMARY KEY (`plan_id`),
|
||||
UNIQUE KEY `uk_mp_plan_code` (`plan_code`, `tenant_id`),
|
||||
KEY `idx_mp_plan_sales` (`sales_order_code`),
|
||||
KEY `idx_mp_plan_date` (`plan_date`),
|
||||
KEY `idx_mp_plan_pp` (`pp_number`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='生产计划单表头(同步自ERP)';
|
||||
```
|
||||
|
||||
### 6.2 新建: 生产计划单明细 (erp_mp_plan_line)
|
||||
|
||||
```sql
|
||||
DROP TABLE IF EXISTS `erp_mp_plan_line`;
|
||||
CREATE TABLE `erp_mp_plan_line` (
|
||||
`line_id` bigint(20) NOT NULL COMMENT '明细ID (同步自ERP)',
|
||||
`plan_id` bigint(20) NOT NULL COMMENT '计划ID',
|
||||
`plan_code` varchar(32) NOT NULL COMMENT '计划单编码',
|
||||
`line_no` int DEFAULT NULL COMMENT '行号',
|
||||
`sales_line_id` bigint(20) DEFAULT NULL COMMENT '销售订单明细ID',
|
||||
`track_code` varchar(32) DEFAULT NULL COMMENT '跟单编号',
|
||||
`item_id` bigint(20) NOT NULL COMMENT '产品物料ID',
|
||||
`item_code` varchar(64) DEFAULT NULL COMMENT '产品物料编码',
|
||||
`item_name` varchar(255) DEFAULT NULL COMMENT '产品物料名称',
|
||||
`specification` varchar(500) DEFAULT NULL COMMENT '规格型号',
|
||||
`unit_id` bigint(20) DEFAULT NULL COMMENT '计量单位ID',
|
||||
`unit_of_measure` varchar(64) DEFAULT NULL COMMENT '计量单位',
|
||||
`unit_name` varchar(64) DEFAULT NULL COMMENT '单位名称',
|
||||
`quantity` decimal(18,4) NOT NULL DEFAULT 0 COMMENT '计划数量',
|
||||
`supply_type` varchar(20) DEFAULT NULL COMMENT '供应方式',
|
||||
`quality_req` varchar(200) DEFAULT NULL COMMENT '质量要求',
|
||||
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
|
||||
`del_flag` char(1) NOT NULL DEFAULT '0' COMMENT '删除标志',
|
||||
`tenant_id` varchar(20) DEFAULT NULL COMMENT '租户ID',
|
||||
`create_by` varchar(64) DEFAULT NULL COMMENT '创建者',
|
||||
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
|
||||
`update_by` varchar(64) DEFAULT NULL COMMENT '更新者',
|
||||
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
|
||||
PRIMARY KEY (`line_id`),
|
||||
KEY `idx_mp_plan_line_pid` (`plan_id`),
|
||||
KEY `idx_mp_plan_line_item` (`item_id`),
|
||||
KEY `idx_mp_plan_line_sales` (`sales_line_id`),
|
||||
KEY `idx_mp_plan_line_track` (`track_code`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='生产计划单明细(同步自ERP)';
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 7. 生产计划模块升级 (P1)
|
||||
|
||||
### 7.1 新建: 计划物料清单表头 (erp_mp_mbom)
|
||||
|
||||
> 用途: 接收ERP BOM计算后的物料需求清单,按供应方式拆解(生产/采购/委外),支撑齐套检查。
|
||||
|
||||
```sql
|
||||
DROP TABLE IF EXISTS `erp_mp_mbom`;
|
||||
CREATE TABLE `erp_mp_mbom` (
|
||||
`mbom_id` bigint(20) NOT NULL COMMENT '物料清单ID (同步自ERP)',
|
||||
`tenant_id` varchar(20) DEFAULT NULL COMMENT '租户ID',
|
||||
`mbom_code` varchar(32) NOT NULL COMMENT '物料清单编码',
|
||||
`mbom_date` date DEFAULT NULL COMMENT '单据日期',
|
||||
`status` varchar(20) DEFAULT 'DRAFT' COMMENT '单据状态',
|
||||
`business_type` varchar(20) DEFAULT NULL COMMENT '业务类型',
|
||||
`issue_status` varchar(20) DEFAULT NULL COMMENT '下发状态',
|
||||
`plan_id` bigint(20) NOT NULL COMMENT '生产计划ID',
|
||||
`plan_code` varchar(32) NOT NULL COMMENT '生产计划编码',
|
||||
`sales_order_id` bigint(20) DEFAULT NULL COMMENT '销售订单ID',
|
||||
`sales_order_code` varchar(32) DEFAULT NULL COMMENT '销售订单编码',
|
||||
`delivery_date` date DEFAULT NULL COMMENT '订单交期',
|
||||
`item_id` bigint(20) NOT NULL COMMENT '产品物料ID',
|
||||
`item_code` varchar(64) DEFAULT NULL COMMENT '产品物料编码',
|
||||
`item_name` varchar(255) DEFAULT NULL COMMENT '产品物料名称',
|
||||
`unit_name` varchar(64) DEFAULT NULL COMMENT '计量单位',
|
||||
`supply_type` varchar(20) DEFAULT NULL COMMENT '供应方式(生产/加工/装配/委外/采购)',
|
||||
`quantity` decimal(18,4) NOT NULL DEFAULT 0 COMMENT '生产数量',
|
||||
`workshop_id` bigint(20) DEFAULT NULL COMMENT '下发车间ID',
|
||||
`workshop_name` varchar(50) DEFAULT NULL COMMENT '下发车间名称',
|
||||
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
|
||||
`operator_id` bigint(20) DEFAULT NULL COMMENT '操作员ID',
|
||||
`operator_name` varchar(50) DEFAULT NULL COMMENT '操作员名称',
|
||||
`approver_id` bigint(20) DEFAULT NULL COMMENT '审核员ID',
|
||||
`approver_name` varchar(50) DEFAULT NULL COMMENT '审核员名称',
|
||||
`approve_date` datetime DEFAULT NULL COMMENT '审核日期',
|
||||
`completed_qty` decimal(18,4) DEFAULT 0 COMMENT '已完成数量(MOM回写)',
|
||||
`workorder_id` bigint(20) DEFAULT NULL COMMENT '关联MOM工单ID(MOM扩展)',
|
||||
`workorder_code` varchar(64) DEFAULT NULL COMMENT '关联MOM工单编码(MOM扩展)',
|
||||
`pp_number` varchar(50) DEFAULT NULL COMMENT '跟单编号(MOM扩展)',
|
||||
`erp_sync_time` datetime DEFAULT NULL COMMENT 'ERP同步时间',
|
||||
`del_flag` char(1) NOT NULL DEFAULT '0' COMMENT '删除标志',
|
||||
`create_by` varchar(64) DEFAULT NULL COMMENT '创建者',
|
||||
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
|
||||
`update_by` varchar(64) DEFAULT NULL COMMENT '更新者',
|
||||
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
|
||||
PRIMARY KEY (`mbom_id`),
|
||||
KEY `idx_mp_mbom_plan` (`plan_id`),
|
||||
KEY `idx_mp_mbom_item` (`item_id`),
|
||||
KEY `idx_mp_mbom_wo` (`workorder_id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='计划物料清单表头(同步自ERP)';
|
||||
```
|
||||
|
||||
### 7.2 新建: 计划物料清单明细 (erp_mp_mbom_line)
|
||||
|
||||
> 与 ERP `erp_mp_mbom_line` 字段一致,保证 1:1 同步。
|
||||
|
||||
```sql
|
||||
DROP TABLE IF EXISTS `erp_mp_mbom_line`;
|
||||
CREATE TABLE `erp_mp_mbom_line` (
|
||||
`line_id` bigint(20) NOT NULL COMMENT '明细ID (同步自ERP)',
|
||||
`mbom_id` bigint(20) NOT NULL COMMENT '物料清单ID',
|
||||
`mbom_code` varchar(32) NOT NULL COMMENT '物料清单编码',
|
||||
`line_no` int DEFAULT NULL COMMENT '行号',
|
||||
`parent_item_id` bigint(20) DEFAULT NULL COMMENT '父级物料ID',
|
||||
`bom_level` int DEFAULT 1 COMMENT 'BOM层级',
|
||||
`item_id` bigint(20) NOT NULL COMMENT '子件物料ID',
|
||||
`item_code` varchar(64) DEFAULT NULL COMMENT '子件物料编码',
|
||||
`item_name` varchar(255) DEFAULT NULL COMMENT '子件物料名称',
|
||||
`specification` varchar(500) DEFAULT NULL COMMENT '型号规格',
|
||||
`unit_name` varchar(64) DEFAULT NULL COMMENT '计量单位',
|
||||
`base_qty` decimal(18,6) DEFAULT 1 COMMENT '基本用量',
|
||||
`quantity` decimal(18,4) NOT NULL DEFAULT 0 COMMENT '需求数量',
|
||||
`loss_rate` decimal(5,2) DEFAULT 0 COMMENT '损耗率(%)',
|
||||
`supply_type` varchar(20) DEFAULT NULL COMMENT '供应方式',
|
||||
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
|
||||
`del_flag` char(1) NOT NULL DEFAULT '0' COMMENT '删除标志',
|
||||
`tenant_id` varchar(20) DEFAULT NULL COMMENT '租户ID',
|
||||
`create_by` varchar(64) DEFAULT NULL COMMENT '创建者',
|
||||
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
|
||||
`update_by` varchar(64) DEFAULT NULL COMMENT '更新者',
|
||||
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
|
||||
PRIMARY KEY (`line_id`),
|
||||
KEY `idx_mp_mbom_line_mbom` (`mbom_id`),
|
||||
KEY `idx_mp_mbom_line_item` (`item_id`),
|
||||
KEY `idx_mp_mbom_line_parent` (`parent_item_id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='计划物料清单明细(同步自ERP)';
|
||||
```
|
||||
|
||||
### 7.3 新建: 采购计划单 (erp_mp_purchase)
|
||||
|
||||
```sql
|
||||
DROP TABLE IF EXISTS `erp_mp_purchase`;
|
||||
CREATE TABLE `erp_mp_purchase` (
|
||||
`purchase_id` bigint(20) NOT NULL COMMENT '采购计划ID (同步自ERP)',
|
||||
`tenant_id` varchar(20) DEFAULT NULL COMMENT '租户ID',
|
||||
`purchase_code` varchar(32) NOT NULL COMMENT '采购计划编码',
|
||||
`purchase_date` date DEFAULT NULL COMMENT '计划日期',
|
||||
`status` varchar(20) DEFAULT 'DRAFT' COMMENT '单据状态',
|
||||
`need_type` int DEFAULT 0 COMMENT '需求方式(0订单用料/1库存备料)',
|
||||
`plan_id` bigint(20) DEFAULT NULL COMMENT '生产计划ID',
|
||||
`plan_code` varchar(32) DEFAULT NULL COMMENT '生产计划编码',
|
||||
`sales_order_id` bigint(20) DEFAULT NULL COMMENT '销售订单ID',
|
||||
`sales_order_code` varchar(32) DEFAULT NULL COMMENT '销售订单编码',
|
||||
`delivery_date` date DEFAULT NULL COMMENT '订单交期',
|
||||
`item_id` bigint(20) NOT NULL COMMENT '物料ID',
|
||||
`item_code` varchar(64) DEFAULT NULL COMMENT '物料编码',
|
||||
`item_name` varchar(255) DEFAULT NULL COMMENT '物料名称',
|
||||
`specification` varchar(500) DEFAULT NULL COMMENT '型号规格',
|
||||
`unit_name` varchar(64) DEFAULT NULL COMMENT '计量单位',
|
||||
`purchase_qty` decimal(18,4) NOT NULL DEFAULT 0 COMMENT '采购数量',
|
||||
`ordered_qty` decimal(18,4) DEFAULT 0 COMMENT '已下单数量',
|
||||
`arrived_qty` decimal(18,4) DEFAULT 0 COMMENT '已到货数量(MOM扩展)',
|
||||
`pp_number` varchar(50) DEFAULT NULL COMMENT '跟单编号(MOM扩展)',
|
||||
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
|
||||
`operator_id` bigint(20) DEFAULT NULL COMMENT '操作员ID',
|
||||
`operator_name` varchar(50) DEFAULT NULL COMMENT '操作员名称',
|
||||
`approver_id` bigint(20) DEFAULT NULL COMMENT '审核员ID',
|
||||
`approver_name` varchar(50) DEFAULT NULL COMMENT '审核员名称',
|
||||
`approve_date` datetime DEFAULT NULL COMMENT '审核日期',
|
||||
`erp_sync_time` datetime DEFAULT NULL COMMENT 'ERP同步时间',
|
||||
`del_flag` char(1) NOT NULL DEFAULT '0' COMMENT '删除标志',
|
||||
`create_by` varchar(64) DEFAULT NULL COMMENT '创建者',
|
||||
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
|
||||
`update_by` varchar(64) DEFAULT NULL COMMENT '更新者',
|
||||
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
|
||||
PRIMARY KEY (`purchase_id`),
|
||||
KEY `idx_mp_purchase_plan` (`plan_id`),
|
||||
KEY `idx_mp_purchase_item` (`item_id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='采购计划单(同步自ERP)';
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 8. 现有表结构升级 (ALTER)
|
||||
|
||||
### 8.1 pro_workorder 新增ERP关联字段
|
||||
|
||||
```sql
|
||||
-- ============================================================
|
||||
-- pro_workorder 新增ERP计划层关联字段
|
||||
-- ============================================================
|
||||
|
||||
-- 关联ERP计划单(保留完整计划信息)
|
||||
CALL proc_add_column_if_not_exists('pro_workorder', 'plan_id', 'bigint(20) DEFAULT NULL COMMENT ''ERP生产计划ID''');
|
||||
CALL proc_add_column_if_not_exists('pro_workorder', 'plan_code', 'varchar(32) DEFAULT NULL COMMENT ''ERP生产计划编码''');
|
||||
|
||||
-- BOM版本信息(ERP选择的具体BOM版本)
|
||||
CALL proc_add_column_if_not_exists('pro_workorder', 'bom_id', 'bigint(20) DEFAULT NULL COMMENT ''BOM ID''');
|
||||
CALL proc_add_column_if_not_exists('pro_workorder', 'bom_version', 'varchar(20) DEFAULT NULL COMMENT ''BOM版本号''');
|
||||
|
||||
-- 销售订单交期(排程核心参数)
|
||||
CALL proc_add_column_if_not_exists('pro_workorder', 'delivery_date', 'date DEFAULT NULL COMMENT ''订单交货日期''');
|
||||
|
||||
-- 销售员(跟单查询)
|
||||
CALL proc_add_column_if_not_exists('pro_workorder', 'sales_user_name', 'varchar(50) DEFAULT NULL COMMENT ''销售员''');
|
||||
|
||||
-- 跟单编号(ERP全流程追溯)
|
||||
CALL proc_add_column_if_not_exists('pro_workorder', 'pp_number', 'varchar(50) DEFAULT NULL COMMENT ''跟单编号(ERP全流程追溯)''');
|
||||
|
||||
-- MBOM关联(对应ERP物料清单哪一条)
|
||||
CALL proc_add_column_if_not_exists('pro_workorder', 'mbom_id', 'bigint(20) DEFAULT NULL COMMENT ''ERP物料清单ID''');
|
||||
CALL proc_add_column_if_not_exists('pro_workorder', 'mbom_code', 'varchar(32) DEFAULT NULL COMMENT ''ERP物料清单编码''');
|
||||
|
||||
-- ERP同步标记
|
||||
CALL proc_add_column_if_not_exists('pro_workorder', 'erp_sync_time', 'datetime DEFAULT NULL COMMENT ''ERP同步时间''');
|
||||
|
||||
-- 创建索引
|
||||
CALL proc_add_index_if_not_exists('pro_workorder', 'idx_wo_plan', 'plan_code');
|
||||
CALL proc_add_index_if_not_exists('pro_workorder', 'idx_wo_pp', 'pp_number');
|
||||
CALL proc_add_index_if_not_exists('pro_workorder', 'idx_wo_delivery', 'delivery_date');
|
||||
```
|
||||
|
||||
### 8.2 wm_item_recpt 新增采购关联字段
|
||||
|
||||
```sql
|
||||
-- ============================================================
|
||||
-- wm_item_recpt 增强采购订单关联
|
||||
-- ============================================================
|
||||
|
||||
-- 采购订单关联(已有po_code字段,补充订单ID和行ID)
|
||||
CALL proc_add_column_if_not_exists('wm_item_recpt', 'po_order_id', 'bigint(20) DEFAULT NULL COMMENT ''采购订单ID''');
|
||||
CALL proc_add_column_if_not_exists('wm_item_recpt', 'po_line_id', 'bigint(20) DEFAULT NULL COMMENT ''采购订单行ID''');
|
||||
|
||||
-- 跟单编号
|
||||
CALL proc_add_column_if_not_exists('wm_item_recpt', 'pp_number', 'varchar(50) DEFAULT NULL COMMENT ''跟单编号''');
|
||||
|
||||
-- ERP同步标记
|
||||
CALL proc_add_column_if_not_exists('wm_item_recpt', 'erp_sync_time', 'datetime DEFAULT NULL COMMENT ''ERP同步时间''');
|
||||
```
|
||||
|
||||
### 8.3 wm_arrival_notice 增强关联
|
||||
|
||||
```sql
|
||||
-- ============================================================
|
||||
-- wm_arrival_notice 增强采购计划关联
|
||||
-- ============================================================
|
||||
|
||||
-- 采购计划关联
|
||||
CALL proc_add_column_if_not_exists('wm_arrival_notice', 'purchase_plan_id', 'bigint(20) DEFAULT NULL COMMENT ''采购计划ID''');
|
||||
CALL proc_add_column_if_not_exists('wm_arrival_notice', 'purchase_plan_code', 'varchar(32) DEFAULT NULL COMMENT ''采购计划编码''');
|
||||
|
||||
-- 跟单编号
|
||||
CALL proc_add_column_if_not_exists('wm_arrival_notice', 'pp_number', 'varchar(50) DEFAULT NULL COMMENT ''跟单编号''');
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 9. 数据同步策略
|
||||
|
||||
### 9.1 同步方向和时机
|
||||
|
||||
| 同步路径 | 方向 | 触发时机 | 说明 |
|
||||
|---------|------|---------|------|
|
||||
| erp_sl_order → erp_sl_order | ERP→MOM | 销售订单审核后 | 只同步已审核订单 |
|
||||
| erp_po_order → erp_po_order | ERP→MOM | 采购订单审核后 | 只同步已审核订单 |
|
||||
| erp_mp_plan → erp_mp_plan | ERP→MOM | 生产计划审核后 | 只同步已审核计划 |
|
||||
| erp_mp_plan → pro_workorder | ERP→MOM | 计划下发时 | BOM计算后按供应方式拆解创建工单 |
|
||||
| erp_mp_mbom → erp_mp_mbom | ERP→MOM | BOM计算完成后 | 保留计划层完整物料需求 |
|
||||
| erp_mp_purchase → erp_mp_purchase | ERP→MOM | 采购计划审核后 | 同步采购需求 |
|
||||
| pro_workorder.status → erp_mp_mbom | MOM→ERP | 工单完工时 | 回写已完成数量 |
|
||||
| wm_item_recpt → erp_po_checkin | MOM→ERP | 入库审核时 | 回写已入库数量 |
|
||||
|
||||
### 9.2 主键策略
|
||||
|
||||
| 策略 | 说明 |
|
||||
|------|------|
|
||||
| **使用ERP主键** | erp_sl/po/mp 新表的主键直接使用ERP侧的ID值(非自增),确保一一对应 |
|
||||
| **编码关联** | pro_workorder 通过 `source_code = plan_code` 关联,不存储ERP主键 |
|
||||
| **同步时间戳** | 所有同步表增加 `erp_sync_time` 字段,用于增量同步判断 |
|
||||
|
||||
### 9.3 状态值映射
|
||||
|
||||
| ERP状态 | MOM存储值 | 说明 |
|
||||
|---------|----------|------|
|
||||
| DRAFT(开立) | DRAFT | 直接存储,不转换 |
|
||||
| APPROVED(审核) | APPROVED | 直接存储 |
|
||||
| CLOSED(关闭) | CLOSED | 直接存储 |
|
||||
| CANCELLED(取消) | CANCELLED | 直接存储 |
|
||||
|
||||
> **原则**: erp_sl/po/mp 表作为ERP数据的镜像,状态值不做转换,保持与ERP一致。仅pro_workorder的状态使用MOM自有体系(PREPARE/CONFIRMED/PRODUCING/FINISHED)。
|
||||
|
||||
---
|
||||
|
||||
## 10. 执行计划
|
||||
|
||||
### 10.1 执行顺序
|
||||
|
||||
```
|
||||
阶段1 (P0 - 基础表创建):
|
||||
├── 1.1 创建 erp_sl_order / erp_sl_order_line
|
||||
├── 1.2 创建 erp_po_order / erp_po_order_line
|
||||
├── 1.3 创建 erp_mp_plan / erp_mp_plan_line
|
||||
└── 1.4 ALTER pro_workorder (新增关联字段)
|
||||
↓
|
||||
阶段2 (P1 - 扩展表创建):
|
||||
├── 2.1 创建 erp_mp_mbom / erp_mp_mbom_line (DDL见 7.1、7.2;字段与ERP数据字典一致)
|
||||
├── 2.2 创建 erp_mp_purchase (DDL见 7.3)
|
||||
├── 2.3 ALTER wm_item_recpt
|
||||
└── 2.4 ALTER wm_arrival_notice
|
||||
↓
|
||||
阶段3 (同步接口开发):
|
||||
├── 3.1 ERP→MOM 数据同步API
|
||||
├── 3.2 MOM→ERP 回写API
|
||||
└── 3.3 增量同步定时任务
|
||||
```
|
||||
|
||||
### 10.2 回滚策略
|
||||
|
||||
所有新建表使用 `DROP TABLE IF EXISTS` 前缀,可安全回滚。ALTER操作使用 `proc_add_column_if_not_exists` 存储过程,具有幂等性。
|
||||
|
||||
### 10.3 验证清单
|
||||
|
||||
| 检查项 | 验证SQL |
|
||||
|--------|---------|
|
||||
| 新表已创建 | `SHOW TABLES LIKE 'erp_%';` |
|
||||
| pro_workorder字段已加 | `SHOW COLUMNS FROM pro_workorder LIKE 'plan_code';` |
|
||||
| 索引已创建 | `SHOW INDEX FROM erp_sl_order;` |
|
||||
| 数据同步测试 | `SELECT COUNT(*) FROM erp_sl_order WHERE erp_sync_time IS NOT NULL;` |
|
||||
|
||||
---
|
||||
|
||||
## 11. 升级前后对比
|
||||
|
||||
### 升级前
|
||||
|
||||
```
|
||||
ERP MOM
|
||||
┌──────────┐ ┌──────────────┐
|
||||
│ sl_order │──(只传编码)──────►│ pro_workorder │
|
||||
│ sl_line │ │ .source_code │
|
||||
└──────────┘ └──────────────┘
|
||||
┌──────────┐ ┌──────────────┐
|
||||
│ po_order │──(只传编码)──────►│wm_arrival_ │
|
||||
│ po_line │ │ notice.po_code│
|
||||
└──────────┘ └──────────────┘
|
||||
┌──────────┐ ┌──────────────┐
|
||||
│ mp_plan │──(转成工单)──────►│ pro_workorder │
|
||||
│ mp_mbom │ │ (丢失计划信息)│
|
||||
└──────────┘ └──────────────┘
|
||||
```
|
||||
|
||||
### 升级后
|
||||
|
||||
```
|
||||
ERP MOM
|
||||
┌──────────┐ ┌───────────┐ ┌──────────────┐
|
||||
│ sl_order │──►│erp_sl_order│──►│ pro_workorder │
|
||||
│ sl_line │ │erp_sl_line │ │ .plan_code │
|
||||
└──────────┘ └───────────┘ │ .pp_number │
|
||||
│ .delivery_date│
|
||||
┌──────────┐ ┌───────────┐ └──────┬───────┘
|
||||
│ po_order │──►│erp_po_order│──►│wm_item_recpt │
|
||||
│ po_line │ │erp_po_line │ │.po_order_id │
|
||||
└──────────┘ └───────────┘ └──────────────┘
|
||||
┌──────────┐ ┌───────────┐ ┌──────────────┐
|
||||
│ mp_plan │──►│erp_mp_plan │──►│ pro_workorder │
|
||||
│ mp_mbom │ │erp_mp_mbom │ │ .plan_code │
|
||||
│ mp_purch │ │erp_mp_purch│ │ .bom_version │
|
||||
└──────────┘ └───────────┘ └──────────────┘
|
||||
```
|
||||
|
||||
**升级收益**: MOM系统获得完整的计划层数据镜像,可实现订单交期可视化、采购进度追踪、计划-执行全链路追溯,同时不破坏MOM原有的生产执行数据结构。
|
||||
|
||||
---
|
||||
|
||||
## 修订历史
|
||||
|
||||
| 版本 | 日期 | 修订内容 | 修订人 |
|
||||
|------|------|----------|--------|
|
||||
| 1.0.0 | 2026-02-06 | 初始版本 | System |
|
||||
| 1.0.1 | 2026-02-06 | 新表前缀由 mom_ 统一改为 erp_,与已有ERP同步表命名一致 | System |
|
||||
| 1.1.0 | 2026-02-07 | 与ERP同名字段补齐:对照《erp数据库设计-数据字典》及 DDL,对 erp_sl_order/line、erp_po_order/line、erp_mp_plan/line、erp_mp_mbom、erp_mp_mbom_line、erp_mp_purchase 补齐ERP中已有字段;采购表统一为 supplier_id/code/name;销售明细 track_code/contract_line_id/unit_id/unit_price/amount/quality_req;补全 erp_mp_mbom_line 的 DDL | System |
|
||||
6646
prd/db/mom系统数据库设计-数据模型.md
Normal file
6646
prd/db/mom系统数据库设计-数据模型.md
Normal file
File diff suppressed because it is too large
Load Diff
BIN
prd/db/mom系统数据库设计.xlsx
Normal file
BIN
prd/db/mom系统数据库设计.xlsx
Normal file
Binary file not shown.
275
prd/db/sync_data_model_from_excel.py
Normal file
275
prd/db/sync_data_model_from_excel.py
Normal file
@@ -0,0 +1,275 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
"""
|
||||
从 mom系统数据库设计.xlsx 读取表与字段定义,更新 mom系统数据库设计-数据模型.md。
|
||||
保留 md 的 1-3 节(概述、模块清单、公共字段)和 14 节及以后(枚举、ER、附录等),
|
||||
用 Excel 内容更新 2.2 表清单总览 和 4-13 节各模块表结构。
|
||||
"""
|
||||
|
||||
import re
|
||||
from pathlib import Path
|
||||
|
||||
try:
|
||||
import openpyxl
|
||||
except ImportError:
|
||||
raise SystemExit("请安装 openpyxl: pip install openpyxl")
|
||||
|
||||
# 路径
|
||||
BASE = Path(__file__).resolve().parent
|
||||
XLSX_PATH = BASE / "mom系统数据库设计.xlsx"
|
||||
MD_PATH = BASE / "mom系统数据库设计-数据模型.md"
|
||||
|
||||
# Excel 表清单中的「模块」-> 文档中的 (节号, 模块标题, 表前缀)
|
||||
# 节号与原文一致: 4基础数据 5生产 6质量 7设备 8仓库 9排班 10IOT 11工具 12系统 13打印
|
||||
MODULE_DOC = {
|
||||
"主数据管理": (4, "基础数据模块", "md_*"),
|
||||
"生产管理": (5, "生产管理模块", "pro_*"),
|
||||
"质量管理": (6, "质量管理模块", "qc_*"),
|
||||
"设备管理": (7, "设备管理模块", "dv_*"),
|
||||
"仓储管理": (8, "仓库管理模块", "wm_*"),
|
||||
"排班管理": (9, "排班管理模块", "cal_*"),
|
||||
"IoT数据采集": (10, "IoT数据采集模块", "iot_*"),
|
||||
"工装夹具管理": (11, "工具管理模块", "tm_*"),
|
||||
"系统管理": (12, "系统管理模块", "sys_*"),
|
||||
"打印机配置": (13, "打印管理模块", "print_*"),
|
||||
}
|
||||
|
||||
# Excel 工作表名 -> 表清单中的模块名
|
||||
SHEET_TO_MODULE = {
|
||||
"MD主数据": "主数据管理",
|
||||
"PRO生产管理": "生产管理",
|
||||
"CAL排班管理": "排班管理",
|
||||
"QC质量管理": "质量管理",
|
||||
"WM仓储管理": "仓储管理",
|
||||
"DV设备管理": "设备管理",
|
||||
"TM工装夹具管理": "工装夹具管理",
|
||||
"MO模具管理": None,
|
||||
"SYS系统管理": "系统管理",
|
||||
"PRINT打印管理": "打印机配置",
|
||||
"IOT数采": "IoT数据采集",
|
||||
}
|
||||
|
||||
|
||||
def load_table_list(wb):
|
||||
"""从「表清单」sheet 加载 (表名, 模块, 表描述, 备注),并建 (模块, 表描述)->表名 映射"""
|
||||
ws = wb["表清单"]
|
||||
rows = list(ws.iter_rows(min_row=2, values_only=True))
|
||||
table_list = []
|
||||
desc_to_name = {}
|
||||
for row in rows:
|
||||
if not row or not row[1]:
|
||||
continue
|
||||
name = (row[1] or "").strip()
|
||||
module = (row[2] or "").strip()
|
||||
desc = (row[3] or "").strip()
|
||||
remark = (row[4] or "").strip() if len(row) > 4 else ""
|
||||
if not name:
|
||||
continue
|
||||
table_list.append((name, module, desc, remark))
|
||||
if module and desc:
|
||||
key = (module, desc)
|
||||
if key not in desc_to_name:
|
||||
desc_to_name[key] = name
|
||||
return table_list, desc_to_name
|
||||
|
||||
|
||||
def parse_sheet_tables(ws, module_name, desc_to_name):
|
||||
"""
|
||||
解析一个 sheet 中所有表块。
|
||||
每个表块:一行 表名称 + 一行 中文名称 + 一行 列序号|列名|列中文名|列类型|列设置|备注 + 数据行。
|
||||
返回 [(table_name, cn_name, remark, columns), ...]
|
||||
"""
|
||||
rows = list(ws.iter_rows(values_only=True))
|
||||
result = []
|
||||
i = 0
|
||||
while i < len(rows):
|
||||
row = list(rows[i]) if rows[i] else []
|
||||
# 找「表名称」在第二列
|
||||
if len(row) >= 3 and row[1] == "表名称" and row[2]:
|
||||
excel_table_name = (row[2] or "").strip()
|
||||
cn_name = ""
|
||||
if i + 1 < len(rows):
|
||||
next_row = list(rows[i + 1]) if rows[i + 1] else []
|
||||
if len(next_row) >= 3 and next_row[1] == "中文名称":
|
||||
cn_name = (next_row[2] or "").strip()
|
||||
# 表名解析:优先用 表清单 中 (模块, 中文名称) 对应的表名
|
||||
if module_name and cn_name and (module_name, cn_name) in desc_to_name:
|
||||
table_name = desc_to_name[(module_name, cn_name)]
|
||||
else:
|
||||
table_name = excel_table_name if excel_table_name and len(excel_table_name) > 2 else (cn_name or excel_table_name)
|
||||
# 列头在 i+2
|
||||
col_start = i + 2
|
||||
if col_start >= len(rows):
|
||||
i += 1
|
||||
continue
|
||||
header = list(rows[col_start]) if rows[col_start] else []
|
||||
if len(header) < 5 or header[1] != "列序号":
|
||||
i += 1
|
||||
continue
|
||||
columns = []
|
||||
for j in range(col_start + 1, len(rows)):
|
||||
r = list(rows[j]) if rows[j] else []
|
||||
if len(r) < 4:
|
||||
break
|
||||
col_no, col_name, col_cn, col_type, col_setting, col_remark = (
|
||||
r[1], r[2] if len(r) > 2 else "", r[3] if len(r) > 3 else "",
|
||||
r[4] if len(r) > 4 else "", r[5] if len(r) > 5 else "", r[6] if len(r) > 6 else ""
|
||||
)
|
||||
if col_name is None or not str(col_name).strip():
|
||||
break
|
||||
col_name = str(col_name).strip()
|
||||
col_type = (col_type or "").strip()
|
||||
nullable = "N" if col_setting and "not null" in str(col_setting).lower() else "Y"
|
||||
desc = (col_cn or "").strip()
|
||||
if col_remark and str(col_remark).strip():
|
||||
desc = desc + " " + str(col_remark).strip()
|
||||
columns.append({
|
||||
"name": col_name.lower(),
|
||||
"type": col_type or "-",
|
||||
"nullable": nullable,
|
||||
"desc": desc or "-",
|
||||
})
|
||||
result.append((table_name, cn_name, "", columns))
|
||||
i = col_start + len(columns) + 1
|
||||
continue
|
||||
i += 1
|
||||
return result
|
||||
|
||||
|
||||
def collect_all_tables(wb, table_list, desc_to_name):
|
||||
"""从各数据 sheet 收集表,按模块归类。返回 { 模块名: [(表名, 中文名, 备注, columns), ...] }"""
|
||||
by_module = {}
|
||||
for sheet_name in wb.sheetnames:
|
||||
if sheet_name == "表清单":
|
||||
continue
|
||||
module_name = SHEET_TO_MODULE.get(sheet_name)
|
||||
if not module_name or module_name not in MODULE_DOC:
|
||||
continue
|
||||
ws = wb[sheet_name]
|
||||
tables = parse_sheet_tables(ws, module_name, desc_to_name)
|
||||
for t in tables:
|
||||
by_module.setdefault(module_name, []).append(t)
|
||||
return by_module
|
||||
|
||||
|
||||
def table_name_to_lower(name):
|
||||
"""将 Excel 表名转为小写(如 WM_WAREHOUSE -> wm_warehouse)"""
|
||||
if not name:
|
||||
return name
|
||||
return name.strip().lower()
|
||||
|
||||
|
||||
def gen_table_list_md(table_list):
|
||||
"""生成 2.2 表清单总览 markdown"""
|
||||
module_order = list(MODULE_DOC.keys())
|
||||
# 模块简写(用于表格第三列)
|
||||
module_short = {
|
||||
"主数据管理": "基础数据",
|
||||
"生产管理": "生产管理",
|
||||
"质量管理": "质量管理",
|
||||
"设备管理": "设备管理",
|
||||
"仓储管理": "仓库管理",
|
||||
"排班管理": "排班管理",
|
||||
"IoT数据采集": "IoT数据采集",
|
||||
"工装夹具管理": "工具管理",
|
||||
"系统管理": "系统管理",
|
||||
"打印机配置": "打印管理",
|
||||
}
|
||||
lines = [
|
||||
"### 2.2 表清单总览",
|
||||
"",
|
||||
"| 序号 | 表名 | 中文名 | 模块 |",
|
||||
"|------|------|--------|------|",
|
||||
]
|
||||
for idx, (name, module, desc, _) in enumerate(table_list, 1):
|
||||
short = module_short.get(module, module)
|
||||
cn_display = (desc or "").strip() or name # 表描述为空时用表名
|
||||
lines.append(f"| {idx} | {table_name_to_lower(name)} | {cn_display} | {short} |")
|
||||
lines.append("")
|
||||
return "\n".join(lines)
|
||||
|
||||
|
||||
def gen_module_section(module_name, tables, section_num):
|
||||
"""生成一个模块的 markdown(## 4. 基础数据模块 及下属 ### 4.x 表)"""
|
||||
if not tables:
|
||||
return ""
|
||||
title = MODULE_DOC[module_name][1]
|
||||
lines = [
|
||||
f"## {section_num}. {title}",
|
||||
"",
|
||||
]
|
||||
for idx, (table_name, cn_name, remark, columns) in enumerate(tables, 1):
|
||||
tname_lower = table_name_to_lower(table_name)
|
||||
lines.append(f"### {section_num}.{idx} {cn_name or table_name} ({tname_lower})")
|
||||
lines.append("")
|
||||
if remark:
|
||||
lines.append(f"> {remark}")
|
||||
lines.append("")
|
||||
lines.append("| 字段名 | 类型 | 允许空 | 说明 |")
|
||||
lines.append("|--------|------|--------|------|")
|
||||
for col in columns:
|
||||
lines.append(f"| {col['name']} | {col['type']} | {col['nullable']} | {col['desc']} |")
|
||||
lines.append("")
|
||||
lines.append("---")
|
||||
lines.append("")
|
||||
return "\n".join(lines)
|
||||
|
||||
|
||||
def main():
|
||||
if not XLSX_PATH.exists():
|
||||
raise SystemExit(f"Excel 文件不存在: {XLSX_PATH}")
|
||||
if not MD_PATH.exists():
|
||||
raise SystemExit(f"Markdown 文件不存在: {MD_PATH}")
|
||||
|
||||
wb = openpyxl.load_workbook(XLSX_PATH, read_only=True, data_only=True)
|
||||
table_list, desc_to_name = load_table_list(wb)
|
||||
by_module = collect_all_tables(wb, table_list, desc_to_name)
|
||||
wb.close()
|
||||
|
||||
# 生成 2.2 表清单
|
||||
table_list_md = gen_table_list_md(table_list)
|
||||
|
||||
# 生成 4-12 节(按 MODULE_DOC 顺序)
|
||||
module_sections = []
|
||||
for mod_name in MODULE_DOC:
|
||||
if mod_name not in by_module:
|
||||
continue
|
||||
num, _, _ = MODULE_DOC[mod_name]
|
||||
module_sections.append(gen_module_section(mod_name, by_module[mod_name], num))
|
||||
new_content_4_13 = "\n".join(module_sections)
|
||||
|
||||
# 读取现有 md
|
||||
md_text = MD_PATH.read_text(encoding="utf-8")
|
||||
|
||||
# 替换 2.2 表清单总览:从 ### 2.2 表清单总览 到下一个 ## 之前
|
||||
def replace_2_2(content):
|
||||
start = content.find("### 2.2 表清单总览")
|
||||
if start == -1:
|
||||
return content
|
||||
end = content.find("\n## ", start + 1)
|
||||
if end == -1:
|
||||
end = len(content)
|
||||
return content[:start] + table_list_md.rstrip() + "\n\n" + content[end:]
|
||||
|
||||
md_text = replace_2_2(md_text)
|
||||
|
||||
# 替换 ## 4. ... 到 ## 14. 之前
|
||||
start_marker = "## 4. 基础数据模块"
|
||||
end_marker = "\n## 14. 枚举值定义"
|
||||
start = md_text.find(start_marker)
|
||||
end = md_text.find(end_marker)
|
||||
if start == -1:
|
||||
raise SystemExit("未找到「## 4. 基础数据模块」")
|
||||
if end == -1:
|
||||
end = len(md_text)
|
||||
md_text = md_text[:start] + new_content_4_13.rstrip() + "\n\n" + md_text[end:]
|
||||
|
||||
MD_PATH.write_text(md_text, encoding="utf-8")
|
||||
print(f"已更新: {MD_PATH}")
|
||||
print(f" - 表清单: {len(table_list)} 张表")
|
||||
for mod_name, tbls in by_module.items():
|
||||
print(f" - {mod_name}: {len(tbls)} 张表")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
200
prd/db/sync_data_model_from_sql.py
Normal file
200
prd/db/sync_data_model_from_sql.py
Normal file
@@ -0,0 +1,200 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
"""
|
||||
从 mom-db-260206.sql 解析 CREATE TABLE 定义,更新 mom系统数据库设计-数据模型.md。
|
||||
用实际 DDL 中的表、字段、类型、允许空、注释 覆盖文档中的 2.2 表清单 和 4-13 节表结构。
|
||||
"""
|
||||
|
||||
import re
|
||||
from pathlib import Path
|
||||
from collections import OrderedDict
|
||||
|
||||
BASE = Path(__file__).resolve().parent
|
||||
SQL_PATH = BASE / "mom-db-260206.sql"
|
||||
MD_PATH = BASE / "mom系统数据库设计-数据模型.md"
|
||||
|
||||
# 表前缀 -> (节号, 模块标题),仅 4-13 与文档一致,erp_/mo_ 等归入“其他”不单独成节
|
||||
PREFIX_TO_MODULE = [
|
||||
("md_", 4, "基础数据模块"),
|
||||
("pro_", 5, "生产管理模块"),
|
||||
("qc_", 6, "质量管理模块"),
|
||||
("dv_", 7, "设备管理模块"),
|
||||
("wm_", 8, "仓库管理模块"),
|
||||
("cal_", 9, "排班管理模块"),
|
||||
("iot_", 10, "IoT数据采集模块"),
|
||||
("tm_", 11, "工具管理模块"),
|
||||
("sys_", 12, "系统管理模块"),
|
||||
("print_", 13, "打印管理模块"),
|
||||
("erp_", None, None),
|
||||
("mo_", None, None),
|
||||
("gen_", None, None),
|
||||
("report_", None, None),
|
||||
]
|
||||
|
||||
def table_module(table_name):
|
||||
"""返回 (节号, 模块标题) 或 (None, None)"""
|
||||
t = table_name.lower()
|
||||
for prefix, num, title in PREFIX_TO_MODULE:
|
||||
if num is not None and t.startswith(prefix):
|
||||
return (num, title)
|
||||
return (None, None)
|
||||
|
||||
|
||||
def parse_sql(path):
|
||||
"""解析 SQL 文件,返回 [(table_name, table_comment, columns), ...]."""
|
||||
text = path.read_text(encoding="utf-8")
|
||||
tables = []
|
||||
i = 0
|
||||
while True:
|
||||
i = text.find("CREATE TABLE ", i)
|
||||
if i == -1:
|
||||
break
|
||||
# 表名: CREATE TABLE `name` (
|
||||
name_m = re.match(r"CREATE\s+TABLE\s+`([^`]+)`\s*\(", text[i:], re.IGNORECASE)
|
||||
if not name_m:
|
||||
i += 1
|
||||
continue
|
||||
name = name_m.group(1).strip()
|
||||
paren_start = i + name_m.end() - 1 # position of '('
|
||||
# 找匹配的 ')'
|
||||
depth = 1
|
||||
pos = paren_start + 1
|
||||
while pos < len(text) and depth > 0:
|
||||
if text[pos] == "(":
|
||||
depth += 1
|
||||
elif text[pos] == ")":
|
||||
depth -= 1
|
||||
pos += 1
|
||||
body = text[paren_start + 1 : pos - 1]
|
||||
# 表注释: ) ENGINE=... COMMENT='...'
|
||||
rest = text[pos - 1 : pos + 200]
|
||||
comment_m = re.search(r"COMMENT\s*=\s*'([^']*)'", rest)
|
||||
table_comment = comment_m.group(1).strip() if comment_m else ""
|
||||
columns = parse_columns(body)
|
||||
tables.append((name, table_comment, columns))
|
||||
i = pos
|
||||
return tables
|
||||
|
||||
|
||||
def parse_columns(body):
|
||||
"""从 CREATE TABLE 体解析列: `name` type NOT NULL ... COMMENT '...', 跳过 PRIMARY KEY/KEY/UNIQUE."""
|
||||
lines = [ln.strip() for ln in body.split("\n") if ln.strip()]
|
||||
cols = []
|
||||
for line in lines:
|
||||
if line.startswith("PRIMARY KEY") or line.startswith("KEY ") or line.startswith("UNIQUE KEY"):
|
||||
continue
|
||||
if not line.startswith("`"):
|
||||
continue
|
||||
# 列行: `col_name` type [NOT NULL] [NULL] [AUTO_INCREMENT] [DEFAULT ...] [COMMENT '...'],
|
||||
match = re.match(r"`([^`]+)`\s+([a-z]+(?:\([^)]+\))?)\s*(NOT NULL|NULL)?", line, re.IGNORECASE)
|
||||
if not match:
|
||||
continue
|
||||
col_name = match.group(1)
|
||||
col_type = match.group(2)
|
||||
not_null = match.group(3)
|
||||
nullable = "N" if (not_null and not_null.upper() == "NOT NULL") else "Y"
|
||||
# COMMENT: 找 COMMENT '...',注意可能 '' 转义
|
||||
comment_match = re.search(r"COMMENT\s+'((?:[^']|'')*)'", line)
|
||||
comment = comment_match.group(1).replace("''", "'").strip() if comment_match else "-"
|
||||
cols.append({"name": col_name, "type": col_type, "nullable": nullable, "comment": comment or "-"})
|
||||
return cols
|
||||
|
||||
|
||||
def build_table_list_and_sections(tables):
|
||||
"""按模块分组,生成 2.2 表清单和 4-13 节内容。仅包含 4-13 模块表;其他表(erp_/mo_/gen_ 等)仍入表清单模块「其他」."""
|
||||
by_module = OrderedDict()
|
||||
table_list = []
|
||||
for name, comment, columns in tables:
|
||||
num, title = table_module(name)
|
||||
if num is not None:
|
||||
by_module.setdefault((num, title), []).append((name, comment, columns))
|
||||
table_list.append((name, comment, num, title))
|
||||
else:
|
||||
if name.startswith(("gen_", "report_", "ureport_", "test_", "db_test")):
|
||||
continue
|
||||
table_list.append((name, comment, 99, "其他"))
|
||||
table_list.sort(key=lambda x: (x[2], x[0]))
|
||||
return table_list, by_module
|
||||
|
||||
|
||||
def gen_table_list_md(table_list):
|
||||
"""生成 2.2 表清单总览 markdown."""
|
||||
module_short = {
|
||||
4: "基础数据", 5: "生产管理", 6: "质量管理", 7: "设备管理", 8: "仓库管理",
|
||||
9: "排班管理", 10: "IoT数据采集", 11: "工具管理", 12: "系统管理", 13: "打印管理",
|
||||
99: "其他",
|
||||
}
|
||||
lines = ["### 2.2 表清单总览", "", "| 序号 | 表名 | 中文名 | 模块 |", "|------|------|--------|------|"]
|
||||
for idx, (name, comment, num, title) in enumerate(table_list, 1):
|
||||
short = module_short.get(num, title or "其他")
|
||||
cn = comment or name
|
||||
lines.append(f"| {idx} | {name} | {cn} | {short} |")
|
||||
lines.append("")
|
||||
return "\n".join(lines)
|
||||
|
||||
|
||||
def gen_module_section(module_num, title, tables):
|
||||
"""生成一个模块的 markdown."""
|
||||
lines = [f"## {module_num}. {title}", ""]
|
||||
for idx, (name, comment, columns) in enumerate(tables, 1):
|
||||
lines.append(f"### {module_num}.{idx} {comment or name} ({name})")
|
||||
lines.append("")
|
||||
lines.append("| 字段名 | 类型 | 允许空 | 说明 |")
|
||||
lines.append("|--------|------|--------|------|")
|
||||
for col in columns:
|
||||
lines.append(f"| {col['name']} | {col['type']} | {col['nullable']} | {col['comment']} |")
|
||||
lines.append("")
|
||||
lines.append("---")
|
||||
lines.append("")
|
||||
return "\n".join(lines)
|
||||
|
||||
|
||||
def main():
|
||||
if not SQL_PATH.exists():
|
||||
raise SystemExit(f"SQL 文件不存在: {SQL_PATH}")
|
||||
if not MD_PATH.exists():
|
||||
raise SystemExit(f"Markdown 文件不存在: {MD_PATH}")
|
||||
|
||||
tables = parse_sql(SQL_PATH)
|
||||
table_list, by_module = build_table_list_and_sections(tables)
|
||||
|
||||
table_list_md = gen_table_list_md(table_list)
|
||||
|
||||
section_parts = []
|
||||
for (num, title), tbls in sorted(by_module.items(), key=lambda x: x[0][0]):
|
||||
section_parts.append(gen_module_section(num, title, tbls))
|
||||
|
||||
new_content_4_13 = "\n".join(section_parts)
|
||||
|
||||
md_text = MD_PATH.read_text(encoding="utf-8")
|
||||
|
||||
# 替换 2.2 表清单总览
|
||||
start_22 = md_text.find("### 2.2 表清单总览")
|
||||
if start_22 != -1:
|
||||
end_22 = md_text.find("\n## ", start_22 + 1)
|
||||
if end_22 == -1:
|
||||
end_22 = len(md_text)
|
||||
md_text = md_text[:start_22] + table_list_md.rstrip() + "\n\n" + md_text[end_22:]
|
||||
|
||||
# 替换 ## 4. 基础数据模块 到 ## 14. 枚举值定义 之间的内容
|
||||
# 若新增了 14 ERP、15 模具,则替换到 “## 15. 枚举值定义” 或原 “## 14. 枚举值定义” 前
|
||||
start_marker = "## 4. 基础数据模块"
|
||||
end_marker = "\n## 14. 枚举值定义"
|
||||
start = md_text.find(start_marker)
|
||||
end = md_text.find(end_marker)
|
||||
if start == -1:
|
||||
raise SystemExit("未找到「## 4. 基础数据模块」")
|
||||
if end == -1:
|
||||
end = len(md_text)
|
||||
md_text = md_text[:start] + new_content_4_13.rstrip() + "\n\n" + md_text[end:]
|
||||
|
||||
MD_PATH.write_text(md_text, encoding="utf-8")
|
||||
print(f"已更新: {MD_PATH}")
|
||||
print(f" - 解析表数: {len(tables)}")
|
||||
print(f" - 表清单: {len(table_list)} 张")
|
||||
for (num, title), tbls in sorted(by_module.items(), key=lambda x: x[0][0]):
|
||||
print(f" - {num}. {title}: {len(tbls)} 张表")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user