瀏覽代碼

1、上传1000个SN抄写结果耗时过长,改成200个SN抄写结果上传一次;
2、修复map导致批次上报无效的问题,使用multimap代替map,key可重复;
3、修复批量上传时,由于超时值过小导致上传超时的问题;
4、修复批量更新db失败的问题;

scbc.sat2 5 年之前
父節點
當前提交
2cd76248bd

+ 4 - 4
scbc.tools/scbc.tools/CurlClient.cpp

@@ -659,7 +659,7 @@ bool CCurlClient::DownloadEx(const std::string &url, const std::string &path, lo
 
 // 表单提交;
 // 注意与普通的post提交区别在于:CURLOPT_POST、CURLOPT_HTTPPOST
-int CCurlClient::FormPost(std::string url, std::map<std::string, std::string> form_data, std::string &result, long time_out)
+int CCurlClient::FormPost(std::string url, std::multimap<std::string, std::string> form_data, std::string &result, long time_out)
 {
 	CURLcode res;   
 	CURL* curl = curl_easy_init();   
@@ -679,7 +679,7 @@ int CCurlClient::FormPost(std::string url, std::map<std::string, std::string> fo
 	CURLFORMcode rmcode;
 	struct curl_httppost* formpost = NULL;
 	struct curl_httppost* lastptr = NULL;
-	std::map<std::string, std::string>::iterator it = form_data.begin();
+	std::multimap<std::string, std::string>::iterator it = form_data.begin();
 #if 0
 	for (; it != form_data.end(); )
 	{
@@ -746,7 +746,7 @@ int CCurlClient::FormPost(std::string url, std::map<std::string, std::string> fo
 	return res;   
 }
 
-int CCurlClient::FormPosts(std::string url, std::map<std::string, std::string> form_data, std::string &result, long time_out)
+int CCurlClient::FormPosts(std::string url, std::multimap<std::string, std::string> form_data, std::string &result, long time_out)
 {
 	CURLcode res;   
 	CURL* curl = curl_easy_init();   
@@ -766,7 +766,7 @@ int CCurlClient::FormPosts(std::string url, std::map<std::string, std::string> f
 	CURLFORMcode rmcode;
 	struct curl_httppost* formpost = NULL;
 	struct curl_httppost* lastptr = NULL;
-	std::map<std::string, std::string>::iterator it = form_data.begin();
+	std::multimap<std::string, std::string>::iterator it = form_data.begin();
 #if 0
 	for (; it != form_data.end(); )
 	{

+ 2 - 2
scbc.tools/scbc.tools/CurlClient.h

@@ -72,8 +72,8 @@ public:
 	bool Download(const std::string &url, const std::string &path, long time_out = 3000);
 	bool DownloadEx(const std::string &url, const std::string &path, long time_out = 3000);
 
-	int FormPost(std::string url, std::map<std::string, std::string> form_data, std::string &result, long time_out = 3000);
-	int FormPosts(std::string url, std::map<std::string, std::string> form_data, std::string &result, long time_out = 3000);
+	int FormPost(std::string url, std::multimap<std::string, std::string> form_data, std::string &result, long time_out = 3000);
+	int FormPosts(std::string url, std::multimap<std::string, std::string> form_data, std::string &result, long time_out = 3000);
 public:   
 	void SetDebug(bool bDebug); 
 	void SetHeaders(const std::string headers);

+ 6 - 9
scbc.tools/scbc.tools/DataImpl.cpp

@@ -280,7 +280,7 @@ INT CDataImpl::QueryUnReportKeyInfo(std::vector<STKeys> &vtdata)
 
 	char** pazResult = NULL;
 	char* psqlite_error = NULL;
-	std::string strSql = "SELECT sn,copy_date FROM keys WHERE copy_date <> '' and report_date = '' LIMIT 0,1000";
+	std::string strSql = "SELECT sn,copy_date FROM keys WHERE copy_date <> '' and report_date = '' LIMIT 0,200";
 	int sqlite_error = sqlite3_get_table(m_psqlite3, strSql.c_str(), &pazResult, &nRow, &nCol, &psqlite_error);
 	if ( sqlite_error != SQLITE_OK)
 	{
@@ -682,19 +682,16 @@ BOOL CDataImpl::BatchUpdateKeyReportStatus(std::vector<STKeys> &vtKeys)
 		return FALSE;
 	}
 
-	sqlite3_stmt *stmt;
-	const char* sql = "UPDATE keys set report_date=current_timestamp WHERE sn = '?'";
-	sqlite3_prepare_v2(m_psqlite3, sql, strlen(sql), &stmt, 0);
-
+	char szSql[1024] = {0};
+	const char* szFormat = "UPDATE keys set report_date=current_timestamp WHERE sn = '%s'";
 	std::vector<STKeys>::iterator it = vtKeys.begin();
 	for ( int i = 0; it != vtKeys.end(); it++, i++ )
 	{
-		sqlite3_reset(stmt);  
-		sqlite3_bind_text(stmt, 1, it->sn.c_str(), it->sn.size(), SQLITE_STATIC);    
-		sqlite3_step(stmt);  
+		_stprintf_s(szSql,szFormat,it->sn.c_str());
+		sqlite3_exec(m_psqlite3, szSql, NULL, NULL, &psqlite_error);
+		FREE_MSG;
 	}
 
-	nRet = sqlite3_finalize(stmt); 
 	if ( nRet != SQLITE_OK )
 	{
 		// »Ø¹öÊÂÎñ;

+ 3 - 3
scbc.tools/scbc.tools/SDK.cpp

@@ -210,7 +210,7 @@ int CSDK::ReportKeyCopyResults(std::string sn)
 	{
 		// Éϱ¨;
 		std::string result;
-		std::map<std::string, std::string> form;
+		std::multimap<std::string, std::string> form;
 		form.insert(std::pair<std::string,std::string>("sn", sn));
 		form.insert(std::pair<std::string,std::string>("date", keys.copy_date));
 		CCurlClient curl;
@@ -263,7 +263,7 @@ int CSDK::BatchReportKeyCopyResults()
 
 	// Éϱ¨;
 	std::string result;
-	std::map<std::string, std::string> form;
+	std::multimap<std::string, std::string> form;
 	std::vector<STKeys>::iterator it = vtkeys.begin();
 	for (; it != vtkeys.end(); it++)
 	{
@@ -273,7 +273,7 @@ int CSDK::BatchReportKeyCopyResults()
 
 	CCurlClient curl;
 	curl.Initialize();
-	if ( curl.FormPosts(_host + "/reportlist.do?", form, result,3) == CURLE_OK)
+	if ( curl.FormPosts(_host + "/reportlist.do?", form, result) == CURLE_OK)
 	{
 		cJSON *pJson = cJSON_Parse(result.c_str());
 		if ( pJson == NULL )