瀏覽代碼

临时上传;

Jeff 5 年之前
父節點
當前提交
dc18eba775

+ 17 - 16
scbc.tools/scbc.tools/DataImpl.cpp

@@ -333,10 +333,10 @@ INT CDataImpl::QueryUnReportLogInfo(std::vector<STLog> &vtdata)
 	return nRow;
 }
 
-BOOL CDataImpl::InsertMidInfo(STMid &data)
+INT CDataImpl::InsertMidInfo(STMid &data)
 {
 	if(m_psqlite3 == NULL)
-		return FALSE;
+		return -1;
 
 	std::string strInsert = "INSERT INTO mid(bid, number, pid, ctype, version, purl, psize, pmd5)VALUES ('";
 	strInsert.append(data.order);
@@ -362,17 +362,16 @@ BOOL CDataImpl::InsertMidInfo(STMid &data)
 	{
 		//Global::WriteTextLog(_T("InsertContactsType:%s"), psqlite_error);
 		FREE_MSG2
-		return FALSE;
 	}
 
-	return TRUE;
+	return sqlite_error;
 }
 
 
-BOOL CDataImpl::InsertKeyInfo(STKeys &data)
+INT CDataImpl::InsertKeyInfo(STKeys &data)
 {
 	if(m_psqlite3 == NULL)
-		return FALSE;
+		return -1;
 
 	std::string strInsert = "INSERT INTO keys(sn, keys) VALUES ('";
 	strInsert.append(data.sn);
@@ -385,16 +384,15 @@ BOOL CDataImpl::InsertKeyInfo(STKeys &data)
 	{
 		//Global::WriteTextLog(_T("InsertContactsInfo:%s"), psqlite_error);
 		FREE_MSG2
-		return FALSE;
 	}
 
-	return TRUE;
+	return sqlite_error;
 }
 
-BOOL CDataImpl::InsertLogInfo(STLog &data)
+INT CDataImpl::InsertLogInfo(STLog &data)
 {
 	if(m_psqlite3 == NULL)
-		return FALSE;
+		return -1;
 
 	std::string strInsert = "INSERT INTO log(type, sn, content, report_date, report_status) VALUES ('";
 	strInsert.append(data.type);
@@ -413,20 +411,22 @@ BOOL CDataImpl::InsertLogInfo(STLog &data)
 	{
 		//Global::WriteTextLog(_T("InsertContactsInfo:%s"), psqlite_error);
 		FREE_MSG2
-		return FALSE;
 	}
 
-	return TRUE;
+	return sqlite_error;
 }
 
 INT CDataImpl::BatchInsertKeyInfo(std::vector<STKeys> &vtdata)
 {
+	if(m_psqlite3 == NULL)
+		return -1;
+
 	char* psqlite_error = NULL;
 	INT nRet = sqlite3_exec(m_psqlite3, "begin;", 0, 0, &psqlite_error);
 	if ( nRet != SQLITE_OK )
 	{
 		FREE_MSG2
-		return -1;
+		return nRet;
 	}
 
 	sqlite3_stmt *stmt;
@@ -447,17 +447,18 @@ INT CDataImpl::BatchInsertKeyInfo(std::vector<STKeys> &vtdata)
 	{
 		// »Ø¹öÊÂÎñ;
 		nRet = sqlite3_exec(m_psqlite3, "rollback;", 0, 0, &psqlite_error);
-		return -1;
+		FREE_MSG2
+		return nRet;
 	}
 
 	nRet = sqlite3_exec(m_psqlite3, "commit;", 0, 0, &psqlite_error);
 	if ( nRet != SQLITE_OK )
 	{
 		FREE_MSG2
-		return -1;
+		return nRet;
 	}
 
-	return vtdata.size();
+	return SQLITE_OK;
 }
 
 BOOL CDataImpl::UpdateMidInfo(STMid &data)

+ 8 - 7
scbc.tools/scbc.tools/DataImpl.h

@@ -53,7 +53,7 @@ public:
 	void Close();
 
 	// begin;
-	BOOL TransactionBegin()
+	int TransactionBegin()
 	{
 		char* psqlite_error = NULL;
 		INT nRet = sqlite3_exec(m_psqlite3, "begin;", 0, 0, &psqlite_error);
@@ -64,13 +64,14 @@ public:
 				sqlite3_free(psqlite_error); 
 				psqlite_error = NULL;
 			}
