From 60c75adea8fe59dc1b3e25fb1b5689249bbc3d8a Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Thu, 2 Jul 2020 20:42:06 +0800 Subject: [PATCH] 1 --- server/imserver/player.cc | 51 +++++++++++++++++++++++++++++++-------- 1 file changed, 41 insertions(+), 10 deletions(-) diff --git a/server/imserver/player.cc b/server/imserver/player.cc index 8d8b050..71f6c65 100644 --- a/server/imserver/player.cc +++ b/server/imserver/player.cc @@ -253,17 +253,31 @@ void Player::_CMFriendApplyList(f8::MsgHdr& hdr, const cs::CMFriendApplyList& ms paging_copy->set_page_size(20); #endif a8::XObject conn_info = DBEngine::Instance()->GetConnInfo(myself.crc32_code); + std::string fmtstr = "'',"; + std::vector sql_params; + { + sql_params.push_back(a8::XValue(last_apply_idx_)); + sql_params.push_back(a8::XValue(myself.base_data.account_id)); + + for (auto& pair : black_hash_) { + fmtstr += "'%s',"; + sql_params.push_back(a8::XValue(pair.second->base_data.account_id)); + } + if (!fmtstr.empty()) { + fmtstr = fmtstr.substr(0, fmtstr.size() - 1); + } + } DBEngine::Instance()->ExecAsyncQuery ( conn_info, - "SELECT idx, applyid, target_id, sender_id, sender_nickname, " - " sender_avatar_url, sender_sex, sender_data_version1, " - " sender_user_value1, sender_user_value2, sender_user_value3, status " - "FROM friend_apply WHERE idx > %d AND target_id='%s' AND status=0;", - { - last_apply_idx_, - myself.base_data.account_id - }, + ( + "SELECT idx, applyid, target_id, sender_id, sender_nickname, " + " sender_avatar_url, sender_sex, sender_data_version1, " + " sender_user_value1, sender_user_value2, sender_user_value3, status " + "FROM friend_apply WHERE idx > %d AND target_id='%s' AND status=0 " + " AND sender_id NOT IN(" + fmtstr + ");" + ).c_str(), + sql_params, a8::XParams() .SetSender(myself.base_data.account_id) .SetParam1(hdr.socket_handle) @@ -1277,11 +1291,28 @@ void Player::RecalcRedPoint() }; a8::XObject conn_info = DBEngine::Instance()->GetConnInfo(myself.crc32_code); + std::string fmtstr = "'',"; + std::vector sql_params; + { + sql_params.push_back(a8::XValue(last_apply_idx_)); + sql_params.push_back(a8::XValue(myself.base_data.account_id)); + + for (auto& pair : black_hash_) { + fmtstr += "'%s',"; + sql_params.push_back(a8::XValue(pair.second->base_data.account_id)); + } + if (!fmtstr.empty()) { + fmtstr = fmtstr.substr(0, fmtstr.size() - 1); + } + } DBEngine::Instance()->ExecAsyncQuery ( conn_info, - "SELECT idx, applyid " - "FROM friend_apply WHERE idx > %d AND target_id='%s' AND status=0 LIMIT 1;", + ( + "SELECT idx, applyid " + "FROM friend_apply WHERE idx > %d AND target_id='%s' AND status=0 " + " AND sender_id NOT IN(" + fmtstr + ") LIMIT 1;" + ).c_str(), { last_apply_idx_, myself.base_data.account_id