DataImpl.cpp 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769
  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. CHAR szpath[MAX_PATH] = {0};
  67. _stprintf_s(szpath, _T("%sdb\\scbc.db"), Global::g_szCurModuleDir);
  68. std::string strPath;
  69. if ( !CharEncoding::ASCII2UTF8(szpath,strPath))
  70. {
  71. return FALSE;
  72. }
  73. INT nResult = sqlite3_open(strPath.c_str(), &m_psqlite3);
  74. if ( nResult != SQLITE_OK )
  75. return FALSE;
  76. // 创建表;
  77. char* psqlite_error = NULL;
  78. if ( !QueryTable("mid"))
  79. {
  80. sqlite3_exec(m_psqlite3, _CREATE_MID_TABLE_, NULL, NULL, &psqlite_error);
  81. Global::WriteTextLog("sqlite3 error:%s,%s",_CREATE_MID_TABLE_, psqlite_error);
  82. FREE_MSG;
  83. }
  84. if ( !QueryTable("keys"))
  85. {
  86. sqlite3_exec(m_psqlite3, _CREATE_KEYS_TABLE_, NULL, NULL, &psqlite_error);
  87. Global::WriteTextLog("sqlite3 error:%s,%s",_CREATE_KEYS_TABLE_, psqlite_error);
  88. FREE_MSG;
  89. }
  90. if ( !QueryTable("log"))
  91. {
  92. sqlite3_exec(m_psqlite3, _CREATE_LOG_TABLE_, NULL, NULL, &psqlite_error);
  93. Global::WriteTextLog("sqlite3 error:%s,%s",_CREATE_LOG_TABLE_, psqlite_error);
  94. FREE_MSG;
  95. }
  96. return TRUE;
  97. }
  98. void CDataImpl::Close()
  99. {
  100. if ( m_psqlite3 )
  101. sqlite3_close(m_psqlite3);
  102. m_psqlite3 = NULL;
  103. }
  104. BOOL CDataImpl::ExecteSQL(IN LPCSTR lpSQL)
  105. {
  106. if ( lpSQL == NULL || lpSQL[0] == '\0' )
  107. {
  108. Global::WriteTextLog(_T("ExecteSQL:执行语句空!"));
  109. return FALSE;
  110. }
  111. if(m_psqlite3 == NULL)
  112. return FALSE;
  113. char* psqlite_error = NULL;
  114. int sqlite_error = sqlite3_exec(m_psqlite3, lpSQL, NULL, 0, &psqlite_error);
  115. if(SQLITE_OK != sqlite_error)
  116. {
  117. Global::WriteTextLog("sqlite3 error:%s,%s",lpSQL, psqlite_error);
  118. FREE_MSG;
  119. return FALSE;
  120. }
  121. return TRUE;
  122. }
  123. BOOL CDataImpl::QueryTable(std::string table)
  124. {
  125. if ( table.size() == 0 )
  126. {
  127. Global::WriteTextLog(_T("QueryTable:表名空!"));
  128. return FALSE;
  129. }
  130. if(m_psqlite3 == NULL)
  131. return FALSE;
  132. INT nRow = 0;
  133. INT nCol = 0;
  134. char** pazResult = NULL;
  135. char* psqlite_error = NULL;
  136. char szSql[MAX_PATH] = {0};
  137. _stprintf_s(szSql, _T("select * from sqlite_master where type = 'table' and name = '%s'"), table.c_str());
  138. int sqlite_error = sqlite3_get_table(m_psqlite3, szSql, &pazResult, &nRow, &nCol, &psqlite_error);
  139. if ( sqlite_error != SQLITE_OK)
  140. {
  141. Global::WriteTextLog("sqlite3 error:%s,%s",szSql, psqlite_error);
  142. FREE_MSG;
  143. return FALSE;
  144. }
  145. sqlite3_free_table(pazResult);
  146. return nRow != 0;
  147. }
  148. INT CDataImpl::QueryMidInfo(std::string order, STMid &data)
  149. {
  150. if ( m_psqlite3 == NULL )
  151. return -1;
  152. INT nRow = 0;
  153. INT nCol = 0;
  154. char** pazResult = NULL;
  155. char* psqlite_error = NULL;
  156. std::string strSql = _SELECT_MID_TABLE_;
  157. strSql.append(" WHERE bid = '");
  158. strSql.append(order);
  159. strSql.append("';");
  160. int sqlite_error = sqlite3_get_table(m_psqlite3, strSql.c_str(), &pazResult, &nRow, &nCol, &psqlite_error);
  161. if ( sqlite_error != SQLITE_OK)
  162. {
  163. Global::WriteTextLog("sqlite3 error:%s,%s",strSql.c_str(), psqlite_error);
  164. FREE_MSG;
  165. return -1;
  166. }
  167. if( nRow == 1)
  168. {
  169. #ifndef USE_UTF8
  170. data.order = pazResult[nCol+0];
  171. data.number = pazResult[nCol+1];
  172. data.pid = pazResult[nCol+2];
  173. data.ctype = pazResult[nCol+3];
  174. data.version = pazResult[nCol+4];
  175. data.purl = pazResult[nCol+5];
  176. data.psize = pazResult[nCol+6];
  177. data.pmd5 = pazResult[nCol+7];
  178. data.status = pazResult[nCol+8];
  179. data.start_date = pazResult[nCol+9];
  180. data.finish_date = pazResult[nCol+10];
  181. data.des = pazResult[nCol+11];
  182. #else
  183. // 由Native for SQLite3插入的数据,都是utf8格式;
  184. data.order = CharEncoding::UTF82ASCII(pazResult[nCol+0]);
  185. data.number = pazResult[nCol+1];
  186. data.pid = pazResult[nCol+2];
  187. data.ctype = CharEncoding::UTF82ASCII(pazResult[nCol+3]);
  188. data.version = CharEncoding::UTF82ASCII(pazResult[nCol+4]);
  189. data.purl = CharEncoding::UTF82ASCII(pazResult[nCol+5]);
  190. data.psize = pazResult[nCol+6];
  191. data.pmd5 = CharEncoding::UTF82ASCII(pazResult[nCol+7]);
  192. data.status = pazResult[nCol+8];
  193. data.start_date = CharEncoding::UTF82ASCII(pazResult[nCol+9]);
  194. data.finish_date = CharEncoding::UTF82ASCII(pazResult[nCol+10]);
  195. data.des = CharEncoding::UTF82ASCII(pazResult[nCol+11]);
  196. #endif
  197. }
  198. sqlite3_free_table(pazResult);
  199. return nRow;
  200. }
  201. // 主要返回keys,用于抄写;
  202. INT CDataImpl::QueryKeyInfo(std::string sn, STKeys &data)
  203. {
  204. if ( m_psqlite3 == NULL )
  205. return -1;
  206. INT nRow = 0;
  207. INT nCol = 0;
  208. char** pazResult = NULL;
  209. char* psqlite_error = NULL;
  210. std::string strSql = _SELECT_KEYS_TABLE_;
  211. strSql.append(" WHERE sn = '");
  212. strSql.append(sn);
  213. strSql.append("';");
  214. int sqlite_error = sqlite3_get_table(m_psqlite3, strSql.c_str(), &pazResult, &nRow, &nCol, &psqlite_error);
  215. if ( sqlite_error != SQLITE_OK)
  216. {
  217. Global::WriteTextLog("sqlite3 error:%s,%s",strSql.c_str(), psqlite_error);
  218. FREE_MSG;
  219. return -1;
  220. }
  221. if ( nRow == 1)
  222. {
  223. data.bid = pazResult[nCol+0];
  224. data.pid = pazResult[nCol+1];
  225. data.sn = pazResult[nCol+2];
  226. data.keys = pazResult[nCol+3];
  227. data.copy_date = pazResult[nCol+4];
  228. data.report_date = pazResult[nCol+5];
  229. }
  230. sqlite3_free_table(pazResult);
  231. return nRow;
  232. }
  233. INT CDataImpl::QueryUnReportKeyInfo(std::vector<STKeys> &vtdata)
  234. {
  235. if ( m_psqlite3 == NULL )
  236. return -1;
  237. INT nRow = 0;
  238. INT nCol = 0;
  239. char** pazResult = NULL;
  240. char* psqlite_error = NULL;
  241. std::string strSql = "SELECT sn,copy_date FROM keys WHERE copy_date <> '' and report_date = '' LIMIT 0,1000";
  242. int sqlite_error = sqlite3_get_table(m_psqlite3, strSql.c_str(), &pazResult, &nRow, &nCol, &psqlite_error);
  243. if ( sqlite_error != SQLITE_OK)
  244. {
  245. Global::WriteTextLog("sqlite3 error:%s,%s",strSql.c_str(), psqlite_error);
  246. FREE_MSG;
  247. return -1;
  248. }
  249. vtdata.resize(nRow);
  250. std::vector<STKeys>::iterator it = vtdata.begin();
  251. for(int i = 1; i <= nRow; i++, it++)
  252. {
  253. it->sn = pazResult[i*nCol+0];
  254. it->copy_date= pazResult[i*nCol+1];
  255. }
  256. sqlite3_free_table(pazResult);
  257. return nRow;
  258. }
  259. INT CDataImpl::QueryLogInfo(std::string sn, STLog &data)
  260. {
  261. if ( m_psqlite3 == NULL )
  262. return -1;
  263. INT nRow = 0;
  264. INT nCol = 0;
  265. char** pazResult = NULL;
  266. char* psqlite_error = NULL;
  267. int sqlite_error = sqlite3_get_table(m_psqlite3, _SELECT_LOG_TABLE_, &pazResult, &nRow, &nCol, &psqlite_error);
  268. if ( sqlite_error != SQLITE_OK)
  269. {
  270. Global::WriteTextLog("sqlite3 error:%s,%s",_SELECT_LOG_TABLE_, psqlite_error);
  271. FREE_MSG;
  272. return -1;
  273. }
  274. if ( nRow == 1 )
  275. {
  276. #ifndef USE_UTF8
  277. data.type = pazResult[nCol+0];
  278. data.bid = pazResult[nCol+1];
  279. data.sn = pazResult[nCol+2];
  280. data.content = pazResult[nCol+3];
  281. data.gdate = pazResult[nCol+4];
  282. data.report_date = pazResult[nCol+5];
  283. #else
  284. // 由Native for SQLite3插入的数据,都是utf8格式;
  285. data.type = CharEncoding::UTF82ASCII(pazResult[nCol+0]);
  286. data.bid = CharEncoding::UTF82ASCII(pazResult[nCol+1]);
  287. data.sn = CharEncoding::UTF82ASCII(pazResult[nCol+2]);
  288. data.content = CharEncoding::UTF82ASCII(pazResult[nCol+3]);
  289. data.gdate = pazResult[nCol+4];
  290. data.report_date = pazResult[nCol+5];
  291. #endif
  292. }
  293. sqlite3_free_table(pazResult);
  294. return nRow;
  295. }
  296. INT CDataImpl::QueryUnReportLogInfo(std::vector<STLog> &vtdata)
  297. {
  298. if ( m_psqlite3 == NULL )
  299. return -1;
  300. INT nRow = 0;
  301. INT nCol = 0;
  302. char** pazResult = NULL;
  303. char* psqlite_error = NULL;
  304. std::string strSql = "SELECT type, bid, sn, content, gdate FROM log WHERE report_date = ''";
  305. int sqlite_error = sqlite3_get_table(m_psqlite3, strSql.c_str(), &pazResult, &nRow, &nCol, &psqlite_error);
  306. if ( sqlite_error != SQLITE_OK)
  307. {
  308. Global::WriteTextLog("sqlite3 error:%s,%s",strSql.c_str(), psqlite_error);
  309. FREE_MSG;
  310. return -1;
  311. }
  312. vtdata.resize(nRow);
  313. std::vector<STLog>::iterator it = vtdata.begin();
  314. for(int i = 1; i <= nRow; i++, it++)
  315. {
  316. it->type = pazResult[i*nCol+0];
  317. it->bid= pazResult[i*nCol+1];
  318. it->sn= pazResult[i*nCol+2];
  319. it->content= pazResult[i*nCol+3];
  320. it->gdate= pazResult[i*nCol+4];
  321. }
  322. sqlite3_free_table(pazResult);
  323. return nRow;
  324. }
  325. INT CDataImpl::QueryBidInfo(std::string order, BidInfo& binfo)
  326. {
  327. if ( m_psqlite3 == NULL )
  328. return -1;
  329. INT nRow = 0;
  330. INT nCol = 0;
  331. char** pazResult = NULL;
  332. char* psqlite_error = NULL;
  333. TCHAR szSQL[1024] = {0};
  334. _stprintf_s(szSQL, _SELECT_BID_INFO__, order.c_str());
  335. int sqlite_error = sqlite3_get_table(m_psqlite3, szSQL, &pazResult, &nRow, &nCol, &psqlite_error);
  336. if ( sqlite_error != SQLITE_OK)
  337. {
  338. Global::WriteTextLog("sqlite3 error:%s,%s",szSQL, psqlite_error);
  339. FREE_MSG;
  340. return -1;
  341. }
  342. if ( nRow == 1 )
  343. {
  344. binfo.tcount = pazResult[nCol+0];
  345. binfo.sn_count = pazResult[nCol+1];
  346. binfo.copy_count = pazResult[nCol+2];
  347. binfo.report_count = pazResult[nCol+3];
  348. }
  349. sqlite3_free_table(pazResult);
  350. return nRow;
  351. }
  352. INT CDataImpl::InsertMidInfo(STMid &data)
  353. {
  354. if(m_psqlite3 == NULL)
  355. return -1;
  356. std::string strInsert = "INSERT INTO mid(bid, number, pid, ctype, version, purl, psize, pmd5)VALUES ('";
  357. strInsert.append(data.order);
  358. strInsert.append("','");
  359. strInsert.append(data.number);
  360. strInsert.append("','");
  361. strInsert.append(data.pid);
  362. strInsert.append("','");
  363. strInsert.append(data.ctype);
  364. strInsert.append("','");
  365. strInsert.append(data.version);
  366. strInsert.append("','");
  367. strInsert.append(data.purl);
  368. strInsert.append("','");
  369. strInsert.append(data.psize);
  370. strInsert.append("','");
  371. strInsert.append(data.pmd5);
  372. strInsert.append("');");
  373. char* psqlite_error = NULL;
  374. int sqlite_error = sqlite3_exec(m_psqlite3, strInsert.c_str(), NULL, 0, &psqlite_error);
  375. if(SQLITE_OK != sqlite_error)
  376. {
  377. Global::WriteTextLog("sqlite3 error:%s,%s",strInsert.c_str(), psqlite_error);
  378. FREE_MSG;
  379. }
  380. return sqlite_error;
  381. }
  382. INT CDataImpl::InsertKeyInfo(STKeys &data)
  383. {
  384. if(m_psqlite3 == NULL)
  385. return -1;
  386. std::string strInsert = "INSERT INTO keys(bid, pid, sn, keys) VALUES ('";
  387. strInsert.append(data.bid);
  388. strInsert.append("','");
  389. strInsert.append(data.pid);
  390. strInsert.append("','");
  391. strInsert.append(data.sn);
  392. strInsert.append("','");
  393. strInsert.append(data.keys);
  394. strInsert.append("');");
  395. char* psqlite_error = NULL;
  396. int sqlite_error = sqlite3_exec(m_psqlite3, strInsert.c_str(), NULL, 0, &psqlite_error);
  397. if(SQLITE_OK != sqlite_error)
  398. {
  399. Global::WriteTextLog("sqlite3 error:%s,%s",strInsert.c_str(), psqlite_error);
  400. FREE_MSG;
  401. }
  402. return sqlite_error;
  403. }
  404. INT CDataImpl::InsertLogInfo(STLog &data)
  405. {
  406. if(m_psqlite3 == NULL)
  407. return -1;
  408. std::string strInsert = "INSERT INTO log(type, bid, sn, content, report_date) VALUES ('";
  409. strInsert.append(data.type);
  410. strInsert.append("','");
  411. strInsert.append(data.bid);
  412. strInsert.append("','");
  413. strInsert.append(data.sn);
  414. strInsert.append("','");
  415. strInsert.append(data.content);
  416. strInsert.append("','");
  417. strInsert.append(data.report_date);
  418. strInsert.append("');");
  419. char* psqlite_error = NULL;
  420. int sqlite_error = sqlite3_exec(m_psqlite3, strInsert.c_str(), NULL, 0, &psqlite_error);
  421. if(SQLITE_OK != sqlite_error)
  422. {
  423. Global::WriteTextLog("sqlite3 error:%s,%s",strInsert.c_str(), psqlite_error);
  424. FREE_MSG;
  425. }
  426. return sqlite_error;
  427. }
  428. INT CDataImpl::BatchInsertKeyInfo(std::vector<STKeys> &vtdata)
  429. {
  430. if(m_psqlite3 == NULL)
  431. return -1;
  432. char* psqlite_error = NULL;
  433. INT nRet = sqlite3_exec(m_psqlite3, "begin;", 0, 0, &psqlite_error);
  434. if ( nRet != SQLITE_OK )
  435. {
  436. Global::WriteTextLog("sqlite3 error:begin,%s", psqlite_error);
  437. FREE_MSG;
  438. return nRet;
  439. }
  440. sqlite3_stmt *stmt;
  441. const char* sql = "INSERT INTO keys(bid, pid, sn, keys) VALUES (?,?,?,?)";
  442. sqlite3_prepare_v2(m_psqlite3, sql, strlen(sql), &stmt, 0);
  443. std::vector<STKeys>::iterator it = vtdata.begin();
  444. for ( int i = 0; it != vtdata.end(); it++, i++ )
  445. {
  446. sqlite3_reset(stmt);
  447. sqlite3_bind_text(stmt, 1, it->bid.c_str(), it->bid.size(), SQLITE_STATIC);
  448. sqlite3_bind_text(stmt, 2, it->pid.c_str(), it->pid.size(), SQLITE_STATIC);
  449. sqlite3_bind_text(stmt, 3, it->sn.c_str(), it->sn.size(), SQLITE_STATIC);
  450. sqlite3_bind_text(stmt, 4, it->keys.c_str(), it->keys.size(), SQLITE_STATIC);
  451. sqlite3_step(stmt);
  452. }
  453. nRet = sqlite3_finalize(stmt);
  454. if ( nRet != SQLITE_OK )
  455. {
  456. // 回滚事务;
  457. nRet = sqlite3_exec(m_psqlite3, "rollback;", 0, 0, &psqlite_error);
  458. if ( nRet != SQLITE_OK )
  459. Global::WriteTextLog("sqlite3 error:rollback,%s",psqlite_error);
  460. FREE_MSG;
  461. return nRet;
  462. }
  463. nRet = sqlite3_exec(m_psqlite3, "commit;", 0, 0, &psqlite_error);
  464. if ( nRet != SQLITE_OK )
  465. {
  466. Global::WriteTextLog("sqlite3 error:commit,%s",psqlite_error);
  467. FREE_MSG;
  468. return nRet;
  469. }
  470. return SQLITE_OK;
  471. }
  472. BOOL CDataImpl::UpdateMidInfo(STMid &data)
  473. {
  474. if(m_psqlite3 == NULL)
  475. return FALSE;
  476. std::string strInsert = "UPDATE mid SET pid ='";
  477. strInsert.append(data.pid);
  478. strInsert.append("', ctype='");
  479. strInsert.append(data.ctype);
  480. strInsert.append("', version='");
  481. strInsert.append(data.version);
  482. strInsert.append("', purl='");
  483. strInsert.append(data.purl);
  484. strInsert.append("', psize='");
  485. strInsert.append(data.psize);
  486. strInsert.append("', pmd5='");
  487. strInsert.append(data.pmd5);
  488. strInsert.append("', number='");
  489. strInsert.append(data.number);
  490. strInsert.append("'");
  491. strInsert.append(" WHERE bid ='");
  492. strInsert.append(data.order);
  493. strInsert.append("';");
  494. char* psqlite_error = NULL;
  495. int sqlite_error = sqlite3_exec(m_psqlite3, strInsert.c_str(), NULL, 0, &psqlite_error);
  496. if(SQLITE_OK != sqlite_error)
  497. {
  498. Global::WriteTextLog("sqlite3 error:%s,%s",strInsert.c_str(), psqlite_error);
  499. FREE_MSG;
  500. return FALSE;
  501. }
  502. return TRUE;
  503. }
  504. BOOL CDataImpl::UpdateDownloadStatus(std::string order, int status, std::string des /* = "" */ )
  505. {
  506. if(m_psqlite3 == NULL)
  507. return FALSE;
  508. char szStatus[10] = {0};
  509. _itoa_s(status, szStatus, 10);
  510. std::string strInsert = "UPDATE mid SET status ='";
  511. strInsert.append(szStatus);
  512. strInsert.append("', des='");
  513. if ( status == -1 )
  514. {
  515. strInsert.append(des);
  516. strInsert.append("'");
  517. }
  518. else if ( status == 1 )
  519. {
  520. strInsert.append("下载成功");
  521. strInsert.append("',finish_date=current_timestamp");
  522. }
  523. strInsert.append(" WHERE bid ='");
  524. strInsert.append(order);
  525. strInsert.append("';");
  526. char* psqlite_error = NULL;
  527. int sqlite_error = sqlite3_exec(m_psqlite3, strInsert.c_str(), NULL, 0, &psqlite_error);
  528. if(SQLITE_OK != sqlite_error)
  529. {
  530. Global::WriteTextLog("sqlite3 error:%s,%s",strInsert.c_str(), psqlite_error);
  531. FREE_MSG;
  532. return FALSE;
  533. }
  534. return TRUE;
  535. }
  536. // 抄写成功状态;
  537. BOOL CDataImpl::UpdateKeyCopyStatus(std::string sn)
  538. {
  539. if(m_psqlite3 == NULL)
  540. return FALSE;
  541. std::string strInsert = "UPDATE keys SET copy_date=current_timestamp";
  542. strInsert.append(" WHERE sn ='");
  543. strInsert.append(sn);
  544. strInsert.append("';");
  545. char* psqlite_error = NULL;
  546. int sqlite_error = sqlite3_exec(m_psqlite3, strInsert.c_str(), NULL, 0, &psqlite_error);
  547. if(SQLITE_OK != sqlite_error)
  548. {
  549. Global::WriteTextLog("sqlite3 error:%s,%s",strInsert.c_str(), psqlite_error);
  550. FREE_MSG;
  551. return FALSE;
  552. }
  553. return TRUE;
  554. }
  555. BOOL CDataImpl::UpdateKeyReportStatus(std::string sn)
  556. {
  557. if(m_psqlite3 == NULL)
  558. return FALSE;
  559. std::string strInsert = "UPDATE keys SET report_date=current_timestamp";
  560. strInsert.append(" WHERE sn ='");
  561. strInsert.append(sn);
  562. strInsert.append("' and copy_date <> '';");
  563. char* psqlite_error = NULL;
  564. int sqlite_error = sqlite3_exec(m_psqlite3, strInsert.c_str(), NULL, 0, &psqlite_error);
  565. if(SQLITE_OK != sqlite_error)
  566. {
  567. Global::WriteTextLog("sqlite3 error:%s,%s",strInsert.c_str(), psqlite_error);
  568. FREE_MSG;
  569. return FALSE;
  570. }
  571. return TRUE;
  572. }
  573. BOOL CDataImpl::BatchUpdateKeyReportStatus(std::vector<STKeys> &vtKeys)
  574. {
  575. if(m_psqlite3 == NULL)
  576. return FALSE;
  577. char* psqlite_error = NULL;
  578. INT nRet = sqlite3_exec(m_psqlite3, "begin;", 0, 0, &psqlite_error);
  579. if ( nRet != SQLITE_OK )
  580. {
  581. Global::WriteTextLog("sqlite3 error:begin,%s", psqlite_error);
  582. FREE_MSG;
  583. return FALSE;
  584. }
  585. sqlite3_stmt *stmt;
  586. const char* sql = "UPDATE keys set report_date=current_timestamp WHERE sn = '?'";
  587. sqlite3_prepare_v2(m_psqlite3, sql, strlen(sql), &stmt, 0);
  588. std::vector<STKeys>::iterator it = vtKeys.begin();
  589. for ( int i = 0; it != vtKeys.end(); it++, i++ )
  590. {
  591. sqlite3_reset(stmt);
  592. sqlite3_bind_text(stmt, 1, it->sn.c_str(), it->sn.size(), SQLITE_STATIC);
  593. sqlite3_step(stmt);
  594. }
  595. nRet = sqlite3_finalize(stmt);
  596. if ( nRet != SQLITE_OK )
  597. {
  598. // 回滚事务;
  599. nRet = sqlite3_exec(m_psqlite3, "rollback;", 0, 0, &psqlite_error);
  600. if ( nRet != SQLITE_OK )
  601. Global::WriteTextLog("sqlite3 error:rollback,%s",psqlite_error);
  602. FREE_MSG;
  603. return FALSE;
  604. }
  605. nRet = sqlite3_exec(m_psqlite3, "commit;", 0, 0, &psqlite_error);
  606. if ( nRet != SQLITE_OK )
  607. {
  608. Global::WriteTextLog("sqlite3 error:commit,%s",psqlite_error);
  609. FREE_MSG;
  610. return FALSE;
  611. }
  612. return TRUE;
  613. }
  614. BOOL CDataImpl::UpdateLogReportStatus(std::string sn, std::string type)
  615. {
  616. if(m_psqlite3 == NULL)
  617. return FALSE;
  618. std::string strInsert = "UPDATE log SET report_date=current_timestamp";
  619. strInsert.append(" WHERE sn ='");
  620. strInsert.append(sn);
  621. strInsert.append("' and type ='");
  622. strInsert.append(type);
  623. strInsert.append("';");
  624. char* psqlite_error = NULL;
  625. int sqlite_error = sqlite3_exec(m_psqlite3, strInsert.c_str(), NULL, 0, &psqlite_error);
  626. if(SQLITE_OK != sqlite_error)
  627. {
  628. Global::WriteTextLog("sqlite3 error:%s,%s",strInsert.c_str(), psqlite_error);
  629. FREE_MSG;
  630. return FALSE;
  631. }
  632. return TRUE;
  633. }
  634. BOOL CDataImpl::RemoveBidData(std::string order)
  635. {
  636. if(m_psqlite3 == NULL)
  637. return FALSE;
  638. if ( TransactionBegin() != 0 )
  639. return FALSE;
  640. TCHAR szSQL[1024] = {0};
  641. _stprintf_s(szSQL, "delete from mid where bid = '%s'; delete from keys where bid = '%s'; delete from log where bid = '%s'", order.c_str(), order.c_str(), order.c_str());
  642. char* psqlite_error = NULL;
  643. int sqlite_error = sqlite3_exec(m_psqlite3, szSQL, NULL, 0, &psqlite_error);
  644. if(SQLITE_OK != sqlite_error)
  645. {
  646. Global::WriteTextLog("sqlite3 error:%s,%s",szSQL, psqlite_error);
  647. FREE_MSG;
  648. // 回滚事务;
  649. sqlite3_exec(m_psqlite3, "rollback;", 0, 0, &psqlite_error);
  650. FREE_MSG;
  651. return FALSE;
  652. }
  653. if ( TransactionCommit() != 0 )
  654. return FALSE;
  655. return TRUE;
  656. }