This commit is contained in:
2026-08-11 19:59:06 +08:00
parent 7c24c96f88
commit 48bb752007
3 changed files with 25 additions and 11 deletions
@@ -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<ReconciliationDetail> 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));
}
}
@@ -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<Long> 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<StatementAdjustmentLineRequest> 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<FeeSourceLine> lines, List<PaymentHistory> paymentHistory) {}
List<ReconciliationLine> lines, List<PaymentHistory> paymentHistory,
List<ReconciliationRevision> 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) {}
}
@@ -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),