From 75c61bfff50f2789fa049af14c77fda0d9296abf Mon Sep 17 00:00:00 2001 From: xxq250 Date: Fri, 27 Sep 2024 14:19:52 +0800 Subject: [PATCH] =?UTF-8?q?=E5=90=88=E5=B9=B6=E5=8C=BA=E5=9D=97=E7=A1=AE?= =?UTF-8?q?=E8=AE=A4=E6=9F=A5=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/queries/application_query.rb | 20 ++++++++++++++++++++ app/queries/blockchain/balance_query.rb | 10 ++++++++-- 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/app/queries/application_query.rb b/app/queries/application_query.rb index e2d7c446f..4d43bfeb6 100644 --- a/app/queries/application_query.rb +++ b/app/queries/application_query.rb @@ -24,6 +24,26 @@ class ApplicationQuery end end + # find one repo that a user has tokens + def find_one_balance_with_token(user_id, project_id) + # return 3 statuses: UnknownErr/ResUserNotExisted/Success + params = { + "request-type": "query user balance of single repo", + "username": user_id.to_s, + "token_name": project_id.to_s + }.to_json + Rails.logger.info "query user balance of single repo params======= #{params}" + resp_body = Blockchain::InvokeBlockchainApi.call(params) + Rails.logger.info "resp_body======= #{resp_body}" + if resp_body['status'] == 0 + return resp_body + elsif resp_body['status'] == 100 + return 0 # 找不到用户返回0 + else + raise "区块链接口请求失败." + end + end + # find one repo that a user has tokens def find_one_balance(user_id, project_id) diff --git a/app/queries/blockchain/balance_query.rb b/app/queries/blockchain/balance_query.rb index 045d2fe8a..d50b38ee6 100644 --- a/app/queries/blockchain/balance_query.rb +++ b/app/queries/blockchain/balance_query.rb @@ -11,9 +11,15 @@ class Blockchain::BalanceQuery < ApplicationQuery if is_current_admin_user result_list = [] if params[:project_id].present? or params[:keyword].present? - project_ids = params[:project_id].present? ? [params[:project_id]] : Project.where(user_id: params["user_id"]).like(params[:keyword]).ids + token_list, total_count = find_repo_with_token(params["user_id"], 1, 10000) + p_ids = [] + token_list.each do |t| + p_ids.push(t['token_name'].to_i) + end + project_ids = params[:project_id].present? ? [params[:project_id]] : Project.where(id: p_ids).like(params[:keyword]).ids project_ids.each do |project_id| - project_balance = find_one_balance(params["user_id"], project_id) + project_balance = find_one_balance_with_token(params["user_id"], project_id) + next if project_balance == 0 project = Project.find_by(id: project_balance['token_name'].to_i) if project.present? owner = User.find_by(id: project.user_id)