优化报销管理增加挂靠

This commit is contained in:
hero920103 committed 2026-11-06 01:13:28 +08:00
1 parent 7b1c94b5ff
commit ee49ef15b5
24 files changed
+1267 -70

No files matched your search

@@ -0,0 +1,71 @@
-- =============================================================
-- 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');