preserve payable partner in fee snapshots
This commit is contained in:
@@ -24,7 +24,8 @@ public interface FirstlegFeeSourceClient {
|
|||||||
record Snapshot(long tenantId, String sourceType, long feeId, int feeVersion,
|
record Snapshot(long tenantId, String sourceType, long feeId, int feeVersion,
|
||||||
Long inboundId, String inboundCode, Long orderId, Long containerId,
|
Long inboundId, String inboundCode, Long orderId, Long containerId,
|
||||||
Long containerBookingId, String containerNo, long customerId,
|
Long containerBookingId, String containerNo, long customerId,
|
||||||
String customerName, Long feeItemId, String feeItemCode,
|
String customerName, Long partnerId, String partnerName,
|
||||||
|
Long feeItemId, String feeItemCode,
|
||||||
String feeItemName, String direction, LocalDate businessDate,
|
String feeItemName, String direction, LocalDate businessDate,
|
||||||
String currency, BigDecimal totalAmount, String reviewStatus,
|
String currency, BigDecimal totalAmount, String reviewStatus,
|
||||||
String publicationStatus, boolean settlementIncluded,
|
String publicationStatus, boolean settlementIncluded,
|
||||||
|
|||||||
@@ -173,7 +173,7 @@ class FinanceFeeSourceEventServiceTest {
|
|||||||
String publicationStatus, BigDecimal amount) {
|
String publicationStatus, BigDecimal amount) {
|
||||||
return new FirstlegFeeSourceClient.Snapshot(customerId, sourceType, 31, version, inboundId,
|
return new FirstlegFeeSourceClient.Snapshot(customerId, sourceType, 31, version, inboundId,
|
||||||
inboundId == null ? null : "IB-21", 51L, containerId, null,
|
inboundId == null ? null : "IB-21", 51L, containerId, null,
|
||||||
containerId == null ? null : "C-41", customerId, "客户", 61L, "CUSTOMS",
|
containerId == null ? null : "C-41", customerId, "客户", null, null, 61L, "CUSTOMS",
|
||||||
"清关费", "RECEIVABLE", LocalDate.of(2026, 8, 11), "CNY", amount,
|
"清关费", "RECEIVABLE", LocalDate.of(2026, 8, 11), "CNY", amount,
|
||||||
"APPROVED", publicationStatus, true, LocalDateTime.of(2026, 8, 11, 1, 0),
|
"APPROVED", publicationStatus, true, LocalDateTime.of(2026, 8, 11, 1, 0),
|
||||||
BigDecimal.ONE, "SHIPMENT", BigDecimal.TEN, BigDecimal.ONE, "source-hash", version);
|
BigDecimal.ONE, "SHIPMENT", BigDecimal.TEN, BigDecimal.ONE, "source-hash", version);
|
||||||
|
|||||||
@@ -18,6 +18,8 @@ public record FinanceFeeSourceSnapshot(
|
|||||||
String containerNo,
|
String containerNo,
|
||||||
long customerId,
|
long customerId,
|
||||||
String customerName,
|
String customerName,
|
||||||
|
Long partnerId,
|
||||||
|
String partnerName,
|
||||||
Long feeItemId,
|
Long feeItemId,
|
||||||
String feeItemCode,
|
String feeItemCode,
|
||||||
String feeItemName,
|
String feeItemName,
|
||||||
|
|||||||
@@ -22,12 +22,14 @@ public final class InboundFeeDetailDtos {
|
|||||||
@NotBlank @Pattern(regexp = "[A-Z]{3}") String currency,
|
@NotBlank @Pattern(regexp = "[A-Z]{3}") String currency,
|
||||||
@NotNull @DecimalMin("0.00") BigDecimal amount,
|
@NotNull @DecimalMin("0.00") BigDecimal amount,
|
||||||
@NotNull Boolean settlementIncluded,
|
@NotNull Boolean settlementIncluded,
|
||||||
|
Long partnerId,
|
||||||
|
@Size(max = 200) String partnerName,
|
||||||
@Size(max = 500) String remark
|
@Size(max = 500) String remark
|
||||||
) {
|
) {
|
||||||
public SaveRequest(Long feeItemId, String direction, LocalDate businessDate,
|
public SaveRequest(Long feeItemId, String direction, LocalDate businessDate,
|
||||||
BigDecimal unitPrice, String currency, BigDecimal amount,
|
BigDecimal unitPrice, String currency, BigDecimal amount,
|
||||||
String remark) {
|
String remark) {
|
||||||
this(feeItemId, direction, businessDate, unitPrice, currency, amount, false, remark);
|
this(feeItemId, direction, businessDate, unitPrice, currency, amount, false, null, null, remark);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -27,6 +27,8 @@ public class InboundFeeDetailEntity extends BaseEntity {
|
|||||||
private String sourceFeeNo;
|
private String sourceFeeNo;
|
||||||
private String inboundCode;
|
private String inboundCode;
|
||||||
private String direction;
|
private String direction;
|
||||||
|
private Long partnerId;
|
||||||
|
private String partnerName;
|
||||||
private LocalDate businessDate;
|
private LocalDate businessDate;
|
||||||
private Long customerId;
|
private Long customerId;
|
||||||
private String customerName;
|
private String customerName;
|
||||||
|
|||||||
+2
-2
@@ -44,7 +44,7 @@ public class FinanceFeeSourceSnapshotService {
|
|||||||
nullSafe(detail.getCurrency()), String.valueOf(detail.getSettlementIncluded()));
|
nullSafe(detail.getCurrency()), String.valueOf(detail.getSettlementIncluded()));
|
||||||
return new FinanceFeeSourceSnapshot(detail.getTenantId(), "INBOUND_FEE", sourceFeeId,
|
return new FinanceFeeSourceSnapshot(detail.getTenantId(), "INBOUND_FEE", sourceFeeId,
|
||||||
version, inboundId, inbound.getInboundCode(), inbound.getOrderId(), null, null, null,
|
version, inboundId, inbound.getInboundCode(), inbound.getOrderId(), null, null, null,
|
||||||
detail.getTenantId(), inbound.getCustomerName(), item.getId(), item.getFeeCode(),
|
detail.getTenantId(), inbound.getCustomerName(), detail.getPartnerId(), detail.getPartnerName(), item.getId(), item.getFeeCode(),
|
||||||
detail.getFeeTypeNameSnapshot(), detail.getDirection(), detail.getBusinessDate(),
|
detail.getFeeTypeNameSnapshot(), detail.getDirection(), detail.getBusinessDate(),
|
||||||
detail.getCurrency(), detail.getAmount(), detail.getReviewStatus(),
|
detail.getCurrency(), detail.getAmount(), detail.getReviewStatus(),
|
||||||
detail.getPublicationStatus(), Boolean.TRUE.equals(detail.getSettlementIncluded()),
|
detail.getPublicationStatus(), Boolean.TRUE.equals(detail.getSettlementIncluded()),
|
||||||
@@ -65,7 +65,7 @@ public class FinanceFeeSourceSnapshotService {
|
|||||||
String.valueOf(detail.getSettlementIncluded()));
|
String.valueOf(detail.getSettlementIncluded()));
|
||||||
return new FinanceFeeSourceSnapshot(detail.getTenantId(), "CONTAINER_FEE", feeId,
|
return new FinanceFeeSourceSnapshot(detail.getTenantId(), "CONTAINER_FEE", feeId,
|
||||||
version, null, null, null, containerId, detail.getContainerBookingId(),
|
version, null, null, null, containerId, detail.getContainerBookingId(),
|
||||||
detail.getContainerNo(), detail.getTenantId(), null, detail.getFeeItemId(),
|
detail.getContainerNo(), detail.getTenantId(), null, null, null, detail.getFeeItemId(),
|
||||||
detail.getFeeItemCodeSnapshot(), detail.getFeeItemNameSnapshot(), detail.getDirection(),
|
detail.getFeeItemCodeSnapshot(), detail.getFeeItemNameSnapshot(), detail.getDirection(),
|
||||||
detail.getBusinessDate(), detail.getCurrency(), detail.getAmount(), detail.getReviewStatus(),
|
detail.getBusinessDate(), detail.getCurrency(), detail.getAmount(), detail.getReviewStatus(),
|
||||||
publicationStatus, Boolean.TRUE.equals(detail.getSettlementIncluded()),
|
publicationStatus, Boolean.TRUE.equals(detail.getSettlementIncluded()),
|
||||||
|
|||||||
@@ -310,6 +310,8 @@ public class InboundFeeDetailService {
|
|||||||
value.setFeeItemId(item.getId());
|
value.setFeeItemId(item.getId());
|
||||||
value.setInboundCode(inbound.getInboundCode());
|
value.setInboundCode(inbound.getInboundCode());
|
||||||
value.setDirection(request.direction());
|
value.setDirection(request.direction());
|
||||||
|
value.setPartnerId("PAYABLE".equals(request.direction()) ? request.partnerId() : null);
|
||||||
|
value.setPartnerName("PAYABLE".equals(request.direction()) ? request.partnerName() : null);
|
||||||
value.setBusinessDate(request.businessDate());
|
value.setBusinessDate(request.businessDate());
|
||||||
value.setFeeCategorySnapshot(item.getCategory());
|
value.setFeeCategorySnapshot(item.getCategory());
|
||||||
value.setTradeScopeSnapshot(item.getTradeScope());
|
value.setTradeScopeSnapshot(item.getTradeScope());
|
||||||
|
|||||||
@@ -108,12 +108,14 @@ async function loadFeeItem(context, direction) {
|
|||||||
? item.warehouseReceivable === true : item.warehousePayable === true)) || null
|
? item.warehouseReceivable === true : item.warehousePayable === true)) || null
|
||||||
}
|
}
|
||||||
|
|
||||||
async function createManualFee(context, resource, feeItem, direction, amount, basis, businessDate) {
|
async function createManualFee(context, resource, feeItem, direction, amount, basis, businessDate, partner = null) {
|
||||||
if (context.financeFixtureHooks?.createManualFee) return context.financeFixtureHooks.createManualFee(context, resource, feeItem, direction, amount, basis, businessDate)
|
if (context.financeFixtureHooks?.createManualFee) return context.financeFixtureHooks.createManualFee(context, resource, feeItem, direction, amount, basis, businessDate)
|
||||||
const basePath = `/api/platform/v1/inbounds/${encodeURIComponent(resource.inboundId)}/fee-details`
|
const basePath = `/api/platform/v1/inbounds/${encodeURIComponent(resource.inboundId)}/fee-details`
|
||||||
const listPath = `${basePath}?accountId=${encodeURIComponent(resource.tenantId)}`
|
const listPath = `${basePath}?accountId=${encodeURIComponent(resource.tenantId)}`
|
||||||
const body = { feeItemId: Number(feeItem.id), direction, businessDate,
|
const body = { feeItemId: Number(feeItem.id), direction, businessDate,
|
||||||
unitPrice: amount, currency: 'CNY', amount, settlementIncluded: true, remark: `${context.marker}-${basis}` }
|
unitPrice: amount, currency: 'CNY', amount, settlementIncluded: true,
|
||||||
|
partnerId: partner?.id ? String(partner.id) : null, partnerName: partner?.partnerName || null,
|
||||||
|
remark: `${context.marker}-${basis}` }
|
||||||
const response = await request(context, 'POST', listPath, body)
|
const response = await request(context, 'POST', listPath, body)
|
||||||
const detail = context.apiSuccess(MODULE, `${basis}人工费用明细`, response, `inboundId=${resource.inboundId}`, OPTIONS)
|
const detail = context.apiSuccess(MODULE, `${basis}人工费用明细`, response, `inboundId=${resource.inboundId}`, OPTIONS)
|
||||||
const feeId = id(detail?.id)
|
const feeId = id(detail?.id)
|
||||||
@@ -342,7 +344,7 @@ export async function run(context) {
|
|||||||
if (feeItems.PAYABLE && supplier?.id) {
|
if (feeItems.PAYABLE && supplier?.id) {
|
||||||
for (const [index, manualResource] of manualResources.entries()) {
|
for (const [index, manualResource] of manualResources.entries()) {
|
||||||
const fee = await createManualFee(context, manualResource, feeItems.PAYABLE, 'PAYABLE', 80 + index * 10,
|
const fee = await createManualFee(context, manualResource, feeItems.PAYABLE, 'PAYABLE', 80 + index * 10,
|
||||||
'MANUAL_ORDER_FEE', dateOffset(-3 - index))
|
'MANUAL_ORDER_FEE', dateOffset(-3 - index), supplier)
|
||||||
if (fee) fixtures.push({ ...fee, supplierId: id(supplier.id), partnerId: id(supplier.id), supplierName: supplier.partnerName || null })
|
if (fee) fixtures.push({ ...fee, supplierId: id(supplier.id), partnerId: id(supplier.id), supplierName: supplier.partnerName || null })
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user