290 lines
19 KiB
SQL
290 lines
19 KiB
SQL
-- =============================================================
|
||
-- 进销存(ERP)—— 交易层数据表
|
||
--
|
||
-- 对应模型:go/models/erp_inventory.go
|
||
--
|
||
-- 设计要点:
|
||
-- 1. 库存流水表 yz_backend_erp_stock_ledger 是核心:所有出入库动作
|
||
-- 审核生效时写入一条不可篡改的流水,由流水驱动库存结存
|
||
-- yz_backend_erp_stock(qty + 移动加权成本),不直接改库存数字。
|
||
-- 2. 单据统一建模:yz_backend_erp_document(主表)+ _item(明细),
|
||
-- doc_type 覆盖 采购订单/入库/退货、销售订单/出库/退货、
|
||
-- 其他出入库、调拨、盘点 十类单据,一套单据引擎驱动全部流转。
|
||
-- 单据特有字段:book_qty(盘点账面)、to_warehouse_id(调拨)、
|
||
-- ref_doc_id/ref_item_id(退货溯源、入库关联订单)。
|
||
-- 3. 业财一体:出库/入库单生效时生成往来账 yz_backend_erp_partner_bill
|
||
-- (应收/应付),收付款单 yz_backend_erp_fund_bill 通过
|
||
-- yz_backend_erp_fund_settle 按单核销。
|
||
-- 4. 状态机:0草稿 1审批中 2已生效 3已驳回 4已作废;
|
||
-- 仅「已生效」产生库存流水与往来账;草稿/驳回/审批中可作废。
|
||
--
|
||
-- 注意:不显式指定 COLLATE,沿用数据库默认排序规则,避免与既有表
|
||
-- (utf8mb4_0900_ai_ci)在 JOIN 比较字符串时报 Illegal mix of collations。
|
||
-- =============================================================
|
||
|
||
SET NAMES utf8mb4;
|
||
|
||
-- ---------------- 1. 商品分类(树形) ----------------
|
||
CREATE TABLE IF NOT EXISTS `yz_backend_erp_product_category` (
|
||
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||
`tenant_id` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '租户ID',
|
||
`category_name` VARCHAR(100) NOT NULL DEFAULT '' COMMENT '分类名称',
|
||
`parent_id` BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '父分类ID,0=根',
|
||
`sort_order` INT NOT NULL DEFAULT 0 COMMENT '排序',
|
||
`status` TINYINT NOT NULL DEFAULT 1 COMMENT '1启用 0停用',
|
||
`remark` VARCHAR(500) NOT NULL DEFAULT '',
|
||
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
`update_time` DATETIME DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
|
||
`delete_time` DATETIME DEFAULT NULL COMMENT '软删除',
|
||
PRIMARY KEY (`id`),
|
||
KEY `idx_tenant` (`tenant_id`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='ERP-商品分类';
|
||
|
||
-- ---------------- 2. 商品档案 ----------------
|
||
CREATE TABLE IF NOT EXISTS `yz_backend_erp_product` (
|
||
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||
`tenant_id` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '租户ID',
|
||
`product_code` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '商品编号(租户内唯一)',
|
||
`product_name` VARCHAR(200) NOT NULL DEFAULT '' COMMENT '商品名称',
|
||
`category_id` BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '分类ID',
|
||
`brand` VARCHAR(100) NOT NULL DEFAULT '' COMMENT '品牌',
|
||
`spec` VARCHAR(200) NOT NULL DEFAULT '' COMMENT '规格',
|
||
`model` VARCHAR(100) NOT NULL DEFAULT '' COMMENT '型号',
|
||
`base_unit` VARCHAR(32) NOT NULL DEFAULT '' COMMENT '基本单位(库存计量单位)',
|
||
`aux_unit` VARCHAR(32) NOT NULL DEFAULT '' COMMENT '辅助单位(如箱)',
|
||
`aux_ratio` DECIMAL(18,4) NOT NULL DEFAULT 1 COMMENT '换算系数:1辅助单位=aux_ratio基本单位',
|
||
`barcode` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '主条码',
|
||
`extra_barcodes` VARCHAR(500) NOT NULL DEFAULT '' COMMENT '多条码 CSV',
|
||
`purchase_price` DECIMAL(18,4) NOT NULL DEFAULT 0 COMMENT '参考采购价',
|
||
`sale_price` DECIMAL(18,4) NOT NULL DEFAULT 0 COMMENT '零售价',
|
||
`wholesale_price` DECIMAL(18,4) NOT NULL DEFAULT 0 COMMENT '批发价',
|
||
`member_price` DECIMAL(18,4) NOT NULL DEFAULT 0 COMMENT '会员价',
|
||
`min_price` DECIMAL(18,4) NOT NULL DEFAULT 0 COMMENT '最低售价(开单低于此价拦截)',
|
||
`tax_rate` DECIMAL(9,4) NOT NULL DEFAULT 0 COMMENT '税率(%)',
|
||
`safety_qty` DECIMAL(18,4) NOT NULL DEFAULT 0 COMMENT '安全库存下限(低于预警)',
|
||
`max_qty` DECIMAL(18,4) NOT NULL DEFAULT 0 COMMENT '库存上限(高于积压预警,0=不限)',
|
||
`shelf_life_days` INT NOT NULL DEFAULT 0 COMMENT '保质期天数(0=不管效期)',
|
||
`enable_batch` TINYINT NOT NULL DEFAULT 0 COMMENT '是否批次管理:1是 0否',
|
||
`image_url` VARCHAR(500) NOT NULL DEFAULT '' COMMENT '商品图片',
|
||
`status` TINYINT NOT NULL DEFAULT 1 COMMENT '1启用 0停用',
|
||
`is_draft` TINYINT NOT NULL DEFAULT 0 COMMENT '1草稿 0正式',
|
||
`remark` VARCHAR(1000) NOT NULL DEFAULT '',
|
||
`create_user_id` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '创建人',
|
||
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
`update_time` DATETIME DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
|
||
`delete_time` DATETIME DEFAULT NULL COMMENT '软删除',
|
||
PRIMARY KEY (`id`),
|
||
UNIQUE KEY `uk_tenant_code` (`tenant_id`,`product_code`),
|
||
KEY `idx_tenant_name` (`tenant_id`,`product_name`),
|
||
KEY `idx_barcode` (`barcode`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='ERP-商品档案';
|
||
|
||
-- ---------------- 3. 仓库 ----------------
|
||
CREATE TABLE IF NOT EXISTS `yz_backend_erp_warehouse` (
|
||
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||
`tenant_id` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '租户ID',
|
||
`warehouse_code` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '仓库编号',
|
||
`warehouse_name` VARCHAR(100) NOT NULL DEFAULT '' COMMENT '仓库名称',
|
||
`address` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '地址',
|
||
`manager` VARCHAR(50) NOT NULL DEFAULT '' COMMENT '负责人',
|
||
`phone` VARCHAR(20) NOT NULL DEFAULT '' COMMENT '联系电话',
|
||
`is_default` TINYINT NOT NULL DEFAULT 0 COMMENT '是否默认仓库:1是 0否',
|
||
`status` TINYINT NOT NULL DEFAULT 1 COMMENT '1启用 0停用',
|
||
`remark` VARCHAR(500) NOT NULL DEFAULT '',
|
||
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
`update_time` DATETIME DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
|
||
`delete_time` DATETIME DEFAULT NULL COMMENT '软删除',
|
||
PRIMARY KEY (`id`),
|
||
KEY `idx_tenant` (`tenant_id`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='ERP-仓库档案';
|
||
|
||
-- ---------------- 4. 库存结存(由流水驱动) ----------------
|
||
CREATE TABLE IF NOT EXISTS `yz_backend_erp_stock` (
|
||
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||
`tenant_id` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '租户ID',
|
||
`product_id` BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '商品ID',
|
||
`warehouse_id` BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '仓库ID',
|
||
`batch_no` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '批次号,空=非批次库存',
|
||
`quantity` DECIMAL(18,4) NOT NULL DEFAULT 0 COMMENT '当前库存数量(基本单位)',
|
||
`cost_price` DECIMAL(18,6) NOT NULL DEFAULT 0 COMMENT '移动加权平均成本',
|
||
`update_time` DATETIME DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
|
||
PRIMARY KEY (`id`),
|
||
UNIQUE KEY `uk_stock` (`tenant_id`,`product_id`,`warehouse_id`,`batch_no`),
|
||
KEY `idx_tenant_product` (`tenant_id`,`product_id`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='ERP-库存结存';
|
||
|
||
-- ---------------- 5. 库存流水(核心·只增不改不删) ----------------
|
||
CREATE TABLE IF NOT EXISTS `yz_backend_erp_stock_ledger` (
|
||
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||
`tenant_id` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '租户ID',
|
||
`product_id` BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '商品ID',
|
||
`warehouse_id` BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '仓库ID',
|
||
`batch_no` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '批次号',
|
||
`direction` TINYINT NOT NULL DEFAULT 1 COMMENT '方向:1入 -1出',
|
||
`quantity` DECIMAL(18,4) NOT NULL DEFAULT 0 COMMENT '变动数量(正数)',
|
||
`before_qty` DECIMAL(18,4) NOT NULL DEFAULT 0 COMMENT '变动前结存',
|
||
`after_qty` DECIMAL(18,4) NOT NULL DEFAULT 0 COMMENT '变动后结存',
|
||
`unit_cost` DECIMAL(18,6) NOT NULL DEFAULT 0 COMMENT '本次变动单位成本(入库=进价,出库=出库时加权成本)',
|
||
`total_cost` DECIMAL(18,2) NOT NULL DEFAULT 0 COMMENT '本次变动成本金额',
|
||
`doc_type` VARCHAR(30) NOT NULL DEFAULT '' COMMENT '来源单据类型',
|
||
`doc_id` BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '来源单据ID',
|
||
`doc_no` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '来源单据号',
|
||
`doc_item_id` BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '来源单据明细ID',
|
||
`production_date` DATE DEFAULT NULL COMMENT '生产日期',
|
||
`expire_date` DATE DEFAULT NULL COMMENT '到期日期',
|
||
`operator_id` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '操作人ID',
|
||
`operator_name` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '操作人姓名',
|
||
`remark` VARCHAR(500) NOT NULL DEFAULT '',
|
||
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
PRIMARY KEY (`id`),
|
||
KEY `idx_stock` (`tenant_id`,`product_id`,`warehouse_id`),
|
||
KEY `idx_doc` (`tenant_id`,`doc_type`,`doc_id`),
|
||
KEY `idx_create_time` (`tenant_id`,`create_time`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='ERP-库存流水(不可篡改)';
|
||
|
||
-- ---------------- 6. 单据主表(十类单据统一建模) ----------------
|
||
CREATE TABLE IF NOT EXISTS `yz_backend_erp_document` (
|
||
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||
`tenant_id` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '租户ID',
|
||
`doc_no` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '单据号(前缀取基础设置)',
|
||
`doc_type` VARCHAR(30) NOT NULL DEFAULT '' COMMENT '单据类型:purchase_order/purchase_in/purchase_return/sales_order/sales_out/sales_return/other_in/other_out/transfer/stock_take',
|
||
`biz_date` DATE NOT NULL COMMENT '业务日期',
|
||
`warehouse_id` BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '主仓库(入库仓/出库仓/调出仓)',
|
||
`to_warehouse_id` BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '调入仓库(仅调拨)',
|
||
`partner_type` VARCHAR(20) NOT NULL DEFAULT '' COMMENT '往来单位类型:customer/supplier',
|
||
`partner_id` BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '往来单位ID(客户表/供应商表)',
|
||
`partner_name` VARCHAR(200) NOT NULL DEFAULT '' COMMENT '往来单位名称快照',
|
||
`source_doc_id` BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '来源单据ID(入库单←采购订单,退货单←入库/出库单)',
|
||
`total_qty` DECIMAL(18,4) NOT NULL DEFAULT 0 COMMENT '合计数量(基本单位)',
|
||
`total_amount` DECIMAL(18,2) NOT NULL DEFAULT 0 COMMENT '合计金额(折前)',
|
||
`discount_amount` DECIMAL(18,2) NOT NULL DEFAULT 0 COMMENT '整单优惠金额',
|
||
`actual_amount` DECIMAL(18,2) NOT NULL DEFAULT 0 COMMENT '合计金额(折后,往来账按此计)',
|
||
`status` TINYINT NOT NULL DEFAULT 0 COMMENT '0草稿 1审批中 2已生效 3已驳回 4已作废',
|
||
`instance_id` BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '审批实例ID',
|
||
`auditor_id` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '审核人ID',
|
||
`auditor_name` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '审核人姓名',
|
||
`audit_time` DATETIME DEFAULT NULL COMMENT '审核生效时间',
|
||
`remark` VARCHAR(1000) NOT NULL DEFAULT '',
|
||
`create_user_id` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '创建人ID',
|
||
`create_user_name` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '创建人姓名',
|
||
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
`update_time` DATETIME DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
|
||
`delete_time` DATETIME DEFAULT NULL COMMENT '软删除',
|
||
PRIMARY KEY (`id`),
|
||
UNIQUE KEY `uk_tenant_docno` (`tenant_id`,`doc_no`),
|
||
KEY `idx_tenant_type_status` (`tenant_id`,`doc_type`,`status`),
|
||
KEY `idx_partner` (`tenant_id`,`partner_type`,`partner_id`),
|
||
KEY `idx_biz_date` (`tenant_id`,`biz_date`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='ERP-业务单据主表';
|
||
|
||
-- ---------------- 7. 单据明细 ----------------
|
||
CREATE TABLE IF NOT EXISTS `yz_backend_erp_document_item` (
|
||
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||
`doc_id` BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '主表ID',
|
||
`tenant_id` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '租户ID',
|
||
`product_id` BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '商品ID',
|
||
`product_name` VARCHAR(200) NOT NULL DEFAULT '' COMMENT '商品名称快照',
|
||
`spec` VARCHAR(200) NOT NULL DEFAULT '' COMMENT '规格快照',
|
||
`unit` VARCHAR(32) NOT NULL DEFAULT '' COMMENT '计量单位(基本单位)',
|
||
`warehouse_id` BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '明细行仓库(盘点用;单据级默认可0)',
|
||
`batch_no` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '批次号',
|
||
`quantity` DECIMAL(18,4) NOT NULL DEFAULT 0 COMMENT '数量(基本单位)',
|
||
`book_qty` DECIMAL(18,4) NOT NULL DEFAULT 0 COMMENT '账面数量(仅盘点)',
|
||
`executed_qty` DECIMAL(18,4) NOT NULL DEFAULT 0 COMMENT '已执行数量(订单被入库/出库累计)',
|
||
`ref_item_id` BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '来源明细行ID(入库行←订单行/退货行←原单行)',
|
||
`unit_price` DECIMAL(18,6) NOT NULL DEFAULT 0 COMMENT '单价(成本/进价/售价)',
|
||
`amount` DECIMAL(18,2) NOT NULL DEFAULT 0 COMMENT '行金额',
|
||
`production_date` DATE DEFAULT NULL COMMENT '生产日期',
|
||
`expire_date` DATE DEFAULT NULL COMMENT '到期日期',
|
||
`remark` VARCHAR(500) NOT NULL DEFAULT '',
|
||
`sort_order` INT NOT NULL DEFAULT 0,
|
||
PRIMARY KEY (`id`),
|
||
KEY `idx_doc` (`doc_id`),
|
||
KEY `idx_tenant_product` (`tenant_id`,`product_id`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='ERP-业务单据明细';
|
||
|
||
-- ---------------- 8. 往来账(应收/应付) ----------------
|
||
CREATE TABLE IF NOT EXISTS `yz_backend_erp_partner_bill` (
|
||
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||
`tenant_id` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '租户ID',
|
||
`bill_type` TINYINT NOT NULL DEFAULT 1 COMMENT '1应收 2应付',
|
||
`partner_type` VARCHAR(20) NOT NULL DEFAULT '' COMMENT 'customer/supplier',
|
||
`partner_id` BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '往来单位ID',
|
||
`partner_name` VARCHAR(200) NOT NULL DEFAULT '' COMMENT '往来单位名称快照',
|
||
`source_doc_id` BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '来源单据ID',
|
||
`source_doc_no` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '来源单据号',
|
||
`bill_date` DATE NOT NULL COMMENT '账期开始日',
|
||
`due_date` DATE DEFAULT NULL COMMENT '到期日(账期)',
|
||
`amount` DECIMAL(18,2) NOT NULL DEFAULT 0 COMMENT '发生额(红字为负)',
|
||
`settled_amount` DECIMAL(18,2) NOT NULL DEFAULT 0 COMMENT '已核销额',
|
||
`status` TINYINT NOT NULL DEFAULT 0 COMMENT '0未核销 1部分核销 2已核销',
|
||
`remark` VARCHAR(500) NOT NULL DEFAULT '',
|
||
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
`update_time` DATETIME DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
|
||
PRIMARY KEY (`id`),
|
||
KEY `idx_tenant_type` (`tenant_id`,`bill_type`,`status`),
|
||
KEY `idx_partner` (`tenant_id`,`partner_type`,`partner_id`),
|
||
KEY `idx_doc` (`tenant_id`,`source_doc_id`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='ERP-往来账(应收/应付)';
|
||
|
||
-- ---------------- 9. 收付款单 ----------------
|
||
CREATE TABLE IF NOT EXISTS `yz_backend_erp_fund_bill` (
|
||
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||
`tenant_id` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '租户ID',
|
||
`fund_no` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '收付款单号',
|
||
`fund_type` TINYINT NOT NULL DEFAULT 1 COMMENT '1收款(冲应收) 2付款(冲应付) 3其他收入 4费用支出',
|
||
`partner_type` VARCHAR(20) NOT NULL DEFAULT '' COMMENT 'customer/supplier/空(其他收支)',
|
||
`partner_id` BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '往来单位ID',
|
||
`partner_name` VARCHAR(200) NOT NULL DEFAULT '' COMMENT '往来单位名称快照',
|
||
`amount` DECIMAL(18,2) NOT NULL DEFAULT 0 COMMENT '收付金额(正数)',
|
||
`settled_amount` DECIMAL(18,2) NOT NULL DEFAULT 0 COMMENT '已核销往来账金额(按单核销累计)',
|
||
`pay_method` VARCHAR(30) NOT NULL DEFAULT 'cash' COMMENT 'cash现金/bank银行/wechat微信/alipay支付宝/check支票/online在线',
|
||
`pay_account` VARCHAR(100) NOT NULL DEFAULT '' COMMENT '收款账户备注',
|
||
`biz_date` DATE NOT NULL COMMENT '收付日期',
|
||
`status` TINYINT NOT NULL DEFAULT 0 COMMENT '0草稿 1已确认 4已作废',
|
||
`remark` VARCHAR(500) NOT NULL DEFAULT '',
|
||
`create_user_id` VARCHAR(64) NOT NULL DEFAULT '',
|
||
`create_user_name` VARCHAR(64) NOT NULL DEFAULT '',
|
||
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
`update_time` DATETIME DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
|
||
`delete_time` DATETIME DEFAULT NULL COMMENT '软删除',
|
||
PRIMARY KEY (`id`),
|
||
UNIQUE KEY `uk_tenant_fundno` (`tenant_id`,`fund_no`),
|
||
KEY `idx_tenant_type` (`tenant_id`,`fund_type`,`status`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='ERP-收付款单';
|
||
|
||
-- ---------------- 10. 收付款核销明细 ----------------
|
||
CREATE TABLE IF NOT EXISTS `yz_backend_erp_fund_settle` (
|
||
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||
`tenant_id` VARCHAR(64) NOT NULL DEFAULT '',
|
||
`fund_bill_id` BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '收付款单ID',
|
||
`partner_bill_id` BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '往来账ID',
|
||
`partner_bill_no` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '往来单据号快照',
|
||
`amount` DECIMAL(18,2) NOT NULL DEFAULT 0 COMMENT '本次核销额',
|
||
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
PRIMARY KEY (`id`),
|
||
KEY `idx_fund` (`fund_bill_id`),
|
||
KEY `idx_bill` (`partner_bill_id`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='ERP-收付款核销明细';
|
||
|
||
-- ---------------- 11. 客户/供应商信用字段(幂等增列) ----------------
|
||
-- MySQL 不支持 ADD COLUMN IF NOT EXISTS,用 INFORMATION_SCHEMA 判重 + PREPARE 动态执行。
|
||
|
||
SET @has_credit := (SELECT COUNT(*) FROM information_schema.columns
|
||
WHERE table_schema=DATABASE() AND table_name='yz_backend_erp_customer' AND column_name='credit_limit');
|
||
SET @sql := IF(@has_credit=0,
|
||
'ALTER TABLE `yz_backend_erp_customer` ADD COLUMN `credit_limit` DECIMAL(18,2) NOT NULL DEFAULT 0 COMMENT ''信用额度,0=不限'', ADD COLUMN `payment_days` INT NOT NULL DEFAULT 0 COMMENT ''账期天数''',
|
||
'SELECT ''yz_backend_erp_customer.credit_limit already exists''');
|
||
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
|
||
|
||
SET @has_spay := (SELECT COUNT(*) FROM information_schema.columns
|
||
WHERE table_schema=DATABASE() AND table_name='yz_backend_erp_supplier' AND column_name='payment_days');
|
||
SET @sql := IF(@has_spay=0,
|
||
'ALTER TABLE `yz_backend_erp_supplier` ADD COLUMN `payment_days` INT NOT NULL DEFAULT 0 COMMENT ''账期天数''',
|
||
'SELECT ''yz_backend_erp_supplier.payment_days already exists''');
|
||
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
|
||
|
||
-- ---------------- 结果校验 ----------------
|
||
SELECT TABLE_NAME, TABLE_COMMENT FROM information_schema.tables
|
||
WHERE table_schema=DATABASE() AND TABLE_NAME LIKE 'yz_backend_erp_%' ORDER BY TABLE_NAME;
|