Files
yunzerwebsiteallinone/go/docs/sql/alter_oa_reimburse_invoice_link.sql
T

72 lines
2.9 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.
-- =============================================================
-- OA 报销:费用明细支持「发票挂靠」(已建表环境执行)
--
-- 背景:一张发票(例如 200 元油票/邮费票)常常需要分多次报销才能报满。
-- 现在每条费用明细可以挂靠一张「仍有余额的发票」,并记录本次使用金额。
--
-- 设计:不新建发票表,发票本体仍是明细行 receipt_file_ids 指向的附件。
-- 票面金额取 receipt_amounts(OCR 识别或人工填写),余额由后端实时聚合:
-- 余额 = 票面金额 - 上传该票的明细占用 - 其它明细挂靠占用
-- 明细被删除后占用自动释放,无需额外回滚,也不存在余额字段不一致问题。
--
-- 适用:已有 yz_backend_reimbursement_items 的环境。
-- 幂等:重复执行安全(information_schema 判断列是否存在)。
-- =============================================================
USE `go-platform`;
-- 1) 挂靠的发票文件 ID(0 = 未挂靠)
SET @ddl := (
SELECT IF(
EXISTS (
SELECT 1 FROM `information_schema`.`COLUMNS`
WHERE `TABLE_SCHEMA` = DATABASE()
AND `TABLE_NAME` = 'yz_backend_reimbursement_items'
AND `COLUMN_NAME` = 'invoice_file_id'
),
'SELECT ''invoice_file_id 已存在,跳过'' AS msg',
'ALTER TABLE `yz_backend_reimbursement_items` ADD COLUMN `invoice_file_id` BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT ''挂靠的发票文件ID(yz_system_files.id,0=未挂靠)'' AFTER `receipt_amounts`'
)
);
PREPARE stmt FROM @ddl;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
-- 2) 本条明细本次使用的发票金额
SET @ddl := (
SELECT IF(
EXISTS (
SELECT 1 FROM `information_schema`.`COLUMNS`
WHERE `TABLE_SCHEMA` = DATABASE()
AND `TABLE_NAME` = 'yz_backend_reimbursement_items'
AND `COLUMN_NAME` = 'invoice_use_amount'
),
'SELECT ''invoice_use_amount 已存在,跳过'' AS msg',
'ALTER TABLE `yz_backend_reimbursement_items` ADD COLUMN `invoice_use_amount` DECIMAL(10,2) NOT NULL DEFAULT 0.00 COMMENT ''本条明细挂靠使用的发票金额'' AFTER `invoice_file_id`'
)
);
PREPARE stmt FROM @ddl;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
-- 3) 辅助索引:按挂靠发票快速聚合(重复执行前先判断)
SET @ddl := (
SELECT IF(
EXISTS (
SELECT 1 FROM `information_schema`.`STATISTICS`
WHERE `TABLE_SCHEMA` = DATABASE()
AND `TABLE_NAME` = 'yz_backend_reimbursement_items'
AND `INDEX_NAME` = 'idx_reimb_invoice'
),
'SELECT ''idx_reimb_invoice 已存在,跳过'' AS msg',
'ALTER TABLE `yz_backend_reimbursement_items` ADD INDEX `idx_reimb_invoice` (`reimbursement_id`, `invoice_file_id`)'
)
);
PREPARE stmt FROM @ddl;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
-- 4) 核对结果
SHOW FULL COLUMNS FROM `yz_backend_reimbursement_items`
WHERE `Field` IN ('invoice_file_id', 'invoice_use_amount');