如何在没有特定状态的情况下获取交易记录

时间:2018-10-12 09:23:34

标签: corda

我尝试获取Corda上的交易记录。 我需要获取一定时期内的交易金额 我的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))

但是,我需要跨除某些州以外的所有州进行交易。

corda有什么机制吗?

1 个答案:

答案 0 :(得分:0)

没有任何类型的查询条件专门排除某些状态。但是,您可以定义专门包含 某些状态的查询条件,然后使用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)

这将检索同时满足您的时间条件和类型条件的所有状态。