From 48bb7520071523c94f19bc5f4919e9357cf229bf Mon Sep 17 00:00:00 2001 From: ouyangxq <775153912@qq.com> Date: Tue, 11 Aug 2026 19:59:06 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ReconciliationStatementController.java | 10 +++++--- .../dto/ReconciliationStatementDtos.java | 25 +++++++++++++------ finance/src/main/resources/db/finance.sql | 1 + 3 files changed, 25 insertions(+), 11 deletions(-) diff --git a/finance/src/main/java/com/baiyue/finance/controller/ReconciliationStatementController.java b/finance/src/main/java/com/baiyue/finance/controller/ReconciliationStatementController.java index b4400259c..3a23d733b 100644 --- a/finance/src/main/java/com/baiyue/finance/controller/ReconciliationStatementController.java +++ b/finance/src/main/java/com/baiyue/finance/controller/ReconciliationStatementController.java @@ -3,7 +3,7 @@ package com.baiyue.finance.controller; import com.baiyue.common.core.api.ApiResponse; import com.baiyue.common.security.AuthenticatedUser; import com.baiyue.finance.dto.ReconciliationStatementDtos.CreateReconciliationRequest; -import com.baiyue.finance.dto.ReconciliationStatementDtos.DocumentActionRequest; +import com.baiyue.finance.dto.ReconciliationStatementDtos.ReconciliationActionRequest; import com.baiyue.finance.dto.ReconciliationStatementDtos.ReconciliationDetail; import com.baiyue.finance.service.ReconciliationStatementService; import jakarta.validation.Valid; @@ -35,12 +35,16 @@ public class ReconciliationStatementController { } @PostMapping("/reconciliation-statements/{statementId}/actions") - @PreAuthorize("hasAuthority('platform:finance:reconciliation:review')") + @PreAuthorize("(#request.action != null && #request.action.equalsIgnoreCase('SUBMIT') && hasAuthority('platform:finance:reconciliation:create'))" + + " || (#request.action != null && (#request.action.equalsIgnoreCase('APPROVE') || #request.action.equalsIgnoreCase('REJECT')) && hasAuthority('platform:finance:reconciliation:review'))" + + " || (#request.action != null && #request.action.equalsIgnoreCase('ISSUE') && hasAuthority('platform:finance:reconciliation:issue'))" + + " || (#request.action != null && #request.action.equalsIgnoreCase('ADJUST') && hasAuthority('platform:finance:reconciliation:adjust'))" + + " || (#request.action != null && (#request.action.equalsIgnoreCase('VOID') || #request.action.equalsIgnoreCase('REOPEN')) && hasAuthority('platform:finance:reconciliation:void'))") public ApiResponse actionReconciliationStatement( @AuthenticationPrincipal AuthenticatedUser user, @PathVariable long statementId, @RequestHeader("Idempotency-Key") String idempotencyKey, - @Valid @RequestBody DocumentActionRequest request) { + @Valid @RequestBody ReconciliationActionRequest request) { return FinanceResponses.success(service.action(user.userId(), statementId, idempotencyKey, request)); } } diff --git a/finance/src/main/java/com/baiyue/finance/dto/ReconciliationStatementDtos.java b/finance/src/main/java/com/baiyue/finance/dto/ReconciliationStatementDtos.java index 869d5f391..d5d99f0bc 100644 --- a/finance/src/main/java/com/baiyue/finance/dto/ReconciliationStatementDtos.java +++ b/finance/src/main/java/com/baiyue/finance/dto/ReconciliationStatementDtos.java @@ -8,11 +8,15 @@ import java.util.List; public final class ReconciliationStatementDtos { private ReconciliationStatementDtos() {} - public record CreateReconciliationRequest(long customerId, String generationMode, + public record CreateReconciliationRequest(long customerId, String currency, String generationMode, List feeSourceIds, LocalDate periodStart, LocalDate periodEnd, String remark) {} - public record DocumentActionRequest(String action, String reason, int expectedVersion) {} + public record ReconciliationActionRequest(String action, String reason, int expectedVersion, + List adjustmentLines) {} + + public record StatementAdjustmentLineRequest(long statementLineId, BigDecimal adjustedAmount, + String reason) {} public record ReconciliationDetail(long statementId, String statementNo, long customerId, String customerName, LocalDate periodStart, LocalDate periodEnd, @@ -20,16 +24,21 @@ public final class ReconciliationStatementDtos { BigDecimal receivedAmount, BigDecimal outstandingAmount, boolean settled, String status, int version, LocalDateTime createdAt, LocalDateTime updatedAt, String remark, - List lines, List paymentHistory) {} + List lines, List paymentHistory, + List revisions) {} - public record FeeSourceLine(long feeSourceId, String sourceType, long sourceFeeId, - int sourceVersion, String direction, long customerId, - Long orderId, Long inboundId, Long containerId, - String feeItemCode, String feeItemName, BigDecimal amount, - String currency, String sourceStatus) {} + public record ReconciliationLine(long statementLineId, long feeSourceId, int sourceVersion, + String sourceHash, Long inboundId, Long containerId, + String feeItemName, BigDecimal sourceAmount, + BigDecimal statementAmount, String currency, + String adjustmentReason) {} public record PaymentHistory(long transactionId, String transactionType, LocalDate transactionDate, BigDecimal amount, String method, String referenceNo, long createdBy, LocalDateTime createdAt, String remark) {} + + public record ReconciliationRevision(int revisionNo, String action, BigDecimal beforeAmount, + BigDecimal afterAmount, String reason, long operatorId, + LocalDateTime occurredAt) {} } diff --git a/finance/src/main/resources/db/finance.sql b/finance/src/main/resources/db/finance.sql index 06088119a..822cf776b 100644 --- a/finance/src/main/resources/db/finance.sql +++ b/finance/src/main/resources/db/finance.sql @@ -127,6 +127,7 @@ CREATE TABLE IF NOT EXISTS fin_bill_line ( fee_item_code VARCHAR(64) NOT NULL COMMENT '出账时费用项目编码快照', fee_item_name VARCHAR(200) NOT NULL COMMENT '出账时费用项目名称快照', amount DECIMAL(20,6) NOT NULL COMMENT '账单明细金额,精度6位小数', + adjustment_reason VARCHAR(500) NULL COMMENT '最近一次账单调整行原因;完整历史保存在修订与审计记录', currency_code CHAR(3) NOT NULL DEFAULT 'CNY' COMMENT 'ISO 4217三位币种代码,首期仅CNY', created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '账单明细创建时间', PRIMARY KEY (id),