void UserStatSaveTask::handle() { StatMap stmap; StatManagerI::instance().popStatMap(stmap); if (stmap.empty()) { return; } Statement sql; string head = "insert into user_stat (userid,login_count,send_msg_count,rev_msg_count,online_buddy_count) values"; int count = 0; for (StatMap::iterator it = stmap.begin(); it != stmap.end(); ++it) { count++; if (count == 1) { sql.clear(); sql << head; } int onlineBuddy = 0; try { onlineBuddy = OnlineCenterAdapter::instance().getBuddyCount( it->first); } catch (Ice::Exception & e) { MCE_WARN("UserStatSaveTask::handle --> get OnlineBuddyCount err :" << e); } if (count > 1) { sql << ","; } sql << "(" << it->first << "," << it->second->loginCount << "," << it->second->msgCount << "," << it->second->revMsgCount << "," << onlineBuddy << ")"; if (count == 5000) { try { QueryRunner("im_stat", CDbWServer).schedule(sql); } catch (...) { MCE_WARN("UserStatSaveTask::handle --> do sql err"); } sql.clear(); count = 0; } } if (!sql.empty()) { try { QueryRunner("im_stat", CDbWServer).schedule(sql); } catch (...) { MCE_WARN("UserStatSaveTask::handle --> do sql err2"); } } }