-			return FALSE;
+			return nRet;
 		}
-		return TRUE;
+
+		return SQLITE_OK;
 	}
 
 	// commit;
-	BOOL TransactionCommit()
+	int TransactionCommit()
 	{
 		char* psqlite_error = NULL;
 		INT nRet = sqlite3_exec(m_psqlite3, "commit;", 0, 0, &psqlite_error);
@@ -81,9 +82,9 @@ public:
 				sqlite3_free(psqlite_error); 
 				psqlite_error = NULL;
 			}
-			return FALSE;
+			return nRet;
 		}
-		return TRUE;
+		return SQLITE_OK;
 	}
 
 	// 执行语句;
@@ -91,7 +92,7 @@ public:
 	// 查询表是否存在;
 	BOOL QueryTable(std::string table);
 
-	// 根据订单号查询订单信息;
+	// 根据订单号查询订单信息;//返回查询数量;
 	INT QueryMidInfo(std::string order, STMid &data);
 	INT QueryKeyInfo(std::string sn, STKeys &data);
 	INT QueryUnReportKeyInfo(std::vector<STKeys> &vtdata);

+ 42 - 0
scbc.tools/scbc.tools/Global.cpp

@@ -5,6 +5,7 @@
 #include <WinIoCtl.h>
 #pragma comment(lib, "SetupAPI.lib")
 #include "cJSON.h"
+#include <direct.h>
 
 namespace Global
 {
@@ -38,7 +39,48 @@ namespace Global
 		_tsplitpath_s(g_szCurModulePath, szDrive, szDir, g_szFna, szExt);
 		_tcscpy_s(g_szCurModuleDir, szDrive);
 		_tcscat_s(g_szCurModuleDir, szDir);
+
+		// 创建cache目录;
+		TCHAR szPath[MAX_PATH] = {0};
+		_stprintf_s(szPath, _T("%scache"), g_szCurModuleDir);
+		MKDIR(szPath);
+	}
+
+	void MKDIR(LPCTSTR dir) 
+	{
+		//////////////////////////////////////////////////////////////////////////
+		// 创建目录;
+		int nleft = 0;
+		int nIndex = -1;
+		std::string strdir = dir;
+		strdir = strdir.substr(0, strdir.find_last_of(_T("\\")));
+
+		if (strdir.at(strdir.size() - 1) != _T('\\'))
+			strdir.append(_T("\\"));
+
+		// 共享路径和硬盘盘符;
+		if (_tcscmp(strdir.substr(0, 2).c_str(), _T("\\\\")) == 0)
+			nleft = strdir.find_first_of(_T("\\"), 2) + 1;	// 去除共享主机名;
+		else if (strdir.at(2) == _T('\\'))
+			nleft = 3;
+
+		do
+		{
+			nIndex = strdir.substr(nleft, -1).find_first_of(_T("\\"));
+
+			if (nIndex != std::string::npos)
+			{
+				if (_mkdir(strdir.substr(0, nIndex + nleft).c_str()) == -1 && (errno != EEXIST))
+				{
+					//WriteTextLog(_T("创建目录失败:%s,错误码:%d"), strdir.substr(0, nIndex + nleft).c_str(), errno);
+					break;
+				}
+
+				nleft += nIndex + 1;
+			}
+		} while (nIndex != -1);
 	}
