Как получить историю транзакций без определенного состояния - PullRequest
0 голосов
/ 12 октября 2018

Я пытаюсь получить историю транзакций на корде.Мне нужно получить сумму транзакции за определенный период. Мои api для этого:

@GET
@Path("transactions")
@Produces(MediaType.APPLICATION_JSON)
fun gettransatcions(): List<StateAndRef<ContractState>> {

    val TODAY = Instant.now()
    val pagingSpec = PageSpecification(DEFAULT_PAGE_NUM, 100)
    val start = TODAY.minus(1, ChronoUnit.HOURS)
    val end = TODAY.plus(1, ChronoUnit.HOURS)

    val recordedBetweenExpression = QueryCriteria.TimeCondition(
            QueryCriteria.TimeInstantType.RECORDED,
            ColumnPredicate.Between(start, end))

    val criteria = QueryCriteria.VaultQueryCriteria(timeCondition = recordedBetweenExpression,status = Vault.StateStatus.ALL)
    val results = rpcOps.vaultQueryBy<ContractState>(criteria, paging = pagingSpec)
    val size = results.states.count()

    return rpcOps.vaultQueryBy<ContractState>().states
}

, где: val rpcOps: CordaRPCOps

Я могу явно указать состояния, для которых принимаются транзакции, например:

val criteria = VaultQueryCriteria(contractStateTypes = setOf(Cash.State::class.java, DealState::class.java))

но мне нужно получать транзакции через все состояния, кроме определенного .

Есть ли у Корды механизм для этого?

1 Ответ

0 голосов
/ 19 октября 2018

Не существует критерия запроса, который конкретно исключает определенные состояния.Однако вы можете определить критерии запроса, в частности , включающие определенные состояния, а затем объединить их с вашими существующими критериями, используя композицию AND:

val TODAY = Instant.now()
val pagingSpec = PageSpecification(DEFAULT_PAGE_NUM, 100)
val start = TODAY.minus(1, ChronoUnit.HOURS)
val end = TODAY.plus(1, ChronoUnit.HOURS)

val recordedBetweenExpression = QueryCriteria.TimeCondition(
        QueryCriteria.TimeInstantType.RECORDED,
        ColumnPredicate.Between(start, end))

val timeCriteria = QueryCriteria.VaultQueryCriteria(timeCondition = recordedBetweenExpression, status = Vault.StateStatus.ALL)
val typeCriteria = QueryCriteria.VaultQueryCriteria(contractStateTypes = setOf(State1::class.java, State2::class.java), status = Vault.StateStatus.ALL)
val combinedCriteria = timeCriteria.and(typeCriteria)
val results = rpcOps.vaultQueryBy<ContractState>(combinedCriteria, paging = pagingSpec)

. Это позволит получить все состояния, которыесоответствуют вашим временным критериям и критериям типа.

...