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) {}
}