Jeff 5 rokov pred
rodič
commit
20b568824a

+ 87 - 0
scbc.tools/scbc.tools/SDK.cpp

@@ -4,9 +4,11 @@
 #include "Global.h"
 #include "DataImpl.h"
 #include <sys/stat.h>
+#include "CharEncoding.h"
 
 ThreadSection g_csTask;
 std::list<STMid> CSDK::m_vtMidTask;
+std::string CSDK::_host;
 
 CSDK::CSDK(void):
 m_hDownloadEvent(NULL),
@@ -406,6 +408,91 @@ int CSDK::GetMidInfo(std::string order, STMid &mid)
 	return -1;
 }
 
+BOOL CSDK::HttpPost(std::string host, std::string context, std::string &result, DATATYPE dt)
+{
+	CCurlClient curl;
+	curl.Initialize();
+	CharEncoding::ASCII2UTF8(context.c_str(), context);
+	curl.SetHeaders("Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/x-silverlight, application/x-ms-application, application/x-ms-xbap, application/vnd.ms-xpsdocument, application/xaml+xml, */*");
+	curl.SetHeaders("Accept-Language: zh-cn");
+	if (dt == DATA_JSON)
+		curl.SetHeaders("Content-Type: application/json;charset=utf-8");
+
+	int nRecCode = CURLE_OK;
+	if (_tcsstr(host.c_str(), "https://"))
+		nRecCode = curl.Posts(host, context, result);
+	else
+		nRecCode = curl.Posts(host, context, result);
+
+	result = CharEncoding::DeCode_URLUTF8(result.c_str());
+
+	return CURLE_OK == nRecCode;
+}
+
+BOOL CSDK::GetBidInfo(std::string order, std::string macs)
+{
+	// Json数据;
+	cJSON *pJson = cJSON_CreateObject();
+	cJSON_AddStringToObject(pJson, "clientType", "");
+	cJSON_AddStringToObject(pJson, "version", "");
+	cJSON_AddStringToObject(pJson, "mac", macs.c_str());
+	cJSON_AddStringToObject(pJson, "bid", order.c_str());
+	char *pJsonText = cJSON_Print(pJson);
+
+	// post请求;
+	std::string name, type;
+	std::string host, result, context;
+	context = pJsonText;
+
+	if (pJsonText)
+		delete pJsonText;
+	pJsonText = NULL;
+	cJSON_Delete(pJson);
+	pJson = NULL;
+
+	std::string code, message;
+	host = Global::g_bTestHost ? _T("http://test.admin.uc.qhmoka.com/scbc-server/clientType/getMessage.do") : _T("https://cn.uc.qhmoka.com/scbc-server/clientType/getMessage.do");
+	BOOL bRet = HttpPost(host, context, result, DATA_JSON);
+	if (!bRet)
+	{
+		goto end;
+	}
+
+	// 解析返回值;
+	pJson = cJSON_Parse(result.c_str());
+	if (pJson == NULL)
+	{
+		bRet = FALSE;
+		goto end;
+	}
+
+	message = cJSON_GetObjectItem(pJson, "message") ? cJSON_GetObjectItem(pJson, "message")->valuestring : "";
+	code = cJSON_GetObjectItem(pJson, "code") ? cJSON_GetObjectItem(pJson, "code")->valuestring : "";
+	_host = cJSON_GetObjectItem(pJson, "host") ? (cJSON_GetObjectItem(pJson, "host")->valuestring != NULL ? cJSON_GetObjectItem(pJson, "host")->valuestring : "") : "";
+	
+
+	if (_tcsicmp(code.c_str(), "1000") != 0)
+	{
+		bRet = FALSE;
+		goto end;
+	}
+
+	if (_host.size() == 0)
+	{
+		bRet = FALSE;
+		goto end;
+	}
+
+end:
+	// 释放Json;
+	if (pJsonText)
+		delete pJsonText;
+	pJsonText = NULL;
+	cJSON_Delete(pJson);
+
+	return bRet;
+}
+
 int CSDK::ReportDownloadStatus(std::string order)
 {
 	// http获取mid;

+ 11 - 0
scbc.tools/scbc.tools/SDK.h

@@ -6,6 +6,14 @@
 #include "TableInfo.h"
 #include "CurlClient.h"
 
+
+// Êý¾ÝÀàÐÍ;
+enum DATATYPE
+{
+	DATA_JSON = 0,		// jsonÊý¾Ý;
+	DATA_FORM = 1		// ±íµ¥ÀàÐÍ;
+};
+
 class CSDK
 {
 public:
@@ -25,7 +33,10 @@ public:
 	static int ReportDownloadStatus(std::string order);
 	static void ParserKey(std::string file, std::vector<STKeys> &vtKyes, STMid& mid);
 	static bool ParserSNKey(std::string json, SNKeys &snKey);
+	BOOL HttpPost(std::string host, std::string context, std::string &result, DATATYPE dt);
+	BOOL GetBidInfo(std::string order, std::string macs);
 private:
+	static std::string _host;
 	static std::list<STMid> m_vtMidTask;
 	static void AddDownloadTask(STMid &mid);
 	static BOOL PopDownloadTask(STMid &mid);

+ 126 - 25
scbc.tools/test/ReadMe.txt

@@ -1,40 +1,141 @@
 ========================================================================
-    控制台应用程序:test 项目概述
+    预抄写SDK:scbc.tools.dll概述
 ========================================================================
+/////////////////////////////////////////////////////////////////////////////
+sdk包含以下文件:
+scbc.tools.h
+  sdk头文件。
+tableinfo.h
+    sdk相关结构体头文件。
+scbc.tools.lib
+   sdk静态库文件。
+scbc.tools.dll
+   sdk动态库文件。
 
-应用程序向导已为您创建了此 test 应用程序。
+/////////////////////////////////////////////////////////////////////////////
+SDK开发说明:
+IDE:VS2008(共享DLL),使用多字节字符集
+数据库:使用sqlite3做为本地数据库
+https:curlib+openssl+zlib
+校验:md5
+Windows:xp sp3
 
-本文件概要介绍组成 test 应用程序的
-的每个文件的内容。
+/************************************************************************************************/
+/*				 简要接口说明:				*/
+/************************************************************************************************/
+1、extern SCBCTOOLS_API int QueryMidInfo(const char* lpOrder);
+描述:查询指定批次MID信息。
+	一般用于DownloadMidData调用后,查询是否下载成功;或者下载前,查询该批次是否已经在下载中;
+参数:lpOrder 批次号;
+返回:
+	0=表示该批次未下载过,不存在数据库中;
+	1=表示该批次已存在,但未下载完成,请调用DownloadMidData完成下载;
+	2=表示该批次已完成下载;
+	3=表示该批次下载失败(再次调用DownloadMidData可断点下载);
+	-1=表示lpOrder参数空;
+	-2=表示打开db失败;
+	-3=表示查询批次出错;
+	-4=表示数据异常;
 
 
-test.vcproj
-    这是使用应用程序向导生成的 VC++ 项目的主项目文件,
-    其中包含生成该文件的 Visual C++ 的版本信息,以及有关使用应用程序向导选择的平台、配置和项目功能的信息。
+2、extern SCBCTOOLS_API int DownloadMidData(const char* lpOrder);
+描述:下载指定批次MID数据;(后台线程下载),调用QueryMidInfo查询是否下载完成;
+参数:lpOrder 批次号;
+返回:
+	0=表示该批次不存在云服务器(批次信息未导入);
+	1=表示该批次在云服务器中存在,下载任务后台启动中;
+	2=表示该批次已完成下载;
+	-1=表示lpOrder参数空;
+	-2=表示打开db失败;
+	-3=表示查询批次出错;
+	-4=表示数据异常;
+	-5=表示https网络请求失败;
 
-test.cpp
-    这是主应用程序源文件。
+3、extern SCBCTOOLS_API int QueryKeyInfo(const char* lpSN, SNKeys &snKeys);
+描述:查询SN对应的Keys;
+参数:
+	lpSN 条码;
+	lpKeys 返回的字符串,json数组格式;
+	len lpkeys缓存区长度;
+返回:
+	0=表示没有该sn,不存在数据库中;
+	1=表示获取sn绑定的keys成功;
+	-1=表示lpSN参数空;
+	-2=表示打开数据库失败;
+	-3=表示查询SN出错;
+	-4=表示数据异常;
 
-/////////////////////////////////////////////////////////////////////////////
-应用程序向导创建了下列资源:
 
-test.rc
-这是程序使用的所有 Microsoft Windows 资源的列表。它包括 RES 子目录中存储的图标、位图和光标。
-此文件可以直接在 Microsoft Visual C++ 中进行编辑。
+4、extern SCBCTOOLS_API int UpdateKeyCopyStatus(const char* lpSN);
+描述:更新抄写状态;(在抄写key成功后调用该接口)
+参数:lpSN 条码;
+返回:
+	0=表示更新sn的抄写状态失败;
+	1=表示更新sn的抄写状态成功;
+	-1=表示lpSN参数空;
+	-2=表示打开数据库失败;
 
-Resource.h
-    这是标准头文件,可用于定义新的资源 ID。
-    Microsoft Visual C++ 将读取并更新此文件。
+5、extern SCBCTOOLS_API int UpdateKeyReportStatus(const char* lpSN);
+描述:更新上报状态;(的UpdateKeyCopyStatus成功后调用)
+参数:lpSN 条码;
+返回:
+	0=表示更新sn的上报状态失败;
+	1=表示更新sn的上报状态成功;
+	-1=表示lpSN参数空;
+	-2=表示打开数据库失败;
 
-/////////////////////////////////////////////////////////////////////////////
-其他标准文件:
+6、extern SCBCTOOLS_API int ReportKeyCopyResults(const char* lpSN);
+描述:上报抄写结果;
+参数:lpSN 条码;
+返回:
+	0=表示在数据库中查询不到该sn的抄写信息,或者该sn未抄写成功;
+	1=表示上报抄写结果成功,且更新上报状态成功;
+	-1=表示lpSN参数空;
+	-2=表示打开db失败;
+	-3=表示查询sn出错;
+	-4=表示数据异常;
+	-5=表示https网络请求失败;
+	-6=表示解析https结果异常;
+	-7=表示上报抄写结果失败;
+	-8=表示上报抄写结果成功,但更新上报状态失败;此时,需调用UpdateKeyReportStatus更新上报状态;
 
-StdAfx.h, StdAfx.cpp
-    这些文件用于生成名为 test.pch 的预编译头 (PCH) 文件和名为 StdAfx.obj 的预编译类型文件。
 
-/////////////////////////////////////////////////////////////////////////////
-其他注释:
+7、extern SCBCTOOLS_API int BatchReportKeyCopyResults();
+描述:批量上报抄写结果。从数据库查询出1000条未上报的sn进行上报;
+参数:无;
+返回:
+	0=表示在数据库中查询不到未上报的sn抄写信息,或者所有sn未抄写成功;
+	1=表示上报抄写结果成功,且更新上报状态成功;
+	-1=表示lpSN参数空;
+	-2=表示打开db失败;
+	-3=表示查询sn出错;
+	////-4=表示数据异常;
+	-5=表示https网络请求失败;
+	-6=表示解析https结果异常;
+	-7=表示上报抄写结果失败;
+	-8=表示上报抄写结果成功,但批量更新上报状态失败;
+
+8、extern SCBCTOOLS_API int QueryBidInfo(const char* lpOrder, BidInfo& binfo);
+描述:查询批次信息:应下载sn数、实际下载sn数、抄写成功数量、上报成功数量;
+参数:lpOrder 批次号; binfo 返回的bid信息;
+返回:
+	0=表示订单不存在数据库中;
+	1=表示获取bid信息成功;
+	-1=表示lpOrder参数空;
+	-2=表示打开数据库失败;
+	-3=表示查询订单出错;
+	-4=表示数据异常;
+注意:一般情况下,应下载数sn数量=实际下载sn数量;
+
+
+9、extern SCBCTOOLS_API int RemoveBidData(const char* lpOrder);
+描述:删除批次相关的所有表数量;
+参数:lpOrder 批次号;
+返回:
+	0=表示删除失败;
+	1=表示删除成功;
+	-1=表示lpOrder参数空;
+	-2=表示打开数据库失败;
+
 
-应用程序向导使用“TODO:”注释来指示应添加或自定义的源代码部分。
 
-/////////////////////////////////////////////////////////////////////////////

+ 7 - 4
scbc.tools/test/test.cpp

@@ -67,8 +67,11 @@ int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
 		printf("QueryKeyInfo:%d\n", nRet);
 
 		// 4、抄写成功后,保存抄写结果;
-		nRet = UpdateKeyCopyStatus(sn.c_str());
-		printf("UpdateKeyCopyStatus:%d\n", nRet);
+		if ( true )
+		{
+			nRet = UpdateKeyCopyStatus(sn.c_str());
+			printf("UpdateKeyCopyStatus:%d\n", nRet);
+		}
 
 		// 5、单个sn抄写结果上报;
 		nRet = ReportKeyCopyResults(sn.c_str());
@@ -89,8 +92,8 @@ int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
 		printf("QueryBidInfo:%d\n", nRet, nRet == 1 ? "查询成功": "查询失败");
 
 		// 8、删除批次相关表数据(全部表数量)
-		nRet = RemoveBidData(bid.c_str());
-		printf("RemoveBidData:%d\n", nRet);
+		//nRet = RemoveBidData(bid.c_str());
+		//printf("RemoveBidData:%d\n", nRet);
 	}
 
 	system("pause");

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

@@ -18,7 +18,7 @@
 	<Configurations>
 		<Configuration
 			Name="Debug|Win32"
-			OutputDirectory="..\..\..\bin\$(ProjectName)"
+			OutputDirectory="..\..\..\bin\$(SolutionName)"
 			IntermediateDirectory="$(OutDir)\$(ProjectName)\$(ConfigurationName)"
 			ConfigurationType="1"
 			UseOfMFC="2"