Files
klp-oa/docs/purchase-plan-ddl.sql
2026-06-27 10:40:54 +08:00

188 lines
14 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters

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

-- 采购计划 (erp_purchase_plan) 相关 DDL
-- 在主库 jdbc:mysql://140.143.206.120:13306/klp-oa-test 上执行
-- 1. 采购计划头
CREATE TABLE IF NOT EXISTS `erp_purchase_plan` (
`plan_id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '计划ID',
`plan_no` VARCHAR(64) NOT NULL COMMENT '采购计划号',
`plan_status` CHAR(1) NOT NULL DEFAULT '0' COMMENT '计划状态: 0-进行中 1-已完成归档',
`audit_status` CHAR(1) NOT NULL DEFAULT '0' COMMENT '审核状态: 0-待审核 1-通过 2-驳回',
`audit_opinion` VARCHAR(512) DEFAULT NULL COMMENT '申请/审核意见',
`auditor` VARCHAR(64) DEFAULT NULL COMMENT '审核人',
`audit_time` DATETIME DEFAULT NULL COMMENT '审核时间',
`supplier` VARCHAR(128) DEFAULT NULL COMMENT '供货商',
`purchase_date` DATE DEFAULT NULL COMMENT '采购日期',
`plan_weight` DECIMAL(14,3) NOT NULL DEFAULT 0 COMMENT '计划总重量(T)',
`arrived_weight` DECIMAL(14,3) NOT NULL DEFAULT 0 COMMENT '已到货重量(T)',
`del_flag` CHAR(1) NOT NULL DEFAULT '0' COMMENT '删除标志: 0-存在 2-删除',
`create_by` VARCHAR(64) DEFAULT NULL,
`create_time` DATETIME DEFAULT NULL,
`update_by` VARCHAR(64) DEFAULT NULL,
`update_time` DATETIME DEFAULT NULL,
`remark` VARCHAR(512) DEFAULT NULL COMMENT '备注',
PRIMARY KEY (`plan_id`),
UNIQUE KEY `uk_plan_no` (`plan_no`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='采购计划头';
-- 2. 采购计划明细(多规格行,字段对齐 crm_order_item
CREATE TABLE IF NOT EXISTS `erp_purchase_plan_item` (
`item_id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '明细ID',
`plan_id` BIGINT NOT NULL COMMENT '关联计划ID',
`product_type` VARCHAR(64) DEFAULT NULL COMMENT '产品(如热轧卷板)',
`material` VARCHAR(64) DEFAULT NULL COMMENT '材质',
`grade` VARCHAR(64) DEFAULT NULL COMMENT '牌号',
`coil_no` VARCHAR(64) DEFAULT NULL COMMENT '卷号',
`width` VARCHAR(64) DEFAULT NULL COMMENT '宽度(mm可为区间文本对齐 crm_order_item)',
`thickness` VARCHAR(64) DEFAULT NULL COMMENT '厚度(mm可为区间文本)',
`width_tolerance` VARCHAR(64) DEFAULT '0' COMMENT '宽度公差(自由文本)',
`thickness_tolerance` VARCHAR(64) DEFAULT '0' COMMENT '厚度公差(自由文本)',
`weight` DECIMAL(14,3) DEFAULT NULL COMMENT '重量(T)',
`quantity` INT DEFAULT NULL COMMENT '数量(件/卷数,来自合同 product_num)',
`arrived_weight` DECIMAL(14,3) NOT NULL DEFAULT 0 COMMENT '已到货重量(T)由到货Excel按牌号+规格累加',
`item_status` CHAR(1) NOT NULL DEFAULT '0' COMMENT '到货状态: 0-未到货 1-部分到货 2-已到货',
`supplier` VARCHAR(128) DEFAULT NULL COMMENT '供货商',
`del_flag` CHAR(1) NOT NULL DEFAULT '0' COMMENT '删除标志',
`create_by` VARCHAR(64) DEFAULT NULL,
`create_time` DATETIME DEFAULT NULL,
`update_by` VARCHAR(64) DEFAULT NULL,
`update_time` DATETIME DEFAULT NULL,
`remark` VARCHAR(512) DEFAULT NULL,
PRIMARY KEY (`item_id`),
KEY `idx_plan_id` (`plan_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='采购计划明细';
-- 3. 计划↔销售合同(crm_order) 中间表(多对多,挂合同头)
CREATE TABLE IF NOT EXISTS `erp_purchase_plan_contract_rel` (
`rel_id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '关系ID',
`plan_id` BIGINT NOT NULL COMMENT '采购计划ID',
`order_id` BIGINT NOT NULL COMMENT '销售合同ID(crm_order.order_id)',
`del_flag` CHAR(1) NOT NULL DEFAULT '0' COMMENT '删除标志',
`create_by` VARCHAR(64) DEFAULT NULL,
`create_time` DATETIME DEFAULT NULL,
`update_by` VARCHAR(64) DEFAULT NULL,
`update_time` DATETIME DEFAULT NULL,
`remark` VARCHAR(255) DEFAULT NULL,
PRIMARY KEY (`rel_id`),
KEY `idx_plan_id` (`plan_id`),
KEY `idx_order_id` (`order_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='采购计划-销售合同关联表';
-- 4. 到货明细(对应上传的到货 Excel一行一卷独立于 WMS
CREATE TABLE IF NOT EXISTS `erp_purchase_plan_delivery` (
`delivery_id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '到货明细ID',
`plan_id` BIGINT NOT NULL COMMENT '关联计划ID',
`arrival_date` DATE DEFAULT NULL COMMENT '日期',
`grade` VARCHAR(64) DEFAULT NULL COMMENT '牌号',
`spec` VARCHAR(64) DEFAULT NULL COMMENT '规格(厚×宽)',
`coil_no` VARCHAR(64) DEFAULT NULL COMMENT '卷号',
`coil_weight` DECIMAL(14,3) DEFAULT NULL COMMENT '单卷重量(T)',
`truck_no` VARCHAR(64) DEFAULT NULL COMMENT '车号',
`truck_weight` DECIMAL(14,3) DEFAULT NULL COMMENT '整车数量(T)',
`piece_count` INT DEFAULT NULL COMMENT '件数',
`sales_code` VARCHAR(64) DEFAULT NULL COMMENT '销售代码',
`arrival_station` VARCHAR(64) DEFAULT NULL COMMENT '钢厂到站',
`del_flag` CHAR(1) NOT NULL DEFAULT '0' COMMENT '删除标志',
`create_by` VARCHAR(64) DEFAULT NULL,
`create_time` DATETIME DEFAULT NULL,
`update_by` VARCHAR(64) DEFAULT NULL,
`update_time` DATETIME DEFAULT NULL,
`remark` VARCHAR(512) DEFAULT NULL,
PRIMARY KEY (`delivery_id`),
KEY `idx_plan_id` (`plan_id`),
KEY `idx_coil_no` (`coil_no`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='采购计划到货明细';
-- 5. 到货上传批次(每上传一份到货表格记一条,便于随时回看每一次上传)
CREATE TABLE IF NOT EXISTS `erp_purchase_plan_delivery_batch` (
`batch_id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '批次ID',
`plan_id` BIGINT NOT NULL COMMENT '关联计划ID',
`file_name` VARCHAR(255) DEFAULT NULL COMMENT '文件名',
`row_count` INT DEFAULT 0 COMMENT '本次到货行数',
`matched_count` INT DEFAULT 0 COMMENT '本次匹配上明细卷号的卷数',
`arrived_percent` DECIMAL(6,2) DEFAULT 0 COMMENT '上传后到货百分比快照',
`del_flag` CHAR(1) NOT NULL DEFAULT '0' COMMENT '删除标志',
`create_by` VARCHAR(64) DEFAULT NULL,
`create_time` DATETIME DEFAULT NULL,
`update_by` VARCHAR(64) DEFAULT NULL,
`update_time` DATETIME DEFAULT NULL,
`remark` VARCHAR(512) DEFAULT NULL,
PRIMARY KEY (`batch_id`),
KEY `idx_plan_id` (`plan_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='采购计划到货上传批次';
-- 6. 供应商往来流水台账
CREATE TABLE IF NOT EXISTS `erp_supplier_transaction` (
`txn_id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '往来流水ID',
`supplier_id` BIGINT NOT NULL COMMENT '关联供应商ID',
`txn_date` DATE DEFAULT NULL COMMENT '发生日期',
`txn_type` CHAR(1) NOT NULL DEFAULT '1' COMMENT '类型: 1-采购应付 2-付款 3-退货 4-其他',
`amount` DECIMAL(16,2) NOT NULL DEFAULT 0 COMMENT '金额',
`doc_no` VARCHAR(64) DEFAULT NULL COMMENT '单据号',
`del_flag` CHAR(1) NOT NULL DEFAULT '0' COMMENT '删除标志',
`create_by` VARCHAR(64) DEFAULT NULL,
`create_time` DATETIME DEFAULT NULL,
`update_by` VARCHAR(64) DEFAULT NULL,
`update_time` DATETIME DEFAULT NULL,
`remark` VARCHAR(512) DEFAULT NULL,
PRIMARY KEY (`txn_id`),
KEY `idx_supplier_id` (`supplier_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='供应商往来流水台账';
-- ====== 既有表增列(幂等:列不存在才加) ======
SET @c := (SELECT COUNT(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'erp_purchase_plan_delivery' AND COLUMN_NAME = 'batch_id');
SET @s := IF(@c = 0, 'ALTER TABLE erp_purchase_plan_delivery ADD COLUMN batch_id BIGINT NULL COMMENT ''关联上传批次ID'' AFTER plan_id', 'SELECT 1');
PREPARE stmt FROM @s; EXECUTE stmt; DEALLOCATE PREPARE stmt;
-- 到货行是否 WMS 钢卷表已确认到货(supplier_coil_no 存在且 data_type<>10)
SET @c := (SELECT COUNT(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'erp_purchase_plan_delivery' AND COLUMN_NAME = 'arrived');
SET @s := IF(@c = 0, 'ALTER TABLE erp_purchase_plan_delivery ADD COLUMN arrived TINYINT NOT NULL DEFAULT 0 COMMENT ''是否WMS确认到货:1是0否'' AFTER batch_id', 'SELECT 1');
PREPARE stmt FROM @s; EXECUTE stmt; DEALLOCATE PREPARE stmt;
-- 计划要求总数量(卷/件) = Σ明细数量
SET @c := (SELECT COUNT(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'erp_purchase_plan' AND COLUMN_NAME = 'plan_qty');
SET @s := IF(@c = 0, 'ALTER TABLE erp_purchase_plan ADD COLUMN plan_qty INT NOT NULL DEFAULT 0 COMMENT ''计划要求总数量(卷/件)'' AFTER arrived_weight', 'SELECT 1');
PREPARE stmt FROM @s; EXECUTE stmt; DEALLOCATE PREPARE stmt;
-- 已到货卷数 = WMS确认到货的上传卷数
SET @c := (SELECT COUNT(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'erp_purchase_plan' AND COLUMN_NAME = 'arrived_count');
SET @s := IF(@c = 0, 'ALTER TABLE erp_purchase_plan ADD COLUMN arrived_count INT NOT NULL DEFAULT 0 COMMENT ''已到货卷数'' AFTER plan_qty', 'SELECT 1');
PREPARE stmt FROM @s; EXECUTE stmt; DEALLOCATE PREPARE stmt;
-- ============ 菜单 ============
-- 采购目录挂在「生产辅助」(path=helper) 下;父 id 按 path 动态解析,兼容不同环境的不同 menu_id。
-- 整段可重复执行(叶子菜单用 REPLACE目录用 存在判断 + 归位 UPDATE
-- 1) 解析「生产辅助」目录 id
SET @helper_id = (SELECT menu_id FROM (SELECT menu_id FROM sys_menu WHERE path = 'helper' AND parent_id = 0 LIMIT 1) t);
-- 2) 确保「采购」目录存在(不存在则在「生产辅助」下创建;用派生表规避同表 INSERT...SELECT 限制)
INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, remark)
SELECT 2100000000000000000, '采购', @helper_id, 50, 'purchase', '', '', 1, 0, 'M', '0', '0', '', 'shopping', 'admin', sysdate(), '采购目录'
FROM dual
WHERE NOT EXISTS (SELECT 1 FROM (SELECT menu_id FROM sys_menu WHERE path = 'purchase' AND menu_type = 'M') x);
-- 3) 无论新建还是已存在确保「采购」目录归位到「生产辅助」下并设为显示visible=0否则其下所有菜单都不会出现在侧边栏
UPDATE sys_menu SET parent_id = @helper_id, visible = '0', status = '0' WHERE path = 'purchase' AND menu_type = 'M';
-- 4) 解析「采购」目录 id供下方叶子菜单使用
SET @purchase_id = (SELECT menu_id FROM (SELECT menu_id FROM sys_menu WHERE path = 'purchase' AND menu_type = 'M' LIMIT 1) t);
-- 5) 采购计划 + 按钮REPLACE 可重复执行)
REPLACE INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, remark) VALUES
(2100000000000000001, '采购计划', @purchase_id, 2, 'purchasePlan', 'erp/purchasePlan/index', '', 1, 0, 'C', '0', '0', 'erp:purchasePlan:list', 'form', 'admin', sysdate(), '采购计划菜单'),
(2100000000000000002, '采购计划查询', 2100000000000000001, 1, '', '', '', 1, 0, 'F', '0', '0', 'erp:purchasePlan:query', '#', 'admin', sysdate(), ''),
(2100000000000000003, '采购计划新增', 2100000000000000001, 2, '', '', '', 1, 0, 'F', '0', '0', 'erp:purchasePlan:add', '#', 'admin', sysdate(), ''),
(2100000000000000004, '采购计划修改', 2100000000000000001, 3, '', '', '', 1, 0, 'F', '0', '0', 'erp:purchasePlan:edit', '#', 'admin', sysdate(), ''),
(2100000000000000005, '采购计划删除', 2100000000000000001, 4, '', '', '', 1, 0, 'F', '0', '0', 'erp:purchasePlan:remove', '#', 'admin', sysdate(), ''),
(2100000000000000006, '到货导入', 2100000000000000001, 5, '', '', '', 1, 0, 'F', '0', '0', 'erp:purchasePlan:import', '#', 'admin', sysdate(), '');
-- 6) 采购审核 + 按钮REPLACE 可重复执行)
REPLACE INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, remark) VALUES
(2100000000000000010, '采购审核', @purchase_id, 3, 'purchaseAudit', 'erp/purchaseAudit/index', '', 1, 0, 'C', '0', '0', 'erp:purchasePlan:auditList', 'validCode', 'admin', sysdate(), '采购审核菜单'),
(2100000000000000011, '审核操作', 2100000000000000010, 1, '', '', '', 1, 0, 'F', '0', '0', 'erp:purchasePlan:audit', '#', 'admin', sysdate(), '');
-- 7) 到货记录(审核通过的计划上传到货表格、按卷号比对、到货百分比)
REPLACE INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, remark) VALUES
(2100000000000000020, '到货记录', @purchase_id, 4, 'purchaseDelivery', 'erp/purchaseDelivery/index', '', 1, 0, 'C', '0', '0', 'erp:purchasePlan:list', 'truck', 'admin', sysdate(), '到货记录与卷号比对');