DataImpl.cpp 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859
  1. #include "StdAfx.h"
  2. #include "DataImpl.h"
  3. #include "CharEncoding.h"
  4. #include "Global.h"
  5. // MID表;
  6. #define _CREATE_MID_TABLE_ \
  7. "CREATE TABLE mid \
  8. (bid TEXT(16) NOT NULL,\
  9. number INTEGER NOT NULL,\
  10. pid INTEGER NOT NULL,\
  11. ctype TEXT(32) NOT NULL,\
  12. version TEXT(32) NOT NULL,\
  13. purl TEXT NOT NULL,\
  14. psize INTEGER NOT NULL,\
  15. pmd5 TEXT(32) NOT NULL,\
  16. status INTEGER NOT NULL DEFAULT 0,\
  17. start_date DATETIME DEFAULT current_timestamp,\
  18. finish_date DATETIME DEFAULT '',\
  19. des TEXT NOT NULL DEFAULT \"未下载\",\
  20. PRIMARY KEY (bid ASC));"
  21. #define _SELECT_MID_TABLE_ "SELECT bid, number, pid, ctype, version, purl, psize, pmd5, status, start_date, finish_date, des FROM mid"
  22. #define _INSERT_MID_TABLE_ "INSERT INTO mid(bid, number, pid, ctype, version, purl, psize, pmd5)VALUES\
  23. (%s, %s, %s, %s, %s, %s, %s, %s);"
  24. // Key表;
  25. #define _CREATE_KEYS_TABLE_ \
  26. "CREATE TABLE keys \
  27. (bid TEXT(16) NOT NULL,\
  28. sn TEXT(32) PRIMARY KEY NOT NULL,\
  29. pid INTEGER NOT NULL,\
  30. keys TEXT NOT NULL,\
  31. copy_date DATETIME DEFAULT '',\
  32. report_date DATETIME DEFAULT '');"
  33. #define _SELECT_KEYS_TABLE_ "SELECT bid, pid, sn, keys, copy_date, report_date FROM keys"
  34. // Log表;
  35. #define _CREATE_LOG_TABLE_ \
  36. "CREATE TABLE log \
  37. (bid TEXT(16) NOT NULL,\
  38. type TEXT(32) NOT NULL,\
  39. sn TEXT(32) NOT NULL,\
  40. content TEXT NOT NULL,\
  41. gdate DATETIME DEFAULT current_timestamp,\
  42. report_date DATETIME DEFAULT '',\
  43. PRIMARY KEY (type, sn));"
  44. #define _SELECT_LOG_TABLE_ "SELECT type, bid, sn, content, gdate, report_date FROM log"
  45. #define _SELECT_BID_INFO__ \
  46. "select ifnull(mid.number,0) as tc, \
  47. count(keys.bid) as ac,\
  48. count(case when keys.copy_date <> '' then '抄写成功' end) as cc,\
  49. count(case when keys.report_date <> '' and keys.copy_date <> '' then '上报成功' end) as rc \
  50. from mid inner join keys on mid.bid = keys.bid where mid.bid = '%s';"
  51. #define FREE_MSG if ( psqlite_error ) \
  52. printf("%s\n",psqlite_error),\
  53. sqlite3_free(psqlite_error),\
  54. psqlite_error = NULL
  55. CDataImpl::CDataImpl(void):m_psqlite3(NULL)
  56. {
  57. //sqlite3_threadsafe();
  58. }
  59. CDataImpl::~CDataImpl(void)
  60. {
  61. Close();
  62. }
  63. BOOL CDataImpl::Open()
  64. {
  65. Close();
  66. TCHAR szpath[MAX_PATH] = {0};
  67. _stprintf_s(szpath, _T("%sdb\\ogc.db"), GLOBAL::g_szModulePath);
  68. std::string strPath;
  69. #ifdef _UNICODE
  70. if ( !CharEncoding::UNICODE2UTF8(szpath,strPath))
  71. #else
  72. if ( !CharEncoding::ASCII2UTF8(szpath,strPath))
  73. #endif
  74. {
  75. return FALSE;
  76. }
  77. int sqlite_error = sqlite3_open(strPath.c_str(), &m_psqlite3);
  78. if ( sqlite_error != SQLITE_OK )
  79. return FALSE;
  80. // 创建表;
  81. char* psqlite_error = NULL;
  82. if ( !QueryTable("DebugOrder"))
  83. {
  84. sqlite_error = sqlite3_exec(m_psqlite3, _CREATE_ORDER_, NULL, NULL, &psqlite_error);
  85. if (sqlite_error != SQLITE_OK) GLOBAL::WriteTextLog(_T("sqlite3 error:%s,%s"),_CREATE_ORDER_, psqlite_error);
  86. FREE_MSG;
  87. }
  88. if ( !QueryTable("DebugSN"))
  89. {
  90. sqlite_error = sqlite3_exec(m_psqlite3, _CREATE_SN_, NULL, NULL, &psqlite_error);
  91. if (sqlite_error != SQLITE_OK) GLOBAL::WriteTextLog(_T("sqlite3 error:%s,%s"),_CREATE_SN_, psqlite_error);
  92. FREE_MSG;
  93. }
  94. return TRUE;
  95. }
  96. void CDataImpl::Close()
  97. {
  98. if ( m_psqlite3 )
  99. sqlite3_close(m_psqlite3);
  100. m_psqlite3 = NULL;
  101. }
  102. BOOL CDataImpl::ExecteSQL(IN LPCSTR lpSQL)
  103. {
  104. if ( lpSQL == NULL || lpSQL[0] == '\0' )
  105. {
  106. GLOBAL::WriteTextLog(_T("ExecteSQL:执行语句空!"));
  107. return FALSE;
  108. }
  109. if(m_psqlite3 == NULL)
  110. return FALSE;
  111. char* psqlite_error = NULL;
  112. int sqlite_error = sqlite3_exec(m_psqlite3, lpSQL, NULL, 0, &psqlite_error);
  113. if(SQLITE_OK != sqlite_error)
  114. {
  115. GLOBAL::WriteTextLog(_T("sqlite3 error:%s,%s"),lpSQL, psqlite_error);
  116. FREE_MSG;
  117. return FALSE;
  118. }
  119. return TRUE;
  120. }
  121. BOOL CDataImpl::QueryTable(std::string table)
  122. {
  123. if ( table.size() == 0 )
  124. {
  125. GLOBAL::WriteTextLog(_T("QueryTable:表名空!"));
  126. return FALSE;
  127. }
  128. if(m_psqlite3 == NULL)
  129. return FALSE;
  130. INT nRow = 0;
  131. INT nCol = 0;
  132. char** pazResult = NULL;
  133. char* psqlite_error = NULL;
  134. char szSql[MAX_PATH] = {0};
  135. sprintf_s(szSql, "select * from sqlite_master where type = 'table' and name = '%s'", table.c_str());
  136. int sqlite_error = sqlite3_get_table(m_psqlite3, szSql, &pazResult, &nRow, &nCol, &psqlite_error);
  137. if ( sqlite_error != SQLITE_OK)
  138. {
  139. GLOBAL::WriteTextLog(_T("sqlite3 error:%s,%s"),szSql, psqlite_error);
  140. FREE_MSG;
  141. return FALSE;
  142. }
  143. sqlite3_free_table(pazResult);
  144. return nRow != 0;
  145. }
  146. INT CDataImpl::InsertOrder(const TB_ORDER &order)
  147. {
  148. return InsertOrder(order.strOrder, order.strDeltaEType, order.strDeltaEValue, order.nMode);
  149. }
  150. INT CDataImpl::InsertOrder(std::string strOrder, std::string strDeltaEType, std::string strDeltaEValue, int nMode)
  151. {
  152. if(m_psqlite3 == NULL)
  153. return -1;
  154. char szMode[8] = {0};
  155. _itoa_s(nMode, szMode, 10);
  156. std::string strInsert = "INSERT INTO DebugOrders(OrderID, DEType, DEValue, Mode) VALUES ('";
  157. strInsert.append(strOrder);
  158. strInsert.append("','");
  159. strInsert.append(strDeltaEType);
  160. strInsert.append("','");
  161. strInsert.append(strDeltaEValue);
  162. strInsert.append("','");
  163. strInsert.append(szMode);
  164. strInsert.append("');");
  165. char* psqlite_error = NULL;
  166. int sqlite_error = sqlite3_exec(m_psqlite3, strInsert.c_str(), NULL, 0, &psqlite_error);
  167. if(SQLITE_OK != sqlite_error)
  168. {
  169. GLOBAL::WriteTextLog(_T("sqlite3 error:%s,%s"),strInsert.c_str(), psqlite_error);
  170. FREE_MSG;
  171. }
  172. return sqlite_error;
  173. }
  174. INT CDataImpl::InsertSN(const TB_SN &sn_data)
  175. {
  176. return InsertSN(sn_data.strOrder, sn_data.strLine, sn_data.strSN, sn_data.strTestTime, sn_data.nElapsed, sn_data.nTestResult, sn_data.dDeltaAVGEValue, sn_data.dDeltaEValue, sn_data.strDetails);
  177. }
  178. INT CDataImpl::InsertSN(std::string strOrder, std::string strLine, std::string strSN, std::string strTestTime, int nElapsed, int nTestResult, DOUBLE dDeltaAVGEValue, DOUBLE dDeltaEValue, std::string strDetails )
  179. {
  180. if(m_psqlite3 == NULL)
  181. return -1;
  182. char szValue[16] = {0};
  183. std::string strInsert = "INSERT INTO DebugSN(OrderID, Line, SN, TestTime, ElapsedTime, TestResult, DEAvgValue, DEValue, Outcome) VALUES ('";
  184. strInsert.append(strOrder);
  185. strInsert.append("','");
  186. strInsert.append(strLine);
  187. strInsert.append("','");
  188. strInsert.append(strSN);
  189. strInsert.append("','");
  190. strInsert.append(strTestTime);
  191. _itoa_s(nElapsed, szValue, 10);
  192. strInsert.append("','");
  193. strInsert.append(szValue);
  194. _itoa_s(nTestResult, szValue, 10);
  195. strInsert.append("','");
  196. strInsert.append(szValue);
  197. _gcvt_s(szValue, dDeltaAVGEValue, 3);
  198. strInsert.append("','");
  199. strInsert.append(szValue);
  200. _gcvt_s(szValue, dDeltaEValue, 3);
  201. strInsert.append("','");
  202. strInsert.append(szValue);
  203. strInsert.append("','");
  204. strInsert.append(strDetails);
  205. strInsert.append("');");
  206. char* psqlite_error = NULL;
  207. int sqlite_error = sqlite3_exec(m_psqlite3, strInsert.c_str(), NULL, 0, &psqlite_error);
  208. if(SQLITE_OK != sqlite_error)
  209. {
  210. GLOBAL::WriteTextLog(_T("sqlite3 error:%s,%s"),strInsert.c_str(), psqlite_error);
  211. FREE_MSG;
  212. }
  213. return sqlite_error;
  214. }
  215. INT CDataImpl::QueryOrder(std::string strOrder, TB_ORDER &order)
  216. {
  217. if ( m_psqlite3 == NULL )
  218. return -1;
  219. INT nRow = 0;
  220. INT nCol = 0;
  221. char** pazResult = NULL;
  222. char* psqlite_error = NULL;
  223. std::string strSql = _SELECT_ORDER_;
  224. strSql.append(" WHERE OrderID = '");
  225. strSql.append(strOrder);
  226. strSql.append("';");
  227. int sqlite_error = sqlite3_get_table(m_psqlite3, strSql.c_str(), &pazResult, &nRow, &nCol, &psqlite_error);
  228. if ( sqlite_error != SQLITE_OK)
  229. {
  230. GLOBAL::WriteTextLog(_T("sqlite3 error:%s,%s"),strSql.c_str(), psqlite_error);
  231. FREE_MSG;
  232. return -1;
  233. }
  234. if( nRow == 1)
  235. {
  236. #ifndef USE_UTF8
  237. order.strOrder = pazResult[nCol+0];
  238. order.strDeltaEType = pazResult[nCol+1];
  239. order.strDeltaEValue = pazResult[nCol+2];
  240. order.strMode = pazResult[nCol+3];
  241. order.nMode = atoi(pazResult[nCol+3]);
  242. order.strCreateTime = pazResult[nCol+4];
  243. #else
  244. // 由Native for SQLite3插入的数据,都是utf8格式;
  245. order.strOrder = CharEncoding::UTF82ASCII(pazResult[nCol+0]);
  246. order.strDeltaEType = CharEncoding::UTF82ASCII(pazResult[nCol+1]);
  247. order.strDeltaEValue = CharEncoding::UTF82ASCII(pazResult[nCol+2]);
  248. order.strMode = CharEncoding::UTF82ASCII(pazResult[nCol+3]);
  249. order.nMode = atoi(pazResult[nCol+3]);
  250. order.strCreateTime = CharEncoding::UTF82ASCII(pazResult[nCol+4]);
  251. #endif
  252. }
  253. sqlite3_free_table(pazResult);
  254. return nRow;
  255. }
  256. INT CDataImpl::QueryOrders(std::vector<TB_ORDER> &vtOrders, std::string strWhere)
  257. {
  258. if ( m_psqlite3 == NULL )
  259. return -1;
  260. INT nRow = 0;
  261. INT nCol = 0;
  262. char** pazResult = NULL;
  263. char* psqlite_error = NULL;
  264. std::string strSql = _SELECT_ORDER_;
  265. if ( strWhere.size() )
  266. {
  267. strSql.append(" WHERE ");
  268. strSql.append(strWhere);
  269. }
  270. strSql.append(";");
  271. int sqlite_error = sqlite3_get_table(m_psqlite3, strSql.c_str(), &pazResult, &nRow, &nCol, &psqlite_error);
  272. if ( sqlite_error != SQLITE_OK)
  273. {
  274. GLOBAL::WriteTextLog(_T("sqlite3 error:%s,%s"),strSql.c_str(), psqlite_error);
  275. FREE_MSG;
  276. return -1;
  277. }
  278. vtOrders.resize(nRow);
  279. std::vector<TB_ORDER>::iterator it = vtOrders.begin();
  280. for(int i = 1; i <= nRow; i++, it++)
  281. {
  282. #ifndef USE_UTF8
  283. it->strOrder = pazResult[i*nCol+0];
  284. it->strDeltaEType = pazResult[i*nCol+1];
  285. it->strDeltaEValue = pazResult[i*nCol+2];
  286. it->strMode = pazResult[i*nCol+3];
  287. it->nMode = atoi(it->strMode.c_str());
  288. it->strCreateTime = pazResult[i*nCol+4];
  289. #else
  290. // 由Native for SQLite3插入的数据,都是utf8格式;
  291. it->strOrder = CharEncoding::UTF82ASCII(pazResult[i*nCol+0]);
  292. it->strDeltaEType = CharEncoding::UTF82ASCII(pazResult[i*nCol+1]);
  293. it->strDeltaEValue = CharEncoding::UTF82ASCII(pazResult[i*nCol+2]);
  294. it->strMode = CharEncoding::UTF82ASCII(pazResult[i*nCol+3]);
  295. it->nMode = atoi(it->strMode.c_str());
  296. it->strCreateTime = CharEncoding::UTF82ASCII(pazResult[i*nCol+4]);
  297. #endif
  298. }
  299. sqlite3_free_table(pazResult);
  300. return nRow;
  301. }
  302. INT CDataImpl::QueryOrders(std::vector<TB_ORDER> &vtOrders, std::string strBeginTime, std::string EndTime)
  303. {
  304. if ( m_psqlite3 == NULL )
  305. return -1;
  306. INT nRow = 0;
  307. INT nCol = 0;
  308. char** pazResult = NULL;
  309. char* psqlite_error = NULL;
  310. std::string strSql = _SELECT_ORDER_;
  311. strSql.append(" WHERE CreateTime >= '");
  312. strSql.append(strBeginTime);
  313. strSql.append("' AND CreateTime <= '");
  314. strSql.append(EndTime);
  315. strSql.append("';");
  316. int sqlite_error = sqlite3_get_table(m_psqlite3, strSql.c_str(), &pazResult, &nRow, &nCol, &psqlite_error);
  317. if ( sqlite_error != SQLITE_OK)
  318. {
  319. GLOBAL::WriteTextLog(_T("sqlite3 error:%s,%s"),strSql.c_str(), psqlite_error);
  320. FREE_MSG;
  321. return -1;
  322. }
  323. vtOrders.resize(nRow);
  324. std::vector<TB_ORDER>::iterator it = vtOrders.begin();
  325. for(int i = 1; i <= nRow; i++, it++)
  326. {
  327. #ifndef USE_UTF8
  328. it->strOrder = pazResult[i*nCol+0];
  329. it->strDeltaEType = pazResult[i*nCol+1];
  330. it->strDeltaEValue = pazResult[i*nCol+2];
  331. it->strMode = pazResult[i*nCol+3];
  332. it->nMode = atoi(it->strMode.c_str());
  333. it->strCreateTime = pazResult[i*nCol+4];
  334. #else
  335. // 由Native for SQLite3插入的数据,都是utf8格式;
  336. it->strOrder = CharEncoding::UTF82ASCII(pazResult[i*nCol+0]);
  337. it->strDeltaEType = CharEncoding::UTF82ASCII(pazResult[i*nCol+1]);
  338. it->strDeltaEValue = CharEncoding::UTF82ASCII(pazResult[i*nCol+2]);
  339. it->strMode = CharEncoding::UTF82ASCII(pazResult[i*nCol+3]);
  340. it->nMode = atoi(it->strMode.c_str());
  341. it->strCreateTime = CharEncoding::UTF82ASCII(pazResult[i*nCol+4]);
  342. #endif
  343. }
  344. sqlite3_free_table(pazResult);
  345. return nRow;
  346. }
  347. INT CDataImpl::QuerySNData(std::string strSN, TB_SN &sn_data)
  348. {
  349. if ( m_psqlite3 == NULL )
  350. return -1;
  351. INT nRow = 0;
  352. INT nCol = 0;
  353. char** pazResult = NULL;
  354. char* psqlite_error = NULL;
  355. std::string strSql = _SELECT_SN_;
  356. strSql.append(" WHERE SN = '");
  357. strSql.append(strSN);
  358. strSql.append("';");
  359. int sqlite_error = sqlite3_get_table(m_psqlite3, strSql.c_str(), &pazResult, &nRow, &nCol, &psqlite_error);
  360. if ( sqlite_error != SQLITE_OK)
  361. {
  362. GLOBAL::WriteTextLog(_T("sqlite3 error:%s,%s"),strSql.c_str(), psqlite_error);
  363. FREE_MSG;
  364. return -1;
  365. }
  366. if ( nRow == 1)
  367. {
  368. #ifndef USE_UTF8
  369. sn_data.strOrder = pazResult[nCol+0];
  370. sn_data.strSN = pazResult[nCol+1];
  371. sn_data.strLine = pazResult[nCol+2];
  372. sn_data.strTestTime = pazResult[nCol+3];
  373. sn_data.strElapsed = pazResult[nCol+4];
  374. sn_data.nElapsed = atoi(sn_data.strElapsed.c_str());
  375. sn_data.strTestResult = pazResult[nCol+5];
  376. sn_data.nTestResult = atoi(pazResult[nCol+5]);
  377. sn_data.strDeltaAVGEValue = pazResult[nCol+6];
  378. sn_data.dDeltaAVGEValue = atof(pazResult[nCol+6]);
  379. sn_data.strDeltaEValue = pazResult[nCol+7];
  380. sn_data.dDeltaEValue = atof(pazResult[nCol+7]);
  381. sn_data.strDetails = pazResult[nCol+8];
  382. #else
  383. // 由Native for SQLite3插入的数据,都是utf8格式;
  384. sn_data.strOrder = CharEncoding::UTF82ASCII(pazResult[nCol+0]);
  385. sn_data.strSN = CharEncoding::UTF82ASCII(pazResult[nCol+1]);
  386. sn_data.strLine = CharEncoding::UTF82ASCII(pazResult[nCol+2]);
  387. sn_data.strTestTime = CharEncoding::UTF82ASCII(pazResult[nCol+3]);
  388. sn_data.strElapsed = CharEncoding::UTF82ASCII(pazResult[nCol+4]);
  389. sn_data.nElapsed = atoi(pazResult[nCol+4]);
  390. sn_data.strTestResult = CharEncoding::UTF82ASCII(pazResult[nCol+5]);
  391. sn_data.nTestResult = atoi(pazResult[nCol+5]);
  392. sn_data.strDeltaAVGEValue = CharEncoding::UTF82ASCII(pazResult[nCol+6]);
  393. sn_data.dDeltaAVGEValue = atof(pazResult[nCol+6]);
  394. sn_data.strDeltaEValue = CharEncoding::UTF82ASCII(pazResult[nCol+7]);
  395. sn_data.dDeltaEValue = atof(pazResult[nCol+7]);
  396. sn_data.strDetails = CharEncoding::UTF82ASCII(pazResult[nCol+8]);
  397. #endif
  398. }
  399. sqlite3_free_table(pazResult);
  400. return nRow;
  401. }
  402. INT CDataImpl::QuerySNData(std::string strOrder, std::vector<TB_SN> &vtSNdata)
  403. {
  404. if ( m_psqlite3 == NULL )
  405. return -1;
  406. INT nRow = 0;
  407. INT nCol = 0;
  408. char** pazResult = NULL;
  409. char* psqlite_error = NULL;
  410. std::string strSql = _SELECT_SN_;
  411. strSql.append(" WHERE OrderID = '");
  412. strSql.append(strOrder);
  413. strSql.append("';");
  414. int sqlite_error = sqlite3_get_table(m_psqlite3, strSql.c_str(), &pazResult, &nRow, &nCol, &psqlite_error);
  415. if ( sqlite_error != SQLITE_OK)
  416. {
  417. GLOBAL::WriteTextLog(_T("sqlite3 error:%s,%s"),strSql.c_str(), psqlite_error);
  418. FREE_MSG;
  419. return -1;
  420. }
  421. vtSNdata.resize(nRow);
  422. std::vector<TB_SN>::iterator it = vtSNdata.begin();
  423. for(int i = 1; i <= nRow; i++, it++)
  424. {
  425. #ifndef USE_UTF8
  426. it->strOrder = pazResult[i*nCol+0];
  427. it->strSN = pazResult[i*nCol+1];
  428. it->strLine = pazResult[i*nCol+2];
  429. it->strTestTime = pazResult[i*nCol+3];
  430. it->strElapsed = pazResult[i*nCol+4];
  431. it->nElapsed = atoi(it->strElapsed.c_str());
  432. it->strTestResult = pazResult[i*nCol+5];
  433. it->nTestResult = atoi(pazResult[i*nCol+5]);
  434. it->strDeltaAVGEValue = pazResult[i*nCol+6];
  435. it->dDeltaAVGEValue = atof(pazResult[i*nCol+6]);
  436. it->strDeltaEValue = pazResult[i*nCol+7];
  437. it->dDeltaEValue = atof(pazResult[i*nCol+7]);
  438. it->strDetails = pazResult[i*nCol+8];
  439. #else
  440. // 由Native for SQLite3插入的数据,都是utf8格式;
  441. it->strOrder = CharEncoding::UTF82ASCII(pazResult[i*nCol+0]);
  442. it->strSN = CharEncoding::UTF82ASCII(pazResult[i*nCol+1]);
  443. it->strLine = CharEncoding::UTF82ASCII(pazResult[i*nCol+2]);
  444. it->strTestTime = CharEncoding::UTF82ASCII(pazResult[i*nCol+3]);
  445. it->strElapsed = CharEncoding::UTF82ASCII(pazResult[i*nCol+4]);
  446. it->nElapsed = atoi(pazResult[i*nCol+4]);
  447. it->strTestResult = CharEncoding::UTF82ASCII(pazResult[i*nCol+5]);
  448. it->nTestResult = atoi(pazResult[i*nCol+5]);
  449. it->strDeltaAVGEValue = CharEncoding::UTF82ASCII(pazResult[i*nCol+6]);
  450. it->dDeltaAVGEValue = atof(pazResult[i*nCol+6]);
  451. it->strDeltaEValue = CharEncoding::UTF82ASCII(pazResult[i*nCol+7]);
  452. it->dDeltaEValue = atof(pazResult[i*nCol+7]);
  453. it->strDetails = CharEncoding::UTF82ASCII(pazResult[i*nCol+8]);
  454. #endif
  455. }
  456. sqlite3_free_table(pazResult);
  457. return nRow;
  458. }
  459. INT CDataImpl::QuerySNData(std::vector<TB_SN> &vtSNData, std::string strBeginTime, std::string EndTime)
  460. {
  461. if ( m_psqlite3 == NULL )
  462. return -1;
  463. INT nRow = 0;
  464. INT nCol = 0;
  465. char** pazResult = NULL;
  466. char* psqlite_error = NULL;
  467. std::string strSql = _SELECT_SN_;
  468. strSql.append(" WHERE StartTime >= '");
  469. strSql.append(strBeginTime);
  470. strSql.append("' AND StartTime <= '");
  471. strSql.append(EndTime);
  472. strSql.append("';");
  473. int sqlite_error = sqlite3_get_table(m_psqlite3, strSql.c_str(), &pazResult, &nRow, &nCol, &psqlite_error);
  474. if ( sqlite_error != SQLITE_OK)
  475. {
  476. GLOBAL::WriteTextLog(_T("sqlite3 error:%s,%s"),strSql.c_str(), psqlite_error);
  477. FREE_MSG;
  478. return -1;
  479. }
  480. vtSNData.resize(nRow);
  481. std::vector<TB_SN>::iterator it = vtSNData.begin();
  482. for(int i = 1; i <= nRow; i++, it++)
  483. {
  484. #ifndef USE_UTF8
  485. it->strOrder = pazResult[i*nCol+0];
  486. it->strSN = pazResult[i*nCol+1];
  487. it->strLine = pazResult[i*nCol+2];
  488. it->strTestTime = pazResult[i*nCol+3];
  489. it->strElapsed = pazResult[i*nCol+4];
  490. it->nElapsed = atoi(it->strElapsed.c_str());
  491. it->strTestResult = pazResult[i*nCol+5];
  492. it->nTestResult = atoi(pazResult[i*nCol+5]);
  493. it->strDeltaAVGEValue = pazResult[i*nCol+6];
  494. it->dDeltaAVGEValue = atof(pazResult[i*nCol+6]);
  495. it->strDeltaEValue = pazResult[i*nCol+7];
  496. it->dDeltaEValue = atof(pazResult[i*nCol+7]);
  497. it->strDetails = pazResult[i*nCol+8];
  498. #else
  499. // 由Native for SQLite3插入的数据,都是utf8格式;
  500. it->strOrder = CharEncoding::UTF82ASCII(pazResult[i*nCol+0]);
  501. it->strSN = CharEncoding::UTF82ASCII(pazResult[i*nCol+1]);
  502. it->strLine = CharEncoding::UTF82ASCII(pazResult[i*nCol+2]);
  503. it->strTestTime = CharEncoding::UTF82ASCII(pazResult[i*nCol+3]);
  504. it->strElapsed = CharEncoding::UTF82ASCII(pazResult[i*nCol+4]);
  505. it->nElapsed = atoi(pazResult[i*nCol+4]);
  506. it->strTestResult = CharEncoding::UTF82ASCII(pazResult[i*nCol+5]);
  507. it->nTestResult = atoi(pazResult[i*nCol+5]);
  508. it->strDeltaAVGEValue = CharEncoding::UTF82ASCII(pazResult[i*nCol+6]);
  509. it->dDeltaAVGEValue = atof(pazResult[i*nCol+6]);
  510. it->strDeltaEValue = CharEncoding::UTF82ASCII(pazResult[i*nCol+7]);
  511. it->dDeltaEValue = atof(pazResult[i*nCol+7]);
  512. it->strDetails = CharEncoding::UTF82ASCII(pazResult[i*nCol+8]);
  513. #endif
  514. }
  515. sqlite3_free_table(pazResult);
  516. return nRow;
  517. }
  518. INT CDataImpl::QuerySNData(std::vector<TB_SN> &vtSNData, std::string strWhere)
  519. {
  520. if ( m_psqlite3 == NULL )
  521. return -1;
  522. INT nRow = 0;
  523. INT nCol = 0;
  524. char** pazResult = NULL;
  525. char* psqlite_error = NULL;
  526. std::string strSql = _SELECT_SN_;
  527. if ( strWhere.size() )
  528. {
  529. strSql.append(" WHERE ");
  530. strSql.append(strWhere);
  531. }
  532. strSql.append(";");
  533. int sqlite_error = sqlite3_get_table(m_psqlite3, strSql.c_str(), &pazResult, &nRow, &nCol, &psqlite_error);
  534. if ( sqlite_error != SQLITE_OK)
  535. {
  536. GLOBAL::WriteTextLog(_T("sqlite3 error:%s,%s"),strSql.c_str(), psqlite_error);
  537. FREE_MSG;
  538. return -1;
  539. }
  540. vtSNData.resize(nRow);
  541. std::vector<TB_SN>::iterator it = vtSNData.begin();
  542. for(int i = 1; i <= nRow; i++, it++)
  543. {
  544. #ifndef USE_UTF8
  545. it->strOrder = pazResult[i*nCol+0];
  546. it->strSN = pazResult[i*nCol+1];
  547. it->strLine = pazResult[i*nCol+2];
  548. it->strTestTime = pazResult[i*nCol+3];
  549. it->strElapsed = pazResult[i*nCol+4];
  550. it->nElapsed = atoi(it->strElapsed.c_str());
  551. it->strTestResult = pazResult[i*nCol+5];
  552. it->nTestResult = atoi(pazResult[i*nCol+5]);
  553. it->strDeltaAVGEValue = pazResult[i*nCol+6];
  554. it->dDeltaAVGEValue = atof(pazResult[i*nCol+6]);
  555. it->strDeltaEValue = pazResult[i*nCol+7];
  556. it->dDeltaEValue = atof(pazResult[i*nCol+7]);
  557. it->strDetails = pazResult[i*nCol+8];
  558. #else
  559. // 由Native for SQLite3插入的数据,都是utf8格式;
  560. it->strOrder = CharEncoding::UTF82ASCII(pazResult[i*nCol+0]);
  561. it->strSN = CharEncoding::UTF82ASCII(pazResult[i*nCol+1]);
  562. it->strLine = CharEncoding::UTF82ASCII(pazResult[i*nCol+2]);
  563. it->strTestTime = CharEncoding::UTF82ASCII(pazResult[i*nCol+3]);
  564. it->strElapsed = CharEncoding::UTF82ASCII(pazResult[i*nCol+4]);
  565. it->nElapsed = atoi(pazResult[i*nCol+4]);
  566. it->strTestResult = CharEncoding::UTF82ASCII(pazResult[i*nCol+5]);
  567. it->nTestResult = atoi(pazResult[i*nCol+5]);
  568. it->strDeltaAVGEValue = CharEncoding::UTF82ASCII(pazResult[i*nCol+6]);
  569. it->dDeltaAVGEValue = atof(pazResult[i*nCol+6]);
  570. it->strDeltaEValue = CharEncoding::UTF82ASCII(pazResult[i*nCol+7]);
  571. it->dDeltaEValue = atof(pazResult[i*nCol+7]);
  572. it->strDetails = CharEncoding::UTF82ASCII(pazResult[i*nCol+8]);
  573. #endif
  574. }
  575. sqlite3_free_table(pazResult);
  576. return nRow;
  577. }
  578. INT CDataImpl::StatisticalQuery(std::vector<TB_STATIS> &vtStatis, std::string strWhere /* = "" */)
  579. {
  580. if ( m_psqlite3 == NULL )
  581. return -1;
  582. INT nRow = 0;
  583. INT nCol = 0;
  584. char** pazResult = NULL;
  585. char* psqlite_error = NULL;
  586. std::string strSql = _STATIS_;
  587. if ( strWhere.size() )
  588. {
  589. strSql.append(" WHERE ");
  590. strSql.append(strWhere);
  591. }
  592. strSql.append(" GROUP BY DebugSN.OrderID;");
  593. int sqlite_error = sqlite3_get_table(m_psqlite3, strSql.c_str(), &pazResult, &nRow, &nCol, &psqlite_error);
  594. if ( sqlite_error != SQLITE_OK)
  595. {
  596. GLOBAL::WriteTextLog(_T("sqlite3 error:%s,%s"),strSql.c_str(), psqlite_error);
  597. FREE_MSG;
  598. return -1;
  599. }
  600. vtStatis.resize(nRow);
  601. std::vector<TB_STATIS>::iterator it = vtStatis.begin();
  602. for(int i = 1; i <= nRow; i++, it++)
  603. {
  604. #ifndef USE_UTF8
  605. it->strCreateTime = pazResult[i*nCol+0];
  606. it->strOrderID = pazResult[i*nCol+1];
  607. it->strMode = pazResult[i*nCol+2];
  608. it->strTotalCount = pazResult[i*nCol+3];
  609. it->strPassCount = pazResult[i*nCol+4];
  610. it->strPassRate = pazResult[i*nCol+5];
  611. it->strAvgElapsed = pazResult[i*nCol+6];
  612. it->strTotalElapsed = pazResult[i*nCol+7];
  613. it->strDeltaEValue = pazResult[i*nCol+8];
  614. #else
  615. // 由Native for SQLite3插入的数据,都是utf8格式;
  616. it->strCreateTime = CharEncoding::UTF82ASCII(pazResult[i*nCol+0]);
  617. it->strOrderID = CharEncoding::UTF82ASCII(pazResult[i*nCol+1]);
  618. it->strMode = CharEncoding::UTF82ASCII(pazResult[i*nCol+2]);
  619. it->strTotalCount = CharEncoding::UTF82ASCII(pazResult[i*nCol+3]);
  620. it->strPassCount = CharEncoding::UTF82ASCII(pazResult[i*nCol+4]);
  621. it->strPassRate = CharEncoding::UTF82ASCII(pazResult[i*nCol+5]);
  622. it->strAvgElapsed = CharEncoding::UTF82ASCII(pazResult[i*nCol+6]);
  623. it->strTotalElapsed = CharEncoding::UTF82ASCII(pazResult[i*nCol+7]);
  624. it->strDeltaEValue = CharEncoding::UTF82ASCII(pazResult[i*nCol+8]);
  625. #endif
  626. }
  627. sqlite3_free_table(pazResult);
  628. return nRow;
  629. }
  630. BOOL CDataImpl::UpdateOrder(TB_ORDER &order)
  631. {
  632. return UpdateOrder(order.strOrder, order.strDeltaEType, order.strDeltaEValue, order.nMode);
  633. }
  634. BOOL CDataImpl::UpdateOrder(std::string strOrder, std::string strDeltaEType, std::string strDeltaEValue, int nMode)
  635. {
  636. if(m_psqlite3 == NULL)
  637. return FALSE;
  638. char szValue[8]={0};
  639. std::string strInsert = "UPDATE DebugOrders SET DEType ='";
  640. strInsert.append(strDeltaEType);
  641. strInsert.append("', DEValue='");
  642. strInsert.append(strDeltaEValue);
  643. strInsert.append("', Mode='");
  644. _itoa_s(nMode, szValue, 10);
  645. strInsert.append(szValue);
  646. strInsert.append("'");
  647. strInsert.append(" WHERE OrderID ='");
  648. strInsert.append(strOrder);
  649. strInsert.append("';");
  650. char* psqlite_error = NULL;
  651. int sqlite_error = sqlite3_exec(m_psqlite3, strInsert.c_str(), NULL, 0, &psqlite_error);
  652. if(SQLITE_OK != sqlite_error)
  653. {
  654. GLOBAL::WriteTextLog(_T("sqlite3 error:%s,%s"),strInsert.c_str(), psqlite_error);
  655. FREE_MSG;
  656. return FALSE;
  657. }
  658. return TRUE;
  659. }
  660. BOOL CDataImpl::UpdateSNData(TB_SN &sn_data)
  661. {
  662. return UpdateSNData(sn_data.strOrder, sn_data.strSN, sn_data.strLine, sn_data.strTestTime, sn_data.nElapsed, sn_data.nTestResult, sn_data.dDeltaAVGEValue, sn_data.dDeltaEValue, sn_data.strDetails);
  663. }
  664. BOOL CDataImpl::UpdateSNData(std::string strOrder,std::string strSN, std::string strLine, std::string strTestTime, int nElapsed, int nTestResult, double dAVGDeltaEVlaue, DOUBLE dDeltaEValue, std::string strDetails)
  665. {
  666. if(m_psqlite3 == NULL)
  667. return FALSE;
  668. char szValue[8]={0};
  669. std::string strInsert = "UPDATE DebugSN SET OrderID ='";
  670. strInsert.append(strOrder);
  671. strInsert.append("', Line='");
  672. strInsert.append(strLine);
  673. strInsert.append("', TestTime='");
  674. strInsert.append(strTestTime);
  675. _itoa_s(nElapsed, szValue, 10);
  676. strInsert.append("', ElapsedTime='");
  677. strInsert.append(szValue);
  678. _itoa_s(nTestResult, szValue, 10);
  679. strInsert.append("', TestResult='");
  680. strInsert.append(szValue);
  681. _gcvt_s(szValue, dAVGDeltaEVlaue, 3);
  682. strInsert.append("', DEAvgValue='");
  683. strInsert.append(szValue);
  684. strInsert.append("', Outcome='");
  685. strInsert.append(strDetails);
  686. strInsert.append("'");
  687. strInsert.append(" WHERE SN ='");
  688. strInsert.append(strSN);
  689. strInsert.append("';");
  690. char* psqlite_error = NULL;
  691. int sqlite_error = sqlite3_exec(m_psqlite3, strInsert.c_str(), NULL, 0, &psqlite_error);
  692. if(SQLITE_OK != sqlite_error)
  693. {
  694. GLOBAL::WriteTextLog(_T("sqlite3 error:%s,%s"),strInsert.c_str(), psqlite_error);
  695. FREE_MSG;
  696. return FALSE;
  697. }
  698. return TRUE;
  699. }
  700. BOOL CDataImpl::DeleteOrder(std::string strOrder)
  701. {
  702. if(m_psqlite3 == NULL)
  703. return FALSE;
  704. if ( TransactionBegin() != 0 )
  705. return FALSE;
  706. CHAR szSQL[1024] = {0};
  707. sprintf_s(szSQL, "delete from DebugOrders where OrderID = '%s'; delete from DebugSN where OrderID = '%s';", strOrder.c_str(), strOrder.c_str());
  708. char* psqlite_error = NULL;
  709. int sqlite_error = sqlite3_exec(m_psqlite3, szSQL, NULL, 0, &psqlite_error);
  710. if(SQLITE_OK != sqlite_error)
  711. {
  712. GLOBAL::WriteTextLog(_T("sqlite3 error:%s,%s"),szSQL, psqlite_error);
  713. FREE_MSG;
  714. // 回滚事务;
  715. sqlite3_exec(m_psqlite3, "rollback;", 0, 0, &psqlite_error);
  716. FREE_MSG;
  717. return FALSE;
  718. }
  719. if ( TransactionCommit() != 0 )
  720. return FALSE;
  721. return TRUE;
  722. }
  723. BOOL CDataImpl::DeleteSNData(std::string strSN)
  724. {
  725. if(m_psqlite3 == NULL)
  726. return FALSE;
  727. if ( TransactionBegin() != 0 )
  728. return FALSE;
  729. CHAR szSQL[1024] = {0};
  730. sprintf_s(szSQL, "delete from DebugSN where SN = '%s';", strSN.c_str());
  731. char* psqlite_error = NULL;
  732. int sqlite_error = sqlite3_exec(m_psqlite3, szSQL, NULL, 0, &psqlite_error);
  733. if(SQLITE_OK != sqlite_error)
  734. {
  735. GLOBAL::WriteTextLog(_T("sqlite3 error:%s,%s"),szSQL, psqlite_error);
  736. FREE_MSG;
  737. // 回滚事务;
  738. sqlite3_exec(m_psqlite3, "rollback;", 0, 0, &psqlite_error);
  739. FREE_MSG;
  740. return FALSE;
  741. }
  742. if ( TransactionCommit() != 0 )
  743. return FALSE;
  744. return TRUE;
  745. }