fix(finance): preserve voided receivables and return current revisions
This commit is contained in:
+5
-2
@@ -114,6 +114,7 @@ public class ReconciliationStatementService {
|
||||
return detail(request.customerId(), statementId);
|
||||
}
|
||||
|
||||
/** 推进对账单状态并保存修订,响应包含本次操作刚写入的审计记录。 */
|
||||
@Transactional
|
||||
public ReconciliationDetail action(long operatorId, long statementId, String key, ReconciliationActionRequest request) {
|
||||
validateAction(statementId, request);
|
||||
@@ -152,9 +153,11 @@ public class ReconciliationStatementService {
|
||||
ReconciliationDetail after = detail(before.customerId(), statementId);
|
||||
audit(before.customerId(), statementId, "RECONCILIATION_" + action, request.reason(), before, after, operatorId);
|
||||
complete(before.customerId(), operatorId, "RECONCILIATION_ACTION", key, statementId);
|
||||
return after;
|
||||
// 审计在金额/状态快照之后写入,返回前重新读取,避免首个响应缺少最新修订。
|
||||
return detail(before.customerId(), statementId);
|
||||
}
|
||||
|
||||
/** 调整已出账明细并保留前后金额,响应与随后查询的修订历史一致。 */
|
||||
private ReconciliationDetail adjust(long operatorId, long statementId, String key,
|
||||
ReconciliationActionRequest request, Bill before) {
|
||||
if (!"ISSUED".equals(before.status())) throw error("FIN_409", "仅已出账对账单允许调整");
|
||||
@@ -176,7 +179,7 @@ public class ReconciliationStatementService {
|
||||
ReconciliationDetail after = detail(before.customerId(), statementId);
|
||||
audit(before.customerId(), statementId, "RECONCILIATION_ADJUST", request.reason(), before, after, operatorId);
|
||||
complete(before.customerId(), operatorId, "RECONCILIATION_ACTION", key, statementId);
|
||||
return after;
|
||||
return detail(before.customerId(), statementId);
|
||||
}
|
||||
|
||||
public ReconciliationDetail detail(long customerId, long statementId) {
|
||||
|
||||
@@ -437,6 +437,7 @@ CREATE TABLE IF NOT EXISTS fin_settlement (
|
||||
due_date DATE NOT NULL COMMENT '结算到期日期',
|
||||
payment_status VARCHAR(24) NOT NULL DEFAULT 'UNPAID' COMMENT '收付款状态:UNPAID未收付、PARTIALLY_PAID部分收付、PAID已结清',
|
||||
status VARCHAR(24) NOT NULL DEFAULT 'ISSUED' COMMENT '结算状态:ISSUED已生效、PARTIALLY_PAID部分收付、PAID已结清、VOIDED已作废',
|
||||
active_receivable_statement_id BIGINT UNSIGNED GENERATED ALWAYS AS (CASE WHEN direction='RECEIVABLE' AND status<>'VOIDED' THEN reconciliation_statement_id ELSE NULL END) VIRTUAL COMMENT '有效应收占用的对账单;作废单不占用,历史关联仍保留',
|
||||
version INT UNSIGNED NOT NULL DEFAULT 0 COMMENT '乐观锁版本号',
|
||||
created_by BIGINT UNSIGNED NOT NULL COMMENT '创建操作人ID',
|
||||
updated_by BIGINT UNSIGNED NOT NULL COMMENT '最后修改操作人ID',
|
||||
@@ -444,7 +445,7 @@ CREATE TABLE IF NOT EXISTS fin_settlement (
|
||||
updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '最后更新时间',
|
||||
PRIMARY KEY (id),
|
||||
UNIQUE KEY uk_fin_settlement_no (tenant_id, settlement_no),
|
||||
UNIQUE KEY uk_fin_settlement_receivable_statement (tenant_id, reconciliation_statement_id, direction),
|
||||
UNIQUE KEY uk_fin_settlement_active_receivable (tenant_id, active_receivable_statement_id),
|
||||
KEY idx_fin_settlement_customer_direction_status (tenant_id, direction, status),
|
||||
KEY idx_fin_settlement_supplier_status (supplier_id, direction, status),
|
||||
KEY idx_fin_settlement_receivable_statistics (direction, currency_code, generated_date, status, tenant_id),
|
||||
|
||||
Reference in New Issue
Block a user