public PagedResults <ContractInfoModel> Query(QueryContractParam param) { var sql = $"select distinct(\"name\") \"name\" from chain.account where encode(abi, 'escape') != ''"; var configs = DbContext.ExecuteSqlQuery <Account2>(sql) .Select(a => new ContractConfig { Name = a.name }).ToList(); var pagerInfo = new PagerInfo(param) { TotalRowCount = configs.Count }; configs = configs.Skip((param.PageIndex - 1) * param.PageSize).Take(param.PageSize).ToList(); var codes = configs.Select(m => m.Name).ToList(); var now = DateTime.UtcNow; var start = now.AddHours(-24); var blocks = DbContext.GetDbSet <BlockInfo>() .Where(m => m.Timestamp >= start && m.Timestamp <= now) .OrderBy(m => m.BlockNum) .Select(m => m.BlockNum); var startBlock = blocks.FirstOrDefault(); var endBlock = blocks.LastOrDefault(); var accountMetas = DbContext.GetDbSet <AccountMetadata>() .Where(m => codes.Contains(m.Name)) .ToList(); var sqlContractStatistical = $@"SELECT act_account ""Name"", COUNT(act_account) ""TotalCallCount"", COUNT(DISTINCT(receiver)) ""TotalActiveAccountCount"" FROM CHAIN.action_trace WHERE act_account IN({string.Join(',', codes.Select(m => $"'{m}'"))}) AND block_num >= {startBlock} AND block_num <= {endBlock} GROUP BY act_account"; var list = DbContext.ExecuteSqlQuery <ContractStatisticalModel>(sqlContractStatistical); var pagedData = configs.Select(m => { var temps = list.SingleOrDefault(t => t.Name == m.Name); return(new ContractInfoModel { Name = m.Name, TotalCallCount = temps?.TotalCallCount ?? 0, TotalActiveAccountCount = temps?.TotalActiveAccountCount ?? 0, OneTimeCheckState = EnumOneTimeCheckState.Pass, CodeAuditStatus = EnumCodeAuditStatus.HasTheAudit, LastUpdateTime = accountMetas.Where(a => a.Name == m.Name) .OrderByDescending(a => a.BlockNum) .First() .LastCodeUpdate }); }) .ToList(); return(new PagedResults <ContractInfoModel> { PagerInfo = pagerInfo, Data = pagedData }); }
public async Task <ExcutedResult> Query(QueryContractParam param) { var pagedResults = await _contractServiceModel.Query(param); return(ExcutedResult.SuccessResult(pagedResults)); }
public async Task <PagedResults <ContractInfoModel> > Query(QueryContractParam param) { return(_contractRepository.Query(param)); }