优化
This commit is contained in:
+7
-3
@@ -3,7 +3,7 @@ package com.baiyue.finance.controller;
|
|||||||
import com.baiyue.common.core.api.ApiResponse;
|
import com.baiyue.common.core.api.ApiResponse;
|
||||||
import com.baiyue.common.security.AuthenticatedUser;
|
import com.baiyue.common.security.AuthenticatedUser;
|
||||||
import com.baiyue.finance.dto.ReconciliationStatementDtos.CreateReconciliationRequest;
|
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.dto.ReconciliationStatementDtos.ReconciliationDetail;
|
||||||
import com.baiyue.finance.service.ReconciliationStatementService;
|
import com.baiyue.finance.service.ReconciliationStatementService;
|
||||||
import jakarta.validation.Valid;
|
import jakarta.validation.Valid;
|
||||||
@@ -35,12 +35,16 @@ public class ReconciliationStatementController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@PostMapping("/reconciliation-statements/{statementId}/actions")
|
@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(
|
public ApiResponse<ReconciliationDetail> actionReconciliationStatement(
|
||||||
@AuthenticationPrincipal AuthenticatedUser user,
|
@AuthenticationPrincipal AuthenticatedUser user,
|
||||||
@PathVariable long statementId,
|
@PathVariable long statementId,
|
||||||
@RequestHeader("Idempotency-Key") String idempotencyKey,
|
@RequestHeader("Idempotency-Key") String idempotencyKey,
|
||||||
@Valid @RequestBody DocumentActionRequest request) {
|
@Valid @RequestBody ReconciliationActionRequest request) {
|
||||||
return FinanceResponses.success(service.action(user.userId(), statementId, idempotencyKey, request));
|
return FinanceResponses.success(service.action(user.userId(), statementId, idempotencyKey, request));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,11 +8,15 @@ import java.util.List;
|
|||||||
public final class ReconciliationStatementDtos {
|
public final class ReconciliationStatementDtos {
|
||||||
private ReconciliationStatementDtos() {}
|
private ReconciliationStatementDtos() {}
|
||||||
|
|
||||||
public record CreateReconciliationRequest(long customerId, String generationMode,
|
public record CreateReconciliationRequest(long customerId, String currency, String generationMode,
|
||||||
List<Long> feeSourceIds, LocalDate periodStart,
|
List<Long> feeSourceIds, LocalDate periodStart,
|
||||||
LocalDate periodEnd, String remark) {}
|
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,
|
public record ReconciliationDetail(long statementId, String statementNo, long customerId,
|
||||||
String customerName, LocalDate periodStart, LocalDate periodEnd,
|
String customerName, LocalDate periodStart, LocalDate periodEnd,
|
||||||
@@ -20,16 +24,21 @@ public final class ReconciliationStatementDtos {
|
|||||||
BigDecimal receivedAmount, BigDecimal outstandingAmount,
|
BigDecimal receivedAmount, BigDecimal outstandingAmount,
|
||||||
boolean settled, String status, int version,
|
boolean settled, String status, int version,
|
||||||
LocalDateTime createdAt, LocalDateTime updatedAt, String remark,
|
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,
|
public record ReconciliationLine(long statementLineId, long feeSourceId, int sourceVersion,
|
||||||
int sourceVersion, String direction, long customerId,
|
String sourceHash, Long inboundId, Long containerId,
|
||||||
Long orderId, Long inboundId, Long containerId,
|
String feeItemName, BigDecimal sourceAmount,
|
||||||
String feeItemCode, String feeItemName, BigDecimal amount,
|
BigDecimal statementAmount, String currency,
|
||||||
String currency, String sourceStatus) {}
|
String adjustmentReason) {}
|
||||||
|
|
||||||
public record PaymentHistory(long transactionId, String transactionType,
|
public record PaymentHistory(long transactionId, String transactionType,
|
||||||
LocalDate transactionDate, BigDecimal amount,
|
LocalDate transactionDate, BigDecimal amount,
|
||||||
String method, String referenceNo, long createdBy,
|
String method, String referenceNo, long createdBy,
|
||||||
LocalDateTime createdAt, String remark) {}
|
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_code VARCHAR(64) NOT NULL COMMENT '出账时费用项目编码快照',
|
||||||
fee_item_name VARCHAR(200) NOT NULL COMMENT '出账时费用项目名称快照',
|
fee_item_name VARCHAR(200) NOT NULL COMMENT '出账时费用项目名称快照',
|
||||||
amount DECIMAL(20,6) NOT NULL COMMENT '账单明细金额,精度6位小数',
|
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',
|
currency_code CHAR(3) NOT NULL DEFAULT 'CNY' COMMENT 'ISO 4217三位币种代码,首期仅CNY',
|
||||||
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '账单明细创建时间',
|
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '账单明细创建时间',
|
||||||
PRIMARY KEY (id),
|
PRIMARY KEY (id),
|
||||||
|
|||||||
Reference in New Issue
Block a user