Almacén de Pagos
El Almacén de Pagos IPF es una interfaz diseñada para almacenar y consultar datos relacionados con pagos programados. Permite el almacenamiento de pagos creados en el presente pero programados para su procesamiento en un momento posterior.
El Almacén de Pagos opera como un MongoDB(incluyendo soporte para Azure Cosmos para MongoDB) interfaz de colección, facilitando el almacenamiento de detalles de pago en diversas formas, incluyendo Bulk, Lote, y Transacción.
características principales
-
Almacenamiento: Capaz de almacenar información de pago detallada.
-
Consulta: Proporciona métodos para recuperar y gestionar los pagos almacenados.
-
Purga: Proporciona configuración para purgar la información de pago almacenada.
API Descripción general
El Payment Warehouse API incluye los siguientes métodos fundamentales:
package com.iconsolutions.ipf.core.warehouse.port;
import com.iconsolutions.ipf.core.shared.domain.context.UnitOfWorkId;
import com.iconsolutions.ipf.warehouse.PaymentEntry;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
import java.util.List;
import java.util.Optional;
public interface PaymentWarehouse {
Mono<PaymentEntry> save(PaymentEntry paymentEntry);
Flux<PaymentEntry> findAllByUnitOfWorkId(UnitOfWorkId unitOfWorkId);
Mono<Long> countRelatedUnitOfWorkIds(UnitOfWorkId unitOfWorkId);
Flux<UnitOfWorkId> findRelatedUnitOfWorkIds(UnitOfWorkId unitOfWorkId, Pageable pageable);
Flux<List<PaymentEntry>> findAllByUnitOfWorkIds(List<UnitOfWorkId> unitOfWorkIds);
Flux<List<PaymentEntry>> findAllByRelatedUnitOfWorkId(UnitOfWorkId relatedUnitOfWorkId, Optional<UnitOfWorkId> offset);
Mono<Void> markBatchAsDone(UnitOfWorkId unitOfWorkId);
}
A continuación se presenta una descripción detallada de los métodos proporcionados por la API:
-
save: Persiste los datos de pago en el almacén. Soporta el almacenamiento de datos para procesos masivos, por lotes y transacciones. -
findAllByUnitOfWorkId: Recupera todas las entradas de pago asociadas con un identificador de UnitOfWork específico. Se utiliza para obtener el conjunto completo de instrucciones de pago para una unidad de trabajo dada. -
countRelatedUnitOfWorkIds: Devuelve el conteo de identificadores de unidad de trabajo relacionados únicos para un UnitOfWorkId especificado. Útil para determinar la extensión de las unidades de trabajo relacionadas. -
findRelatedUnitOfWorkIds: Recupera una lista paginada de UnitOfWorkIds relacionados para un UnitOfWorkId dado. Ayuda a navegar a través de unidades de trabajo relacionadas, particularmente en conjuntos de datos grandes. -
findAllByUnitOfWorkIds: Recupera las entradas de pago correspondientes a una lista de UnitOfWorkIds. Obtiene los detalles de la transacción para múltiples unidades de trabajo en una sola llamada. -
findAllByRelatedUnitOfWorkId: Recupera las entradas de pago que están relacionadas con el mismo UnitOfWorkId. Las entradas de pago con el mismo UnitOfWorkId se agrupan en una lista. -
markBatchAsDone: Marca un Lote específico y su asociación de Transacciones como 'hecho'. Activa cualquier necesario mantenimiento del hogar operaciones, como la eliminación de entradas de pago que ya no son necesarias.
Métodos findRelatedUnitOfWorkIds,findAllByUnitOfWorkIds,countRelatedUnitOfWorkIds están obsoletos.
|
Estructura de Entrada de Pago
El PaymentEntry la clase representa los documentos almacenados y consultados por el Almacén de Pagos:
package com.iconsolutions.ipf.core.warehouse;
import com.iconsolutions.ipf.core.shared.domain.context.ProcessingContext;
import com.iconsolutions.ipf.core.shared.domain.context.UnitOfWorkId;
import lombok.Builder;
import lombok.Data;
import java.time.Instant;
import java.util.List;
@Data
@Builder
public class PaymentEntry {
private PaymentEntryId id;
private ProcessingContext processingContext;
private UnitOfWorkId relatedUnitOfWorkId;
private String globalState;
private PaymentEntryType type;
private List<BusinessDataEntry> data;
/**
* TTL represents time in seconds after which the record will expire.
* This field is unique to Azure CosmosDB (must be an int named ttl)
*/
private Integer ttl;
/**
* Represents exact instant when this task is eligible for deletion.
* MongoDB requires field to be date type.
*/
private Instant expiryDate;
}
El BusinessDataEntry representa datos comerciales específicos del cliente:
package com.iconsolutions.ipf.core.warehouse;
import lombok.Builder;
import lombok.Data;
@Data
@Builder
public class BusinessDataEntry {
private String objectId;
private String parentObjectId;
private String name;
private String version;
private Category category;
private Class<?> contentType;
private String content;
public enum Category {
MDS, PDS, DOMAIN_EVENT;
}
}
MongoDB Representación
El correspondiente MongoDB representación de PaymentEntry se define en el MongoPaymentEntry clase:
package com.iconsolutions.ipf.core.warehouse.port.mongo.repository;
import lombok.Builder;
import lombok.Data;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
import java.time.Instant;
import java.util.List;
@Document(collection = "paymententries")
@Data
@Builder
public class MongoPaymentEntry {
@Id
private String id;
private String unitOfWorkId;
private String relatedUnitOfWork;
private String clientRequestId;
private String associationId;
private String processingEntity;
private Integer sequence;
private String globalState;
private String type;
/**
* TTL represents time in seconds after which the record will expire.
* This field is unique to Azure CosmosDB (must be an int named "ttl")
*/
private Integer ttl;
/**
* Represents exact instant when this task is eligible for deletion.
* MongoDB requires field to be date type.
*/
private Instant expiryDate;
private List<MongoBusinessDataEntry> data;
}
El correspondiente MongoDB representación de BusinessDataEntry se define en el MongoBusinessDataEntry clase:
package com.iconsolutions.ipf.core.warehouse.port.mongo.repository;
import lombok.Builder;
import lombok.Data;
@Data
@Builder
public class MongoBusinessDataEntry {
private String objectId;
private String parentObjectId;
private String name;
private String version;
private String category;
private String contentType;
private String content;
}