// test.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include "test.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif


// 唯一的应用程序对象

CWinApp theApp;

using namespace std;

int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
	int nRetCode = 0;

	// 初始化 MFC 并在失败时显示错误
	if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
	{
		// TODO: 更改错误代码以符合您的需要
		_tprintf(_T("错误: MFC 初始化失败\n"));
		nRetCode = 1;
	}
	else
	{
		std::string bid = "DXM1900259";

		// 0、初始化环境;
		if ( !ScbcInit(bid.c_str()) )
		{
			printf("初始化失败\n");
			return -1;
		}

		// 测试1千次;
		int i = 1000;
		while(i--){
			printf("\n\n******************No.%ld******************\n", i);
			// 1、查询订单是否已下载成功;
			int nRet = QueryMidInfo(bid.c_str());
			printf("QueryMidInfo：%d\n", nRet);
			if ( nRet != 2 )
			{
				printf("订单未下载成功，开始下载\n");
				// 未下载成功，开始后台下载;
				nRet = DownloadMidData(bid.c_str());
				printf("DownloadMidData：%d\n", nRet);
				if ( nRet == 0 )
				{
					printf("该批次未导入系统，无法下载，程序退出\n");
					continue;
				}
			}
			else
				printf("订单已下载\n");

			// 2、等待下载成功;
			while ( nRet != 2 )
			{
				nRet = QueryMidInfo(bid.c_str());
				printf("QueryMidInfo：%d\n", nRet);
				if ( nRet == 2 )
				{
					printf("查询订单已下载成功\n");
				}
				Sleep(1000);
			}

			std::string sn = "TEST-TONY-5588";
			// 3、获取指定sn的keys,用于抄写key;
			SNKeys keys;
			nRet = QueryKeyInfo(sn.c_str(), keys);
			printf("QueryKeyInfo：%d\n", nRet);

			// 4、抄写成功后，保存抄写结果;
			if ( true )
			{
				nRet = UpdateKeyCopyStatus(sn.c_str());
				printf("UpdateKeyCopyStatus：%d\n", nRet);
			}

			//Sleep(6000);
			// 5、单个sn抄写结果上报;
			nRet = ReportKeyCopyResults(sn.c_str());
			printf("ReportKeyCopyResults：%d, %s\n", nRet, nRet == 1 ? "上报成功" : "上报失败");
			if ( nRet == -8 )
			{
				nRet = UpdateKeyReportStatus(sn.c_str());
				printf("UpdateKeyReportStatus：%d\n", nRet);
			}

			// 6、1000个sn抄写结果上报;
			while((nRet = BatchReportKeyCopyResults()) == 1)
				printf("BatchReportKeyCopyResults：%d, %s\n", nRet, nRet == 1 ? "上报成功" : "上报失败");

			// 7、查询应下载sn数量、实际下载sn数据、抄写成功sn数量、上报成功sn数量;
			BidInfo binfo;
			nRet = QueryBidInfo(bid.c_str(), binfo);
			printf("QueryBidInfo：%d\n", nRet, nRet == 1 ? "查询成功": "查询失败");

			printf("15秒后，开始删除订单信息\n");
			Sleep(15000);
			// 8、删除批次相关表数据（全部表数量）
			nRet = RemoveBidData(bid.c_str());
			printf("RemoveBidData：%d\n", nRet);
			printf("删除订单信息成功\n");
		}
	}

	system("pause");

	return nRetCode;
}
