浏览代码

完成数据库相关开发。

Jeff 5 年之前
父节点
当前提交
0fe0bfdfc1

+ 171 - 599
scbc.tools/scbc.tools/DataImpl.cpp

@@ -4,6 +4,7 @@
 #include "Global.h"
 
 #define FREE_MSG if ( m_pszErrmsg ) { sqlite3_free(m_pszErrmsg); m_pszErrmsg = NULL;}
+#define FREE_MSG2 if ( psqlite_error ) { sqlite3_free(psqlite_error); psqlite_error = NULL;}
 
 CDataImpl::CDataImpl(void):m_psqlite3(NULL),m_pszErrmsg(NULL)
 {
@@ -30,19 +31,19 @@ BOOL CDataImpl::Open()
 		return FALSE;
 
 	// 创建表;
-	if ( !QueryTable("MID"))
+	if ( !QueryTable("mid"))
 	{
 		sqlite3_exec(m_psqlite3, _CREATE_MID_TABLE_, NULL, NULL, &m_pszErrmsg);
 		FREE_MSG
 	}
 
-	if ( !QueryTable("KeyCopy"))
+	if ( !QueryTable("keys"))
 	{
-		sqlite3_exec(m_psqlite3, _CREATE_KC_TABLE_, NULL, NULL, &m_pszErrmsg);
+		sqlite3_exec(m_psqlite3, _CREATE_KEYS_TABLE_, NULL, NULL, &m_pszErrmsg);
 		FREE_MSG
 	}
 
-	if ( !QueryTable("Log"))
+	if ( !QueryTable("log"))
 	{
 		sqlite3_exec(m_psqlite3, _CREATE_LOG_TABLE_, NULL, NULL, &m_pszErrmsg);
 		FREE_MSG
@@ -78,7 +79,7 @@ BOOL CDataImpl::ExecteSQL(IN LPCSTR lpSQL)
 	if(SQLITE_OK != sqlite_error)
 	{
 		//Global::WriteTextLog(_T("ExecteSQL:%s"), psqlite_error);
-		FREE_MSG
+		FREE_MSG2
 		return FALSE;
 	}
 
@@ -125,7 +126,11 @@ INT CDataImpl::QueryMidInfo(std::string order, STMid &data)
 	INT nCol = 0;
 
 	char** pazResult = NULL;
-	int sqlite_error = sqlite3_get_table(m_psqlite3, _SELECT_MID_TABLE_, &pazResult, &nRow, &nCol, &m_pszErrmsg);
+	std::string strSql = _SELECT_MID_TABLE_;
+	strSql.append(" WHERE bid = '");
+	strSql.append(order);
+	strSql.append("';");
+	int sqlite_error = sqlite3_get_table(m_psqlite3, strSql.c_str(), &pazResult, &nRow, &nCol, &m_pszErrmsg);
 	if ( sqlite_error != SQLITE_OK)
 	{
 		//Global::WriteTextLog(_T("QueryContactsType:%s"), m_pszErrmsg);
@@ -170,7 +175,7 @@ INT CDataImpl::QueryMidInfo(std::string order, STMid &data)
 	return nRow;
 }
 
-INT CDataImpl::QueryKeyInfo(std::string sn, STKeyCopy &data)
+INT CDataImpl::QueryKeyInfo(std::string sn, STKeys &data)
 {
 	if ( m_psqlite3 == NULL )
 		return -1;
@@ -179,10 +184,15 @@ INT CDataImpl::QueryKeyInfo(std::string sn, STKeyCopy &data)
 	INT nCol = 0;
 
 	char** pazResult = NULL;
-	int sqlite_error = sqlite3_get_table(m_psqlite3, _SELECT_KC_TABLE_, &pazResult, &nRow, &nCol, &m_pszErrmsg);
+	std::string strSql = _SELECT_KEYS_TABLE_;
+	strSql.append(" WHERE sn = '");
+	strSql.append(sn);
+	strSql.append("';");
+	int sqlite_error = sqlite3_get_table(m_psqlite3, strSql.c_str(), &pazResult, &nRow, &nCol, &m_pszErrmsg);
 	if ( sqlite_error != SQLITE_OK)
 	{
 		//Global::WriteTextLog(_T("QueryContactsInfo:%s"), m_pszErrmsg);
+		FREE_MSG
 		return -1;
 	}
 
@@ -211,7 +221,7 @@ INT CDataImpl::QueryKeyInfo(std::string sn, STKeyCopy &data)
 	return nRow;
 }
 
-INT CDataImpl::QueryLogInfo(std::string sn, STLog &data)
+INT CDataImpl::QueryUnReportKeyInfo(std::vector<STKeys> &vtdata)
 {
 	if ( m_psqlite3 == NULL )
 		return -1;
@@ -220,25 +230,21 @@ INT CDataImpl::QueryLogInfo(std::string sn, STLog &data)
 	INT nCol = 0;
 
 	char** pazResult = NULL;
-	int sqlite_error = sqlite3_get_table(m_psqlite3, _SELECT_LOG_TABLE_, &pazResult, &nRow, &nCol, &m_pszErrmsg);
+	std::string strSql = "SELECT sn,copy_date FROM keys WHERE copy_date <> '' and report_status in(0,-1)";
+	int sqlite_error = sqlite3_get_table(m_psqlite3, strSql.c_str(), &pazResult, &nRow, &nCol, &m_pszErrmsg);
 	if ( sqlite_error != SQLITE_OK)
 	{
-		//Global::WriteTextLog(_T("QueryTaskInfo:%s"), m_pszErrmsg);
+		//Global::WriteTextLog(_T("QueryContactsInfo:%s"), m_pszErrmsg);
+		FREE_MSG
 		return -1;
 	}
 
-	if ( nRow == 1 )
+	vtdata.resize(nRow);
+	std::vector<STKeys>::iterator it = vtdata.begin();
+	for(int i = 1; i <= nRow; i++, it++)
 	{
-#ifndef USE_UTF8
-		data.type = pazResult[nCol+0];
-		data.sn = pazResult[nCol+1];
-		data.content = pazResult[nCol+2];
-#else
-		// 由Native for SQLite3插入的数据,都是utf8格式;
-		data.type = CharEncoding::UTF82ASCII(pazResult[nCol+0]);
-		data.sn = CharEncoding::UTF82ASCII(pazResult[nCol+1]);
-		data.content = CharEncoding::UTF82ASCII(pazResult[nCol+2]);
-#endif
+		it->sn = pazResult[i*nCol+0];
+		it->copy_date= pazResult[i*nCol+1];
 	}
 
 	sqlite3_free_table(pazResult);
@@ -246,8 +252,7 @@ INT CDataImpl::QueryLogInfo(std::string sn, STLog &data)
 	return nRow;
 }
 
-#if 0
-INT CDataImpl::QuerySendRecord(IN OUT std::vector<STSendRecord> &vtSendRecord)
+INT CDataImpl::QueryLogInfo(std::string sn, STLog &data)
 {
 	if ( m_psqlite3 == NULL )
 		return -1;
@@ -256,39 +261,30 @@ INT CDataImpl::QuerySendRecord(IN OUT std::vector<STSendRecord> &vtSendRecord)
 	INT nCol = 0;
 
 	char** pazResult = NULL;
-	int sqlite_error = sqlite3_get_table(m_psqlite3, "select Autoid, SendId, SendType, SendDateTime,SendPhone,SendContent,SendStatus,SendLog from SendRecord", &pazResult, &nRow, &nCol, &m_pszErrmsg);
+	int sqlite_error = sqlite3_get_table(m_psqlite3, _SELECT_LOG_TABLE_, &pazResult, &nRow, &nCol, &m_pszErrmsg);
 	if ( sqlite_error != SQLITE_OK)
 	{
-		//Global::WriteTextLog(_T("QueryContactsType:%s"), m_pszErrmsg);
+		//Global::WriteTextLog(_T("QueryTaskInfo:%s"), m_pszErrmsg);
+		FREE_MSG
 		return -1;
 	}
 
-	for(int i = 1; i <= nRow; i++)
+	if ( nRow == 1 )
 	{
-		STSendRecord tagObj;
-
 #ifndef USE_UTF8
-		tagObj.strAutoid = pazResult[i*nCol + 0];
-		tagObj.strSendId = pazResult[i*nCol + 1];
-		tagObj.strSendType = pazResult[i*nCol + 2];
-		tagObj.strSendDateTime = pazResult[i*nCol + 3];
-		tagObj.strSendPhone = pazResult[i*nCol + 4];
-		tagObj.strSendContent = pazResult[i*nCol + 5];
-		tagObj.strSendResult = pazResult[i*nCol + 6];
-		tagObj.strSendLog = pazResult[i*nCol + 7];
+		data.type = pazResult[nCol+0];
+		data.sn = pazResult[nCol+1];
+		data.content = pazResult[nCol+2];
+		data.gdate = pazResult[nCol+3];
+		data.report_status = pazResult[nCol+4];
 #else
 		// 由Native for SQLite3插入的数据,都是utf8格式;
-		CharEncoding::UTF82ASCII(pazResult[i*nCol + 0], tagObj.strAutoid);
-		CharEncoding::UTF82ASCII(pazResult[i*nCol + 1], tagObj.strSendId);
-		CharEncoding::UTF82ASCII(pazResult[i*nCol + 2], tagObj.strSendType);
-		CharEncoding::UTF82ASCII(pazResult[i*nCol + 3], tagObj.strSendDateTime);
-		CharEncoding::UTF82ASCII(pazResult[i*nCol + 4], tagObj.strSendPhone);
-		CharEncoding::UTF82ASCII(pazResult[i*nCol + 5], tagObj.strSendContent);
-		CharEncoding::UTF82ASCII(pazResult[i*nCol + 6], tagObj.strSendResult);
-		CharEncoding::UTF82ASCII(pazResult[i*nCol + 7], tagObj.strSendLog);
+		data.type = CharEncoding::UTF82ASCII(pazResult[nCol+0]);
+		data.sn = CharEncoding::UTF82ASCII(pazResult[nCol+1]);
+		data.content = CharEncoding::UTF82ASCII(pazResult[nCol+2]);
+		data.gdate = pazResult[nCol+3];
+		data.report_status = pazResult[nCol+4];
 #endif
-
-		vtSendRecord.push_back(tagObj);
 	}
 
 	sqlite3_free_table(pazResult);
@@ -296,7 +292,7 @@ INT CDataImpl::QuerySendRecord(IN OUT std::vector<STSendRecord> &vtSendRecord)
 	return nRow;
 }
 
-INT CDataImpl::QuerySendRecord(IN LPCSTR lpSendId, IN OUT STSendRecord &SendRecord)
+INT CDataImpl::QueryUnReportLogInfo(std::vector<STLog> &vtdata)
 {
 	if ( m_psqlite3 == NULL )
 		return -1;
@@ -305,40 +301,23 @@ INT CDataImpl::QuerySendRecord(IN LPCSTR lpSendId, IN OUT STSendRecord &SendReco
 	INT nCol = 0;
 
 	char** pazResult = NULL;
-	std::string strQuery = "select Autoid, SendType, SendId, SendDateTime,SendPhone,SendContent,SendStatus,SendLog from SendRecord where SendId = '";
-	strQuery.append(lpSendId);
-	strQuery.append("';");
-	int sqlite_error = sqlite3_get_table(m_psqlite3, strQuery.c_str(), &pazResult, &nRow, &nCol, &m_pszErrmsg);
+	std::string strSql = "SELECT type, sn, content, gdate FROM log WHERE report_status in(0,-1)";
+	int sqlite_error = sqlite3_get_table(m_psqlite3, strSql.c_str(), &pazResult, &nRow, &nCol, &m_pszErrmsg);
 	if ( sqlite_error != SQLITE_OK)
 	{
-		//Global::WriteTextLog(_T("QueryContactsType:%s"), m_pszErrmsg);
+		//Global::WriteTextLog(_T("QueryContactsInfo:%s"), m_pszErrmsg);
+		FREE_MSG
 		return -1;
 	}
 
-	for(int i = 1; i <= nRow; i++)
+	vtdata.resize(nRow);
+	std::vector<STLog>::iterator it = vtdata.begin();
+	for(int i = 1; i <= nRow; i++, it++)
 	{
-		STSendRecord tagObj;
-
-#ifndef USE_UTF8
-		tagObj.strAutoid = pazResult[i*nCol + 0];
-		tagObj.strSendType = pazResult[i*nCol + 1];
-		tagObj.strSendId = pazResult[i*nCol + 2];
-		tagObj.strSendDateTime = pazResult[i*nCol + 3];
-		tagObj.strSendPhone = pazResult[i*nCol + 4];
-		tagObj.strSendContent = pazResult[i*nCol + 5];
-		tagObj.strSendResult = pazResult[i*nCol + 6];
-		tagObj.strSendLog = pazResult[i*nCol + 7];
-#else
-		// 由Native for SQLite3插入的数据,都是utf8格式;
-		CharEncoding::UTF82ASCII(pazResult[i*nCol + 0], SendRecord.strAutoid);
-		CharEncoding::UTF82ASCII(pazResult[i*nCol + 1], SendRecord.strSendType);
-		CharEncoding::UTF82ASCII(pazResult[i*nCol + 2], SendRecord.strSendId);
-		CharEncoding::UTF82ASCII(pazResult[i*nCol + 3], SendRecord.strSendDateTime);
-		CharEncoding::UTF82ASCII(pazResult[i*nCol + 4], SendRecord.strSendPhone);
-		CharEncoding::UTF82ASCII(pazResult[i*nCol + 5], SendRecord.strSendContent);
-		CharEncoding::UTF82ASCII(pazResult[i*nCol + 6], SendRecord.strSendResult);
-		CharEncoding::UTF82ASCII(pazResult[i*nCol + 7], SendRecord.strSendLog);
-#endif
+		it->type = pazResult[i*nCol+0];
+		it->sn= pazResult[i*nCol+1];
+		it->content= pazResult[i*nCol+2];
+		it->gdate= pazResult[i*nCol+3];
 	}
 
 	sqlite3_free_table(pazResult);
@@ -346,663 +325,256 @@ INT CDataImpl::QuerySendRecord(IN LPCSTR lpSendId, IN OUT STSendRecord &SendReco
 	return nRow;
 }
 
-INT CDataImpl::QuerySendRecordByAutoid(IN LPCSTR lpAutoId, IN OUT STSendRecord &SendRecord)
+BOOL CDataImpl::InsertMidInfo(STMid &data)
 {
-	if ( m_psqlite3 == NULL )
-		return -1;
-
-	INT nRow = 0;
-	INT nCol = 0;
-
-	char** pazResult = NULL;
-	std::string strQuery = "select Autoid, SendId, SendType, SendDateTime,SendPhone,SendContent,SendStatus,SendLog from SendRecord where Autoid = ";
-	strQuery.append(lpAutoId);
-	strQuery.append(";");
-	int sqlite_error = sqlite3_get_table(m_psqlite3, strQuery.c_str(), &pazResult, &nRow, &nCol, &m_pszErrmsg);
-	if ( sqlite_error != SQLITE_OK)
-	{
-		//Global::WriteTextLog(_T("QueryContactsType:%s"), m_pszErrmsg);
-		return -1;
-	}
-
-	for(int i = 1; i <= nRow; i++)
-	{
-		STSendRecord tagObj;
-
-#ifndef USE_UTF8
-		tagObj.strAutoid = pazResult[i*nCol + 0];
-		tagObj.strSendId = pazResult[i*nCol + 1];
-		tagObj.strSendType = pazResult[i*nCol + 2];
-		tagObj.strSendDateTime = pazResult[i*nCol + 3];
-		tagObj.strSendPhone = pazResult[i*nCol + 4];
-		tagObj.strSendContent = pazResult[i*nCol + 5];
-		tagObj.strSendResult = pazResult[i*nCol + 6];
-		tagObj.strSendLog = pazResult[i*nCol + 7];
-#else
-		// 由Native for SQLite3插入的数据,都是utf8格式;
-		CharEncoding::UTF82ASCII(pazResult[i*nCol + 0], SendRecord.strAutoid);
-		CharEncoding::UTF82ASCII(pazResult[i*nCol + 1], SendRecord.strSendId);
-		CharEncoding::UTF82ASCII(pazResult[i*nCol + 2], SendRecord.strSendType);
-		CharEncoding::UTF82ASCII(pazResult[i*nCol + 3], SendRecord.strSendDateTime);
-		CharEncoding::UTF82ASCII(pazResult[i*nCol + 4], SendRecord.strSendPhone);
-		CharEncoding::UTF82ASCII(pazResult[i*nCol + 5], SendRecord.strSendContent);
-		CharEncoding::UTF82ASCII(pazResult[i*nCol + 6], SendRecord.strSendResult);
-		CharEncoding::UTF82ASCII(pazResult[i*nCol + 7], SendRecord.strSendLog);
-#endif
-	}
-
-	sqlite3_free_table(pazResult);
-
-	return nRow;
-}
-
-BOOL CDataImpl::InsertContactsType(IN LPCSTR lpContactsType)
-{
-	if ( lpContactsType == NULL || lpContactsType[0] == '\0' )
-	{
-		//Global::WriteTextLog(_T("InsertContactsType:变量空!"));
-		return FALSE;
-	}
-
 	if(m_psqlite3 == NULL)
 		return FALSE;
 
-	std::string strInsert = "INSERT INTO ContactsType(ContactsType) VALUES ('";
-#ifndef USE_UTF8
-	strInsert.append(lpContactsType);
-#else
-	string str;
-	CharEncoding::ASCII2UTF8(lpContactsType,str);
-	strInsert.append(str);
-#endif
-	strInsert.append("');");
-
-	char* psqlite_error = NULL;
-	int sqlite_error = sqlite3_exec(m_psqlite3, strInsert.c_str(), NULL, 0, &psqlite_error);
-	if(SQLITE_OK != sqlite_error)
-	{
-		//Global::WriteTextLog(_T("InsertContactsType:%s"), psqlite_error);
-		return FALSE;
-	}
-
-	return TRUE;
-}
-
-BOOL CDataImpl::InsertContactsInfo(IN LPCSTR lpContactsType, IN LPCSTR lpContactsName, IN LPCSTR lpContactsPhone, IN LPCSTR lpContactsStatus)
-{
-	if ( lpContactsName == NULL || lpContactsName[0] == '\0' ||
-		lpContactsPhone == NULL || lpContactsPhone[0] == '\0' ||
-		lpContactsStatus == NULL || lpContactsStatus[0] == '\0' )
-	{
-		//Global::WriteTextLog(_T("InsertContactsInfo:变量空!"));
-		return FALSE;
-	}
-
-	if(m_psqlite3 == NULL)
-		return FALSE;
-
-	std::string strInsert = "INSERT INTO ContactsInfo(ContactsType,ContactsName,ContactsPhone,ContactsStatus) VALUES ('";
-#ifndef USE_UTF8
-	strInsert.append(lpContactsType);
+	std::string strInsert = "INSERT INTO mid(bid, number, pid, ctype, version, purl, psize, pmd5)VALUES ('";
+	strInsert.append(data.order);
 	strInsert.append("','");
-	strInsert.append(lpContactsName);
+	strInsert.append(data.number);
 	strInsert.append("','");
-	strInsert.append(lpContactsPhone);
+	strInsert.append(data.pid);
 	strInsert.append("','");
-	strInsert.append(lpContactsStatus);
-	strInsert.append("');");
-#else
-	string str;
-	CharEncoding::ASCII2UTF8(lpContactsType,str);
-	strInsert.append(str);
-
+	strInsert.append(data.ctype);
 	strInsert.append("','");
-	CharEncoding::ASCII2UTF8(lpContactsName,str);
-	strInsert.append(str);
-
+	strInsert.append(data.version);
 	strInsert.append("','");
-	CharEncoding::ASCII2UTF8(lpContactsPhone,str);
-	strInsert.append(str);
-
+	strInsert.append(data.purl);
 	strInsert.append("','");
-	CharEncoding::ASCII2UTF8(lpContactsStatus,str);
-	strInsert.append(str);
-
+	strInsert.append(data.psize);
+	strInsert.append("','");
+	strInsert.append(data.pmd5);
 	strInsert.append("');");
-#endif
 
 	char* psqlite_error = NULL;
 	int sqlite_error = sqlite3_exec(m_psqlite3, strInsert.c_str(), NULL, 0, &psqlite_error);
 	if(SQLITE_OK != sqlite_error)
 	{
-		//Global::WriteTextLog(_T("InsertContactsInfo:%s"), psqlite_error);
+		//Global::WriteTextLog(_T("InsertContactsType:%s"), psqlite_error);
+		FREE_MSG2
 		return FALSE;
 	}
 
 	return TRUE;
 }
 
-BOOL CDataImpl::InsertTaskInfo(IN LPCSTR lpTirrgerCycle, IN LPCSTR lpTirrgerTime, IN LPCSTR lpTaskPhone, IN LPCSTR lpTaskContent, IN LPCSTR lpExecDate, IN LPCSTR lpTaskStatus)
-{
-	if ( lpTirrgerTime == NULL || lpTirrgerTime[0] == '\0' ||
-		lpTirrgerCycle == NULL || lpTirrgerCycle[0] == '\0' ||
-		lpTaskPhone == NULL || lpTaskPhone[0] == '\0'		||
-		lpTaskContent == NULL || lpTaskContent[0] == '\0' ||
-		lpTaskStatus == NULL || lpTaskStatus[0] == '\0' 
-		)
-	{
-		//Global::WriteTextLog(_T("InsertTaskInfo:变量空!"));
-		return FALSE;
-	}
 
+BOOL CDataImpl::InsertKeyInfo(STKeys &data)
+{
 	if(m_psqlite3 == NULL)
 		return FALSE;
 
-	std::string strInsert = "INSERT INTO TaskInfo(TirrgerCycle,TirrgerTime,TaskPhone,TaskContent,ExecDate,TaskStatus) VALUES (";
-#ifndef USE_UTF8
-	strInsert.append(lpTirrgerCycle);
-	strInsert.append(",'");
-	strInsert.append(lpTirrgerTime);
-	strInsert.append("','");
-	strInsert.append(lpTaskPhone);
-	strInsert.append("','");
-	strInsert.append(lpTaskContent);
-	strInsert.append("','");
-	strInsert.append(lpExecDate);
-	strInsert.append("','");
-	strInsert.append(lpTaskStatus);
-	strInsert.append("');");
-#else
-	string str;
-	CharEncoding::ASCII2UTF8(lpTirrgerCycle,str);
-	strInsert.append(str);
-
-	strInsert.append(",'");
-	CharEncoding::ASCII2UTF8(lpTirrgerTime,str);
-	strInsert.append(str);
-
-	strInsert.append("','");
-	CharEncoding::ASCII2UTF8(lpTaskPhone,str);
-	strInsert.append(str);
-
-	strInsert.append("','");
-	CharEncoding::ASCII2UTF8(lpTaskContent,str);
-	strInsert.append(str);
-
-	strInsert.append("','");
-	CharEncoding::ASCII2UTF8(lpExecDate,str);
-	strInsert.append(str);
-
+	std::string strInsert = "INSERT INTO keys(sn, keys) VALUES ('";
+	strInsert.append(data.sn);
 	strInsert.append("','");
-	CharEncoding::ASCII2UTF8(lpTaskStatus,str);
-	strInsert.append(str);
-
+	strInsert.append(data.keys);
 	strInsert.append("');");
-#endif
-
 	char* psqlite_error = NULL;
 	int sqlite_error = sqlite3_exec(m_psqlite3, strInsert.c_str(), NULL, 0, &psqlite_error);
 	if(SQLITE_OK != sqlite_error)
 	{
-		//Global::WriteTextLog(_T("InsertTaskInfo:%s"), psqlite_error);
+		//Global::WriteTextLog(_T("InsertContactsInfo:%s"), psqlite_error);
+		FREE_MSG2
 		return FALSE;
 	}
 
 	return TRUE;
 }
 
-BOOL CDataImpl::InsertSendRecord(IN LPCSTR lpSendType, IN LPCSTR lpSendId, IN LPCSTR lpSendDateTime, IN LPCSTR lpSendPhone, IN LPCSTR lpSendContent, IN LPCSTR lpSendStatus, IN LPCSTR lpSendLog)
+BOOL CDataImpl::InsertLogInfo(STLog &data)
 {
-	if (lpSendDateTime == NULL || lpSendDateTime[0] == '\0' ||
-		lpSendPhone == NULL || lpSendPhone[0] == '\0'		||
-		lpSendContent == NULL || lpSendContent[0] == '\0' ||
-		lpSendStatus == NULL || lpSendStatus[0] == '\0' 
-		)
-	{
-		//Global::WriteTextLog(_T("InsertSendRecord:变量空!"));
-		return FALSE;
-	}
-
 	if(m_psqlite3 == NULL)
 		return FALSE;
 
-	std::string strInsert = "INSERT INTO SendRecord(SendType,SendId,SendDateTime,SendPhone,SendContent,SendStatus,SendLog) VALUES ('";
-#ifndef USE_UTF8
-	strInsert.append(lpSendType);
+	std::string strInsert = "INSERT INTO log(type, sn, content, report_date, report_status) VALUES ('";
+	strInsert.append(data.type);
 	strInsert.append("','");
-	strInsert.append(lpSendId);
+	strInsert.append(data.sn);
 	strInsert.append("','");
-	strInsert.append(lpSendDateTime);
+	strInsert.append(data.content);
 	strInsert.append("','");
-	strInsert.append(lpSendPhone);
+	strInsert.append(data.report_date);
 	strInsert.append("','");
-	strInsert.append(lpSendContent);
-	strInsert.append("',");
-	strInsert.append(lpSendStatus);
-	strInsert.append(",'");
-	strInsert.append(lpSendLog);
-	strInsert.append("');");
-#else
-	string str;
-	CharEncoding::ASCII2UTF8(lpSendType,str);
-	strInsert.append(str);
-
-	strInsert.append("','");
-	CharEncoding::ASCII2UTF8(lpSendId,str);
-	strInsert.append(str);
-
-	strInsert.append("','");
-	CharEncoding::ASCII2UTF8(lpSendDateTime,str);
-	strInsert.append(str);
-
-	strInsert.append("','");
-	CharEncoding::ASCII2UTF8(lpSendPhone,str);
-	strInsert.append(str);
-
-	strInsert.append("','");
-	CharEncoding::ASCII2UTF8(lpSendContent,str);
-	strInsert.append(str);
-
-	strInsert.append("',");
-	CharEncoding::ASCII2UTF8(lpSendStatus,str);
-	strInsert.append(str);
-
-	strInsert.append(",'");
-	CharEncoding::ASCII2UTF8(lpSendLog,str);
-	strInsert.append(str);
-
+	strInsert.append(data.report_status);
 	strInsert.append("');");
-#endif
-
 	char* psqlite_error = NULL;
 	int sqlite_error = sqlite3_exec(m_psqlite3, strInsert.c_str(), NULL, 0, &psqlite_error);
 	if(SQLITE_OK != sqlite_error)
 	{
-		//Global::WriteTextLog(_T("InsertSendRecord:%s"), psqlite_error);
+		//Global::WriteTextLog(_T("InsertContactsInfo:%s"), psqlite_error);
+		FREE_MSG2
 		return FALSE;
 	}
 
 	return TRUE;
 }
 
-BOOL CDataImpl::UpdateContactsType(IN LPCSTR lpAutoid, IN LPCSTR lpContactsType)
+INT CDataImpl::BatchInsertKeyInfo(std::vector<STKeys> &vtdata)
 {
-	if ( lpAutoid == NULL || lpAutoid[0] == '\0' ||
-		lpContactsType == NULL || lpContactsType[0] == '\0')
+	char* psqlite_error = NULL;
+	INT nRet = sqlite3_exec(m_psqlite3, "begin;", 0, 0, &psqlite_error);
+	if ( nRet != SQLITE_OK )
 	{
-		//Global::WriteTextLog(_T("UpdateContactsType:变量空!"));
-		return FALSE;
+		FREE_MSG2
+		return -1;
 	}
 
-	if(m_psqlite3 == NULL)
-		return FALSE;
-
-	std::string strInsert = "UPDATE ContactsType SET ContactsType = '";
-#ifndef USE_UTF8
-	strInsert.append(lpContactsType);
-	strInsert.append("' WHERE Autoid = ");
-	strInsert.append(lpAutoid);
-	strInsert.append(";");
-#else
-	string str;
-	CharEncoding::ASCII2UTF8(lpContactsType,str);
-	strInsert.append(str);
-
-	strInsert.append("' WHERE Autoid = ");
-	strInsert.append(lpAutoid);
-	strInsert.append(";");
-#endif
+	sqlite3_stmt *stmt;
+	const char* sql = "INSERT INTO keys(sn, keys) VALUES (?,?)";
+	sqlite3_prepare_v2(m_psqlite3, sql, strlen(sql), &stmt, 0);
 
-	char* psqlite_error = NULL;
-	int sqlite_error = sqlite3_exec(m_psqlite3, strInsert.c_str(), NULL, 0, &psqlite_error);
-	if(SQLITE_OK != sqlite_error)
+	std::vector<STKeys>::iterator it = vtdata.begin();
+	for ( int i = 0; it != vtdata.end(); it++, i++ )
 	{
-		//Global::WriteTextLog(_T("UpdateContactsType:%s"), psqlite_error);
-		return FALSE;
+		sqlite3_reset(stmt);  
+		sqlite3_bind_text(stmt, 1, it->sn.c_str(), it->sn.size(), SQLITE_STATIC);  
+		sqlite3_bind_text(stmt, 2, it->keys.c_str(), it->keys.size(), SQLITE_STATIC);   
+		sqlite3_step(stmt);  
 	}
 
-	return TRUE;
-}
-
-BOOL CDataImpl::UpdateContactsInfo(IN LPCSTR lpAutoid, IN LPCSTR lpContactsType, IN LPCSTR lpContactsName, IN LPCSTR lpContactsPhone, IN LPCSTR lpContactsStatus)
-{
-	if (lpAutoid == NULL || lpAutoid[0] == '\0' || 
-		lpContactsName == NULL || lpContactsName[0] == '\0' ||
-		lpContactsPhone == NULL || lpContactsPhone[0] == '\0' ||
-		lpContactsStatus == NULL || lpContactsStatus[0] == '\0' )
+	nRet = sqlite3_finalize(stmt); 
+	if ( nRet != SQLITE_OK )
 	{
-		//Global::WriteTextLog(_T("UpdateContactsInfo:变量空!"));
-		return FALSE;
+		FREE_MSG2
+		return -1;
 	}
 
-	if(m_psqlite3 == NULL)
-		return FALSE;
-
-	std::string strInsert = "UPDATE ContactsInfo SET ContactsType = '";
-#ifndef USE_UTF8
-	strInsert.append(lpContactsType);
-	strInsert.append("', ContactsName = '");
-	strInsert.append(lpContactsName);
-	strInsert.append("', ContactsPhone = '");
-	strInsert.append(lpContactsPhone);
-	strInsert.append("', ContactsStatus = '");
-	strInsert.append(lpContactsStatus);
-	strInsert.append("' WHERE Autoid = ");
-	strInsert.append(lpAutoid);
-	strInsert.append(";");
-#else
-	string str;
-	CharEncoding::ASCII2UTF8(lpContactsType,str);
-	strInsert.append(str);
-
-	strInsert.append("', ContactsName = '");
-	CharEncoding::ASCII2UTF8(lpContactsName,str);
-	strInsert.append(str);
-
-	strInsert.append("', ContactsPhone = '");
-	CharEncoding::ASCII2UTF8(lpContactsPhone,str);
-	strInsert.append(str);
-
-	strInsert.append("', ContactsStatus = '");
-	CharEncoding::ASCII2UTF8(lpContactsStatus, str);
-	strInsert.append(str);
-	strInsert.append("' WHERE Autoid = ");
-	strInsert.append(lpAutoid);
-	strInsert.append(";");
-#endif
-
-	char* psqlite_error = NULL;
-	int sqlite_error = sqlite3_exec(m_psqlite3, strInsert.c_str(), NULL, 0, &psqlite_error);
-	if(SQLITE_OK != sqlite_error)
+	nRet = sqlite3_exec(m_psqlite3, "commit;", 0, 0, &psqlite_error);
+	if ( nRet != SQLITE_OK )
 	{
-		//Global::WriteTextLog(_T("UpdateContactsInfo:%s"), psqlite_error);
-		return FALSE;
+		FREE_MSG2
+		return -1;
 	}
 
-	return TRUE;
+	return vtdata.size();
 }
 
-BOOL CDataImpl::UpdateTaskInfo(IN LPCSTR lpTirrgerCycle, IN LPCSTR lpTirrgerTime, IN LPCSTR lpTaskPhone, IN LPCSTR lpTaskContent, IN LPCSTR lpExecDate)
+BOOL CDataImpl::UpdateDownloadStatus(std::string order, int status, std::string des /* = "" */ )
 {
-	if (lpTirrgerCycle == NULL || lpTirrgerCycle[0] == '\0' ||
-		lpTirrgerTime == NULL || lpTirrgerTime[0] == '\0' ||
-		lpTaskPhone == NULL || lpTaskPhone[0] == '\0'		||
-		lpTaskContent == NULL || lpTaskContent[0] == '\0' ||
-		lpExecDate == NULL || lpExecDate[0] == '\0' 
-		)
-	{
-		//Global::WriteTextLog(_T("UpdateTaskInfo:变量空!"));
-		return FALSE;
-	}
-
 	if(m_psqlite3 == NULL)
 		return FALSE;
 
-	std::string strInsert = "UPDATE TaskInfo SET ExecDate = '";
-#ifndef USE_UTF8
-	strInsert.append(lpExecDate);
-	strInsert.append("' WHERE TirrgerTime = '");
-	strInsert.append(lpTirrgerTime);
-	strInsert.append("' and TirrgerCycle = ");
-	strInsert.append(lpTirrgerCycle);
-	strInsert.append(" and TaskPhone = '");
-	strInsert.append(lpTaskPhone);
-	strInsert.append("' and TaskContent = '");
-	strInsert.append(lpTaskContent);
-	strInsert.append("';");
-#else
-	string str;
-	CharEncoding::ASCII2UTF8(lpExecDate,str);
-	strInsert.append(str);
-
-	strInsert.append("' where TirrgerTime = '");
-	CharEncoding::ASCII2UTF8(lpTirrgerTime,str);
-	strInsert.append(str);
-
-	strInsert.append("' and TirrgerCycle = ");
-	CharEncoding::ASCII2UTF8(lpTirrgerCycle,str);
-	strInsert.append(str);
-
-	strInsert.append(" and TaskPhone = '");
-	CharEncoding::ASCII2UTF8(lpTaskPhone,str);
-	strInsert.append(str);
-
-	strInsert.append("' and TaskContent = '");
-	CharEncoding::ASCII2UTF8(lpTaskContent,str);
-	strInsert.append(str);
-
-	strInsert.append("';");
-#endif
-
-	char* psqlite_error = NULL;
-	int sqlite_error = sqlite3_exec(m_psqlite3, strInsert.c_str(), NULL, 0, &psqlite_error);
-	if(SQLITE_OK != sqlite_error)
-	{
-		//Global::WriteTextLog(_T("UpdateTaskInfo:%s"), psqlite_error);
-		return FALSE;
+	char szStatus[10] = {0};
+	_itoa_s(status, szStatus, 10);
+	std::string strInsert = "UPDATE mid SET status ='";
+	strInsert.append(szStatus);
+	strInsert.append("', des='");
+	if ( status == -1 )
+	{	
+		strInsert.append(des);
+		strInsert.append("'");
 	}
-
-	return TRUE;
-}
-
-
-BOOL CDataImpl::UpdateTaskInfo(IN LPCSTR lpAutoid, IN LPCSTR lpTirrgerCycle, IN LPCSTR lpTirrgerTime, IN LPCSTR lpTaskPhone, IN LPCSTR lpTaskContent, IN LPCSTR lpExecDate, IN LPCSTR lpTaskStatus)
-{
-	if (lpAutoid == NULL || lpAutoid[0] == '\0' || 
-		lpTirrgerTime == NULL || lpTirrgerTime[0] == '\0' ||
-		lpTirrgerCycle == NULL || lpTirrgerCycle[0] == '\0' ||
-		lpTaskPhone == NULL || lpTaskPhone[0] == '\0'		||
-		lpTaskContent == NULL || lpTaskContent[0] == '\0' ||
-		lpTaskStatus == NULL || lpTaskStatus[0] == '\0' 
-		)
+	else if ( status == 1 )
 	{
-		//Global::WriteTextLog(_T("UpdateTaskInfo:变量空!"));
-		return FALSE;
+		strInsert.append("下载成功");
+		strInsert.append("',finish_date=current_timestamp");
 	}
-
-	if(m_psqlite3 == NULL)
-		return FALSE;
-
-	std::string strInsert = "UPDATE TaskInfo SET TirrgerTime = '";
-#ifndef USE_UTF8
-	strInsert.append(lpTirrgerTime);
-	strInsert.append("', TirrgerCycle = ");
-	strInsert.append(lpTirrgerCycle);
-	strInsert.append(", TaskPhone = '");
-	strInsert.append(lpTaskPhone);
-	strInsert.append("', TaskContent = '");
-	strInsert.append(lpTaskContent);
-	strInsert.append("', ExecDate = '");
-	strInsert.append(lpExecDate);
-	strInsert.append("', TaskStatus = '");
-	strInsert.append(lpTaskStatus);
-	strInsert.append("' WHERE Autoid = ");
-	strInsert.append(lpAutoid);
-	strInsert.append(";");
-#else
-	string str;
-	CharEncoding::ASCII2UTF8(lpTirrgerTime,str);
-	strInsert.append(str);
-
-	strInsert.append("', TirrgerCycle = ");
-	CharEncoding::ASCII2UTF8(lpTirrgerCycle,str);
-	strInsert.append(str);
-
-	strInsert.append(", TaskPhone = '");
-	CharEncoding::ASCII2UTF8(lpTaskPhone,str);
-	strInsert.append(str);
-
-	strInsert.append("', TaskContent = '");
-	CharEncoding::ASCII2UTF8(lpTaskContent,str);
-	strInsert.append(str);
-
-	strInsert.append("', ExecDate = '");
-	CharEncoding::ASCII2UTF8(lpExecDate,str);
-	strInsert.append(str);
-
-	strInsert.append("', TaskStatus = '");
-	CharEncoding::ASCII2UTF8(lpTaskStatus, str);
-	strInsert.append(str);
-
-	strInsert.append("' WHERE Autoid = ");
-	strInsert.append(lpAutoid);
-	strInsert.append(";");
-#endif
+	strInsert.append(" WHERE bid ='");
+	strInsert.append(order);
+	strInsert.append("';");
 
 	char* psqlite_error = NULL;
 	int sqlite_error = sqlite3_exec(m_psqlite3, strInsert.c_str(), NULL, 0, &psqlite_error);
 	if(SQLITE_OK != sqlite_error)
 	{
-		//Global::WriteTextLog(_T("UpdateTaskInfo:%s"), psqlite_error);
+		//Global::WriteTextLog(_T("UpdateContactsType:%s"), psqlite_error);
+		FREE_MSG2
 		return FALSE;
 	}
 
 	return TRUE;
 }
 
-
-BOOL CDataImpl::UpdateSendRecord( IN LPCSTR lpSendId, IN LPCSTR lpSendStatus, IN LPCSTR lpSendLog)
+BOOL CDataImpl::UpdateKeyCopyStatus(std::string sn, int status)
 {
-	if (lpSendId == NULL || lpSendId[0] == '\0' || 
-		lpSendStatus == NULL || lpSendStatus[0] == '\0' ||
-		lpSendLog == NULL || lpSendLog[0] == '\0' 
-		)
-	{
-		//Global::WriteTextLog(_T("UpdateSendRecord:变量空!"));
-		return FALSE;
-	}
-
 	if(m_psqlite3 == NULL)
 		return FALSE;
 
-	std::string strInsert = "UPDATE SendRecord SET SendStatus = ";
-#ifndef USE_UTF8
-	strInsert.append(lpSendStatus);
-	strInsert.append(",SendLog = '");
-	strInsert.append(lpSendLog);
-	strInsert.append("' WHERE SendId = '");
-	strInsert.append(lpSendId);
-	strInsert.append("';");
-#else
-	string str;
-	strInsert.append(lpSendStatus);
-
-	strInsert.append(",SendLog = '");
-	CharEncoding::ASCII2UTF8(lpSendLog,str);
-	strInsert.append(str);
+	// 只记录抄写成功;
+	if ( status != 1)
+		return FALSE;
 
-	strInsert.append("' WHERE SendId = '");
-	strInsert.append(lpSendId);
+	char szStatus[10] = {0};
+	_itoa_s(status, szStatus, 10);
+	std::string strInsert = "UPDATE keys SET copy_status = '";
+	strInsert.append(szStatus);
+	strInsert.append("', copy_date=current_timestamp");
+	strInsert.append(" WHERE sn ='");
+	strInsert.append(sn);
 	strInsert.append("';");
-#endif
 
 	char* psqlite_error = NULL;
 	int sqlite_error = sqlite3_exec(m_psqlite3, strInsert.c_str(), NULL, 0, &psqlite_error);
 	if(SQLITE_OK != sqlite_error)
 	{
-		//Global::WriteTextLog(_T("UpdateSendRecord:%s"), psqlite_error);
+		//Global::WriteTextLog(_T("UpdateContactsInfo:%s"), psqlite_error);
+		FREE_MSG2
 		return FALSE;
 	}
 
 	return TRUE;
 }
 
-BOOL CDataImpl::UpdateSendRecord(IN LPCSTR lpAutoid, IN LPCSTR lpSendId, IN LPCSTR lpSendDateTime, IN LPCSTR lpSendPhone, IN LPCSTR lpSendContent, IN LPCSTR lpSendStatus, IN LPCSTR lpSendLog)
+BOOL CDataImpl::UpdateKeyReportStatus(std::string sn, int status)
 {
-	if (lpAutoid == NULL || lpAutoid[0] == '\0' || 
-		lpSendDateTime == NULL || lpSendDateTime[0] == '\0' ||
-		lpSendPhone == NULL || lpSendPhone[0] == '\0'		||
-		lpSendContent == NULL || lpSendContent[0] == '\0' ||
-		lpSendStatus == NULL || lpSendStatus[0] == '\0' 
-		)
-	{
-		//Global::WriteTextLog(_T("UpdateSendRecord:变量空!"));
-		return FALSE;
-	}
-
 	if(m_psqlite3 == NULL)
 		return FALSE;
 
-	std::string strInsert = "UPDATE SendRecord SET SendId = '";
-#ifndef USE_UTF8
-	strInsert.append(lpSendId);
-	strInsert.append("',SendDateTime = '");
-	strInsert.append(lpSendDateTime);
-	strInsert.append("',SendPhone = '");
-	strInsert.append(lpSendPhone);
-	strInsert.append("',SendContent = '");
-	strInsert.append(lpSendContent);
-	strInsert.append("', SendStatus = ");
-	strInsert.append(lpSendStatus);
-	strInsert.append(",SendLog = '");
-	strInsert.append(lpSendLog);
-	strInsert.append("' WHERE Autoid = ");
-	strInsert.append(lpAutoid);
-	strInsert.append(";");
-#else
-	string str;
-	CharEncoding::ASCII2UTF8(lpSendId,str);
-	strInsert.append(str);
-
-	strInsert.append("',SendDateTime = '");
-	CharEncoding::ASCII2UTF8(lpSendDateTime,str);
-	strInsert.append(str);
-
-	strInsert.append("',SendPhone = '");
-	CharEncoding::ASCII2UTF8(lpSendPhone,str);
-	strInsert.append(str);
-
-	strInsert.append("',SendContent = '");
-	CharEncoding::ASCII2UTF8(lpSendContent,str);
-	strInsert.append(str);
-
-	strInsert.append("', SendStatus = ");
-	strInsert.append(lpSendStatus);
-
-	strInsert.append(",SendLog = '");
-	CharEncoding::ASCII2UTF8(lpSendLog,str);
-	strInsert.append(str);
+	// 只记录抄写成功;
+	if ( status != 1)
+		return FALSE;
 
-	strInsert.append("' WHERE Autoid = ");
-	strInsert.append(lpAutoid);
-	strInsert.append(";");
-#endif
+	char szStatus[10] = {0};
+	_itoa_s(status, szStatus, 10);
+	std::string strInsert = "UPDATE keys SET report_status = '";
+	strInsert.append(szStatus);
+	strInsert.append("', report_date=current_timestamp");
+	strInsert.append(" WHERE sn ='");
+	strInsert.append(sn);
+	strInsert.append("';");
 
 	char* psqlite_error = NULL;
 	int sqlite_error = sqlite3_exec(m_psqlite3, strInsert.c_str(), NULL, 0, &psqlite_error);
 	if(SQLITE_OK != sqlite_error)
 	{
-		//Global::WriteTextLog(_T("UpdateSendRecord:%s"), psqlite_error);
+		//Global::WriteTextLog(_T("UpdateContactsInfo:%s"), psqlite_error);
+		FREE_MSG2
 		return FALSE;
 	}
 
 	return TRUE;
 }
 
-BOOL CDataImpl::ClearnTaskStatus(IN LPCSTR lpAutoid)
+BOOL CDataImpl::UpdateLogReportStatus(std::string sn, std::string type, int status)
 {
-	if (lpAutoid == NULL || lpAutoid[0] == '\0' )
-	{
-		//Global::WriteTextLog(_T("ClearnTaskStatus:变量空!"));
+	if(m_psqlite3 == NULL)
 		return FALSE;
-	}
 
-	if (m_psqlite3 == NULL)
+	// 只记录抄写成功;
+	if ( status != 1)
 		return FALSE;
 
-	std::string strInsert = "UPDATE TaskInfo SET ExecDate = ''";
-	strInsert.append(" WHERE Autoid = ");
-	strInsert.append(lpAutoid);
-	strInsert.append(";");
+	char szStatus[10] = {0};
+	_itoa_s(status, szStatus, 10);
+	std::string strInsert = "UPDATE log SET report_status = '";
+	strInsert.append(szStatus);
+	strInsert.append("', report_date=current_timestamp");
+	strInsert.append(" WHERE sn ='");
+	strInsert.append(sn);
+	strInsert.append("' and type ='");
+	strInsert.append(type);
+	strInsert.append("';");
 
 	char* psqlite_error = NULL;
 	int sqlite_error = sqlite3_exec(m_psqlite3, strInsert.c_str(), NULL, 0, &psqlite_error);
-	if (SQLITE_OK != sqlite_error)
+	if(SQLITE_OK != sqlite_error)
 	{
-		//Global::WriteTextLog(_T("ClearnTaskStatus:%s"), psqlite_error);
+		//Global::WriteTextLog(_T("UpdateContactsInfo:%s"), psqlite_error);
+		FREE_MSG2
 		return FALSE;
 	}
 
 	return TRUE;
-}
-#endif
+}

+ 14 - 45
scbc.tools/scbc.tools/DataImpl.h

@@ -55,14 +55,14 @@ public:
 	// begin;
 	BOOL TransactionBegin()
 	{
-		INT nRet = sqlite3_exec(m_psqlite3, "begin", 0, 0, &m_pszErrmsg);
+		INT nRet = sqlite3_exec(m_psqlite3, "begin;", 0, 0, &m_pszErrmsg);
 		return ( nRet == 0 ) ? TRUE : FALSE;
 	}
 
 	// commit;
 	BOOL TransactionCommit()
 	{
-		INT nRet = sqlite3_exec(m_psqlite3, "commit", 0, 0, &m_pszErrmsg);
+		INT nRet = sqlite3_exec(m_psqlite3, "commit;", 0, 0, &m_pszErrmsg);
 		return ( nRet == 0 ) ? TRUE : FALSE;
 	}
 
@@ -73,60 +73,29 @@ public:
 
 	// 根据订单号查询订单信息;
 	INT QueryMidInfo(std::string order, STMid &data);
-	INT QueryKeyInfo(std::string sn, STKeyCopy &data);
+	INT QueryKeyInfo(std::string sn, STKeys &data);
+	INT QueryUnReportKeyInfo(std::vector<STKeys> &vtdata);
 	INT QueryLogInfo(std::string sn, STLog &data);
+	INT QueryUnReportLogInfo(std::vector<STLog> &vtdata);
 
 	// 插入mid信息;
 	INT InsertMidInfo(STMid &data);
 	// 插入sn key信息;
-	INT InsertKeyInfo(STKeyCopy &data);
+	INT InsertKeyInfo(STKeys &data);
 	// 插入log;
 	INT InsertLogInfo(STLog &data);
 
+	// 批量插入keys;
+	INT BatchInsertKeyInfo(std::vector<STKeys> &vtdata);
+
 	// 更新下载状态;(成功时,更新完成时间)
-	INT UpdateDownloadStatus(std::string order, int status, std::string des = "" /*失败描述*/);
+	BOOL UpdateDownloadStatus(std::string order, int status, std::string des = "" /*失败描述*/);
 	// 更新抄写状态;
-	INT UpdateCopyStatus(std::string sn, int status);
+	BOOL UpdateKeyCopyStatus(std::string sn, int status);
 	// 更新上报状态;
-	INT UpdateReportStatus(std::string sn, int status);
-#if 0
-	// 查询联系人分类表;
-	INT QueryContactsType(IN OUT std::vector<STContactsType> &vtContactsType);
-	// 查询联系人表;
-	INT QueryContactsInfo(IN OUT std::vector<STContactsInfo> &vtContactsInfo);
-	// 查询任务表;
-	INT QueryTaskInfo(IN OUT std::vector<STTaskInfo> &vtTaskInfo);
-	// 查询发送记录表;
-	INT QuerySendRecord(IN OUT std::vector<STSendRecord> &vtSendRecord);
-	// 查询指定SendId的短信记录;
-	INT QuerySendRecord(IN LPCSTR lpSendId, IN OUT STSendRecord &SendRecord);
-	// 查询指定AutoId的短信记录;
-	INT QuerySendRecordByAutoid(IN LPCSTR lpAutoId, IN OUT STSendRecord &SendRecord);
-
-	// 插入联系人分类表;
-	BOOL InsertContactsType(IN LPCSTR lpContactsType);
-	// 插入联络人表;
-	BOOL InsertContactsInfo(IN LPCSTR lpContactsType, IN LPCSTR lpContactsName, IN LPCSTR lpContactsPhone, IN LPCSTR lpContactsStatus);
-	// 插入任务表;
-	BOOL InsertTaskInfo(IN LPCSTR lpTirrgerCycle, IN LPCSTR lpTirrgerTime, IN LPCSTR lpTaskPhone, IN LPCSTR lpTaskContent, IN LPCSTR lpExecDate, IN LPCSTR lpTaskStatus);
-	// 插入发送记录表;
-	BOOL InsertSendRecord(IN LPCSTR lpSendType,IN LPCSTR lpSendId,IN LPCSTR lpSendDateTime, IN LPCSTR lpSendPhone, IN LPCSTR lpSendContent, IN LPCSTR lpSendStatus, IN LPCSTR lpSendLog);
-
-	// 更新联系人分类表;
-	BOOL UpdateContactsType(IN LPCSTR lpAutoid, IN LPCSTR lpContactsType);
-	// 更新联系人表;
-	BOOL UpdateContactsInfo(IN LPCSTR lpAutoid, IN LPCSTR lpContactsType, IN LPCSTR lpContactsName, IN LPCSTR lpContactsPhone, IN LPCSTR lpContactsStatus);
-	// 更新任务表执行状态-触发手机+内容+触发时间;
-	BOOL UpdateTaskInfo(IN LPCSTR lpTirrgerCycle,IN LPCSTR lpTirrgerTime, IN LPCSTR lpTaskPhone, IN LPCSTR lpTaskContent, IN LPCSTR lpExecDate);
-	// 更新任务表-Autoid;
-	BOOL UpdateTaskInfo(IN LPCSTR lpAutoid, IN LPCSTR lpTirrgerCycle, IN LPCSTR lpTirrgerTime, IN LPCSTR lpTaskPhone, IN LPCSTR lpTaskContent, IN LPCSTR lpExecDate, IN LPCSTR lpTaskStatus);
-	// 更新发送记录表;
-	BOOL UpdateSendRecord(IN LPCSTR lpSendId, IN LPCSTR lpSendStatus, IN LPCSTR lpSendLog);
-	BOOL UpdateSendRecord(IN LPCSTR lpAutoid, IN LPCSTR lpSendId, IN LPCSTR lpSendDateTime, IN LPCSTR lpSendPhone, IN LPCSTR lpSendContent, IN LPCSTR lpSendStatus, IN LPCSTR lpSendLog);
-
-	// 清除任务状态;
-	BOOL ClearnTaskStatus(IN LPCSTR lpAutoid);
-#endif
+	BOOL UpdateKeyReportStatus(std::string sn, int status);
+	// 更新日志上报状态;
+	BOOL UpdateLogReportStatus(std::string sn, std::string type, int status);
 };
 
 #endif

+ 25 - 14
scbc.tools/scbc.tools/TableInfo.h

@@ -3,7 +3,7 @@
 
 // MID表;
 #define _CREATE_MID_TABLE_ \
-"CREATE TABLE MID \
+"CREATE TABLE mid \
 (bid  TEXT(16) NOT NULL,\
 number  INTEGER NOT NULL,\
 pid  INTEGER NOT NULL,\
@@ -15,28 +15,34 @@ pmd5  TEXT(32) NOT NULL,\
 status  INTEGER NOT NULL DEFAULT 0,\
 start_date  DATETIME DEFAULT current_timestamp,\
 finish_date  DATETIME DEFAULT '',\
-des  TEXT NULL DEFAULT '',\
+des  TEXT NOT NULL DEFAULT \"未下载\",\
 PRIMARY KEY (bid ASC));"
-#define _SELECT_MID_TABLE_ "select bid, number, pid, ctype, version, purl, psize, pmd5, status, start_date, finish_date, des from MID"
+#define _SELECT_MID_TABLE_ "SELECT bid, number, pid, ctype, version, purl, psize, pmd5, status, start_date, finish_date, des FROM mid"
+#define _INSERT_MID_TABLE_ "INSERT INTO mid(bid, number, pid, ctype, version, purl, psize, pmd5)VALUES\
+(%s, %s, %s, %s, %s, %s, %s, %s);"
 
 // KeyCopy表;
-#define _CREATE_KC_TABLE_ \
-"CREATE TABLE KeyCopy \
+#define _CREATE_KEYS_TABLE_ \
+"CREATE TABLE keys \
 (sn  TEXT(32) PRIMARY KEY NOT NULL,\
 keys  TEXT NOT NULL,\
 copy_date  DATETIME DEFAULT '',\
 report_date  DATETIME DEFAULT '',\
 copy_status  INTEGER NOT NULL DEFAULT 0,\
 report_status  INTEGER NOT NULL DEFAULT 0);"
-#define _SELECT_KC_TABLE_ "select sn, keys, copy_date, report_date, copy_status, report_status from KeyCopy"
+#define _SELECT_KEYS_TABLE_ "SELECT sn, keys, copy_date, report_date, copy_status, report_status FROM keys"
 
 // Log表;
 #define _CREATE_LOG_TABLE_ \
-"CREATE TABLE Log \
+"CREATE TABLE log \
 (type  TEXT(32) NOT NULL,\
 sn  TEXT NOT NULL,\
-content  TEXT NOT NULL);"
-#define _SELECT_LOG_TABLE_ "select type, sn, content from Log"
+content  TEXT NOT NULL,\
+gdate  DATETIME DEFAULT current_timestamp,\
+report_date  DATETIME DEFAULT '',\
+report_status  INTEGER NOT NULL DEFAULT 0,\
+PRIMARY KEY (type, sn));"
+#define _SELECT_LOG_TABLE_ "SELECT type, sn, content, gdate, report_status FROM log"
 
 // 订单下载表;
 typedef struct	__ST_MID__
@@ -49,22 +55,24 @@ typedef struct	__ST_MID__
 	std::string		purl;							// 包地址;
 	std::string		psize;							// 包大小;
 	std::string		pmd5;							// 包md5;
-	std::string		status;							// 下载状态:完成、未完成;
+	std::string		status;							// 下载状态:0=未下载,1=完成,-1=下载失败;
 	std::string		start_date;						// 下载开始时间;
 	std::string		finish_date;					// 下载完成时间;
+	std::string		dsize;							// 已下载大小;
+	std::string		file;							// 文件路径;
 	std::string		des;							// 状态描述:下载失败原因;
 }STMid, *pSTMid;
 
 // 抄写表;
-typedef struct __ST_KEYCOPY__
+typedef struct __ST_KEYS__
 {
 	std::string		sn;								// sn;
 	std::string		keys;							// key包Json字符串;
 	std::string		copy_date;						// 抄写成功时间;
 	std::string		report_date;					// 上报时间;
-	std::string		copy_status;					// 抄写状态:未抄写、抄写成失败、抄写成功;
-	std::string		report_status;					// 上报状态:未上报、上报成功;
-}STKeyCopy, *pSTKeyCopy;
+	std::string		copy_status;					// 抄写状态:0=未抄写、-1=抄写成失败、1=抄写成功;
+	std::string		report_status;					// 上报状态:0=未上报、1=上报成功、-1=上报失败;
+}STKeys, *pSTKeys;
 
 // 日志表;
 typedef struct __ST_LOG__
@@ -72,5 +80,8 @@ typedef struct __ST_LOG__
 	std::string		type;							// 日志类型;
 	std::string		sn;								// 关联的sn;		
 	std::string		content;						// 日志内容;
+	std::string		gdate;							// 日志生成时间;
+	std::string		report_date;					// 日志上报时间;
+	std::string		report_status;					// 上报状态:0=未上报、1=上报成功、-1=上报失败;
 }STLog, *pSTLog;
 #endif

+ 109 - 5
scbc.tools/scbc.tools/scbc.tools.cpp

@@ -32,15 +32,119 @@ int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
 	else
 	{
 		// TODO: 在此处为应用程序的行为编写代码。
-		STMid data;
-		//CDataImpl::GetInstance()->QueryMidInfo("1",data);
 		CDataImpl db;
 		if ( db.Open() )
 		{
-			//db.QueryMidInfo("1",data);
+			STMid mid;
+			char szdata[100] = {0};
+			for ( int i = 0; i < 100; i++ )
+			{
+				_itoa_s(i, szdata, 10);
+				mid.order = szdata;
+				mid.ctype = szdata;
+				mid.version = "V8-SCBC098-LV1096";
+				mid.dsize = "100";
+				mid.number = "1000";
+				mid.pid = "102";
+				mid.pmd5 = "dfeqadfadfer546489er4adf";
+				mid.purl = "https://www.baidu.com";
+				db.InsertMidInfo(mid);
+			}
+
+			db.QueryMidInfo("1", mid);
+			OutputDebugString("查询描述:");
+			OutputDebugString(mid.des.c_str());
+			OutputDebugString("\n");
+
+#if 0
+			STKeys keys;
+			db.TransactionBegin();
+			for ( int i = 0; i < 50000; i++ )
+			{
+				_itoa_s(i, szdata, 10);
+				keys.sn = szdata;
+				keys.keys = "{\"did\":\"did\",\"mac\":\"mac\",\"cikey\":\"cikey\",\"hdcp\":\"hdcp\",\"hdcp22\":\"hdcp22\",\"widi\":\"widi\",\"esn\":\"esn\",\"widevine\":\"widevine\"}";
+				db.InsertKeyInfo(keys);
+			}
+			db.TransactionCommit();
+#else
+			OutputDebugString("批量插入数据\n");
+			OutputDebugString(CTime::GetCurrentTime().Format("%Y-%m-%d %H:%M:%S\n"));
+			std::vector<STKeys> vtKeys;
+			vtKeys.resize(200);
+			std::vector<STKeys>::iterator it = vtKeys.begin();
+			for ( int i = 0; it != vtKeys.end(); it++, i++ )
+			{
+				_itoa_s(i, szdata, 10);
+				it->sn = szdata;
+				it->keys = "{\"did\":\"did\",\"mac\":\"mac\",\"cikey\":\"cikey\",\"hdcp\":\"hdcp\",\"hdcp22\":\"hdcp22\",\"widi\":\"widi\",\"esn\":\"esn\",\"widevine\":\"widevine\"}";
+			}
+
+			OutputDebugString("开始批量插入数据\n");
+			OutputDebugString(CTime::GetCurrentTime().Format("%Y-%m-%d %H:%M:%S\n"));
+			db.BatchInsertKeyInfo(vtKeys);
+			OutputDebugString("完成批量插入数据\n");
+			OutputDebugString(CTime::GetCurrentTime().Format("%Y-%m-%d %H:%M:%S\n"));
+#endif
+
+			for ( int i = 0; i < 100; i++)
+			{
+				_itoa_s(i, szdata, 10);
+				db.UpdateKeyCopyStatus(szdata, 1);
+				if ( i%2 )
+					db.UpdateKeyReportStatus(szdata, 1);
+			}
+
+			vtKeys.clear();
+			db.QueryUnReportKeyInfo(vtKeys);
+			it = vtKeys.begin();
+			for (; it != vtKeys.end(); it++ )
+			{
+				OutputDebugString("SN:");
+				OutputDebugString(it->sn.c_str());
+				OutputDebugString("\t");
+
+				OutputDebugString("copy_date:");
+				OutputDebugString(it->copy_date.c_str());
+				OutputDebugString("\t");
+
+				OutputDebugString("copy_status:");
+				OutputDebugString(it->copy_status.c_str());
+				OutputDebugString("\t");
+
+				OutputDebugString("report_date:");
+				OutputDebugString(it->report_date.c_str());
+				OutputDebugString("\t");
+
+				OutputDebugString("report_status:");
+				OutputDebugString(it->report_status.c_str());
+				OutputDebugString("\n");
+			}
+
+#if 1
+			STLog log;
+			db.TransactionBegin();
+			for ( int i = 0; i < 200; i++ )
+			{
+				_itoa_s(i, szdata, 10);
+				log.sn = szdata;
+				log.type = "1";
+				log.content = "测试内容:东方丽景散热地觚单位 加菲软糖加工厂饮用水";
+				if ( i%2 )
+					log.report_status = "1";
+				else
+					log.report_status = "0";
+				log.report_date = "";
+				db.InsertLogInfo(log);
+			}
+			db.TransactionCommit();
+
+			std::vector<STLog> vtLog;
+			db.QueryUnReportLogInfo(vtLog);
+
+			db.UpdateLogReportStatus("0", "1", 1);
+#endif
 		}
-	
-		//system("pause");
 	}
 
 	return nRetCode;

+ 1 - 1
scbc.tools/scbc.tools/scbc.tools.vcproj

@@ -196,7 +196,7 @@
 				Name="VCCLCompilerTool"
 				Optimization="0"
 				AdditionalIncludeDirectories="..\cJson;..\filehelper;..\Include;..\Log4C"
-				PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;SCBCTOOLS_EXPORTS;LOG4C_ENABLE;CURL_STATICLIB;TEST_MODE;USE_UTF8"
+				PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;SCBCTOOLS_EXPORTS;LOG4C_ENABLE;CURL_STATICLIB;TEST_MODE"
 				MinimalRebuild="true"
 				BasicRuntimeChecks="3"
 				RuntimeLibrary="3"