+
 	/************************************************************************/
 	/*  函数:WriteTextLog[7/28/2009 Jeff];
 	/*  描述:写文本日志;

+ 1 - 0
scbc.tools/scbc.tools/Global.h

@@ -257,6 +257,7 @@ namespace Global
 	//////////////////////////////////////////////////////////////////////////
 	// È«¾Öº¯Êý;
 	void Init();
+	void MKDIR(LPCTSTR dir);
 	void GetConfig();
 	void SetConfig();
 	bool GetVersion(IN const TCHAR* fname, OUT WORD* pdwFileVersion, OUT WORD* pdwProductVerion);

+ 75 - 4
scbc.tools/scbc.tools/SDK.cpp

@@ -2,12 +2,14 @@
 #include "SDK.h"
 #include "CritSection.h"
 #include "Global.h"
+#include "DataImpl.h"
 
 ThreadSection g_csTask;
 std::list<STMid> CSDK::m_vtMidTask;
 
 CSDK::CSDK(void)
 {
+	Global::Init();
 }
 
 CSDK::~CSDK(void)
@@ -78,6 +80,58 @@ BOOL CSDK::PopDownloadTask(STMid &mid)
 	return FALSE;
 }
 
+void CSDK::ParserKey(std::string file, std::vector<STKeys> &vtKyes)
+{
+	// 读取文件;
+	FILE* pf = NULL;
+	_tfopen_s(&pf, file.c_str(), _T("rb"));
+	if (!pf)
+		return;
+	// 获取文件长度;
+	fseek(pf, 0, SEEK_END);
+	size_t file_size = ftell(pf);
+	fseek(pf, 0, SEEK_SET);
+	// 读取文件内容;
+	byte* pdata = (byte*)malloc(file_size);
+	fread(pdata, file_size, 1, pf);
+	fclose(pf);
+
+	// Json数据;
+	cJSON* pJson = cJSON_Parse((const char*)pdata);
+	if (pJson == NULL)
+	{
+		goto end;
+	}
+
+	//////////////////////////////////////////////////////////////////////////
+	// 解析Json;
+	cJSON *pItem = NULL;
+	cJSON *pKeys = cJSON_GetObjectItem(pJson, "");
+	if ( pKeys )
+	{
+		int nCount = cJSON_GetArraySize(pKeys);
+		for ( int i = 0; i < nCount; i++ )
+		{
+			pItem = cJSON_GetArrayItem(pKeys, i);
+			if ( pItem )
+			{
+				STKeys key;
+				// 序列号;
+				key.sn = cJSON_GetObjectItem(pItem, _T("sn")) ? cJSON_GetObjectItem(pItem, _T("sn"))->valuestring : "";
+				key.keys = cJSON_GetObjectItem(pItem, _T("keys")) ? cJSON_GetObjectItem(pItem, _T("keys"))->valuestring : "";
+				vtKyes.push_back(key);
+			}
+		}
+	}
+
+end:
+	if (pdata)
+		free(pdata);
+
+	if (pJson)
+		cJSON_Delete(pJson);
+}
+
 DWORD CSDK::ThreadDownload(LPVOID lpParam)
 {
 	CSDK *that = (CSDK*)lpParam;
@@ -85,15 +139,32 @@ DWORD CSDK::ThreadDownload(LPVOID lpParam)
 	TCHAR szKeyPacket[MAX_PATH] = {0};
 	do 
 	{
-		// 取出任务;
-		STMid mid;
-		if ( PopDownloadTask(mid) )
+		if ( m_vtMidTask.size() )
 		{
+			// 取出任务;
+			STMid mid = m_vtMidTask.front();
+
 			// 判断文件是否存在,并检验md5值;
-			_stprintf_s(szKeyPacket, _T("%s%s.json"), Global::g_szCurModuleDir, mid.order.c_str());
+			_stprintf_s(szKeyPacket, _T("%scache\\%s.json"), Global::g_szCurModuleDir, mid.order.c_str());
 			if ( _taccess(szKeyPacket, 0) != -1 )
 			{
 				// 校验文件md5值;
+				std::string fileMd5 = GetFileMD5(szKeyPacket);
+				if ( _tcsicmp(fileMd5.c_str(), mid.pmd5.c_str()) == 0 )
+				{
+					// 文件下载成功,批量插入数据库;
+					std::vector<STKeys> vtKeys;
+					ParserKey(szKeyPacket, vtKeys);
+					if ( vtKeys.size() )
+					{
+						CDataImpl db;
+						if ( db.Open() )
+						{
+							db.BatchInsertKeyInfo(vtKeys);
+						}
+					}
+					continue;
+				}
 			}
 			else
 			{

+ 1 - 1
scbc.tools/scbc.tools/SDK.h

@@ -23,7 +23,7 @@ private:
 	static std::list<STMid> m_vtMidTask;
 	static void AddDownloadTask(STMid &mid);
 	static BOOL PopDownloadTask(STMid &mid);
-
+	static void ParserKey(std::string file, std::vector<STKeys> &vtKyes);
 	
 	HANDLE m_hDownloadEvent;
 	HANDLE m_hThreadDownload;