DataBase.c 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627
  1. #include <stdio.h> /*標準輸入輸出定義*/
  2. #include <stdlib.h> /*標準函數庫定義*/
  3. #include <string.h>
  4. #include <stdint.h>
  5. #include <time.h>
  6. #include "../Config.h"
  7. #include "../Log/log.h"
  8. #include "../Define/define.h"
  9. #include "../ShareMemory/shmMem.h"
  10. #include "../SelectGun/SelectGun.h"
  11. //------------------------------------------------------------------------------
  12. #define DB_FILE "/Storage/ChargeLog/localCgargingRecord.db"
  13. //------------------------------------------------------------------------------
  14. static sqlite3 *localDb;
  15. static DcCommonInfo* ShmDcCommonData = NULL;
  16. //------------------------------------------------------------------------------
  17. //===============================================
  18. // SQLite3 related routine
  19. //===============================================
  20. int DB_Open(void)
  21. {
  22. int result = PASS;
  23. char *errMsg = NULL;
  24. char *createRecordSql = "CREATE TABLE IF NOT EXISTS charging_record("
  25. "idx integer primary key AUTOINCREMENT, "
  26. "reservationId text, "
  27. "transactionId text, "
  28. "startMethod text, "
  29. "userId text, "
  30. "dateTimeStart text, "
  31. "dateTimeStop text,"
  32. "socStart text, "
  33. "socStop text, "
  34. "chargeEnergy text, "
  35. "stopReason text"
  36. ");";
  37. /*char *createCfgSql = "CREATE TABLE IF NOT EXISTS `config` ( "
  38. "`idx` INTEGER PRIMARY KEY AUTOINCREMENT, "
  39. "`IsAvailable` TEXT NOT NULL, "
  40. "`connector` INTEGER NOT NULL, "
  41. "`val` TEXT NOT NULL, unique(IsAvailable,connector) on conflict replace);";
  42. */
  43. //DS60-120 add
  44. char *createCfgSql = "CREATE TABLE IF NOT EXISTS `config` ( "
  45. "`idx` INTEGER PRIMARY KEY AUTOINCREMENT, "
  46. "`item` TEXT NOT NULL, "
  47. "`connector` INTEGER NOT NULL, "
  48. "`val` TEXT NOT NULL, unique(item,connector) on conflict replace);";
  49. char *createrecordSql = "CREATE TABLE IF NOT EXISTS `event_record` ( "
  50. "`idx` INTEGER PRIMARY KEY AUTOINCREMENT, "
  51. "`occurDatetime` TEXT NOT NULL, "
  52. "`statusCode` TEXT NOT NULL, unique(occurDatetime,statusCode) on conflict replace);";
  53. char *createrebootSql = "CREATE TABLE IF NOT EXISTS `reboot_record` ( "
  54. "`idx` INTEGER PRIMARY KEY AUTOINCREMENT, "
  55. "`rebootDatetime` TEXT NOT NULL, unique(rebootDatetime) on conflict replace);";
  56. char *createPowerConsumption = "CREATE TABLE IF NOT EXISTS power_consumption( "
  57. "idx INTEGER PRIMARY KEY AUTOINCREMENT, "
  58. "connector TEXT, "
  59. "val TEXT);";
  60. char* createDcMeterSql="CREATE TABLE IF NOT EXISTS ocmf_record("
  61. "idx integer primary key AUTOINCREMENT, "
  62. "transactionId text, "
  63. "status INTEGER NOT NULL, "
  64. "connector INTEGER NOT NULL, "
  65. "publicKey text, "
  66. "ocmfInfo text"
  67. ");";
  68. if (sqlite3_open(DB_FILE, &localDb)) {
  69. result = FAIL;
  70. log_info( "Can't open database: %s", sqlite3_errmsg(localDb));
  71. sqlite3_close(localDb);
  72. } else {
  73. log_info( "Local charging record database open successfully.");
  74. if (sqlite3_exec(localDb, createRecordSql, 0, 0, &errMsg) != SQLITE_OK) {
  75. result = FAIL;
  76. log_info( "Create local charging record table error message: %s", errMsg);
  77. } else {
  78. log_info( "Opened local charging record table successfully");
  79. }
  80. if (sqlite3_exec(localDb, createCfgSql, 0, 0, &errMsg) != SQLITE_OK) {
  81. result = FAIL;
  82. log_info( "Create local config table error message: %s", errMsg);
  83. } else {
  84. log_info( "Opened local config table successfully");
  85. }
  86. //DS60-120
  87. if (sqlite3_exec(localDb, createrecordSql, 0, 0, &errMsg) != SQLITE_OK) {
  88. result = FAIL;
  89. log_info( "Create local record table error message: %s", errMsg);
  90. } else {
  91. log_info( "Opened local record table successfully");
  92. }
  93. //DS60-120
  94. if (sqlite3_exec(localDb, createPowerConsumption, 0, 0, &errMsg) != SQLITE_OK) {
  95. result = FAIL;
  96. log_info("Create power consumption record table error message: %s", errMsg);
  97. } else {
  98. log_info("Opened power consumption record table successfully");
  99. }
  100. if (sqlite3_exec(localDb, createrebootSql, 0, 0, &errMsg) != SQLITE_OK) {
  101. result = FAIL;
  102. log_info( "Create reboot record table error message: %s", errMsg);
  103. } else {
  104. log_info( "Opened reboot record table successfully");
  105. }
  106. //-----
  107. if (sqlite3_exec(localDb, createDcMeterSql, 0, 0, &errMsg) != SQLITE_OK)
  108. {
  109. result = FAIL;
  110. log_info( "Create OCMF record table error message: %s\n", errMsg);
  111. }
  112. else
  113. {
  114. log_info( "Opened OCMF record table successfully\n");
  115. }
  116. sqlite3_close(localDb);
  117. }
  118. ShmDcCommonData = (DcCommonInfo*)GetShmDcCommonData();
  119. return result;
  120. }
  121. int DB_Insert_Record(int gunIndex)
  122. {
  123. int result = PASS;
  124. char *errMsg = NULL;
  125. char insertSql[1024];
  126. struct ChargingInfoData *pDcChargingInfo = (struct ChargingInfoData *)GetDcChargingInfoData(gunIndex);
  127. struct OCPP16Data *ShmOCPP16Data = (struct OCPP16Data *)GetShmOCPP16Data();
  128. SelectGunInfo *ShmSelectGunInfo = (SelectGunInfo *)GetShmSelectGunInfo();
  129. sprintf(insertSql, "insert into charging_record(reservationId, transactionId, startMethod, userId, dateTimeStart, dateTimeStop, socStart, socStop, chargeEnergy, stopReason) "
  130. "values('%d', '%d', '%d', '%s', '%s', '%s', '%d', '%d', '%f', '%s');",
  131. pDcChargingInfo->ReservationId, //DS60-120 add
  132. ShmSelectGunInfo->PricesInfo[gunIndex].TransactionId,
  133. pDcChargingInfo->StartMethod,
  134. pDcChargingInfo->StartUserId,
  135. pDcChargingInfo->StartDateTime,
  136. pDcChargingInfo->StopDateTime,
  137. pDcChargingInfo->EvBatteryStartSoc,
  138. pDcChargingInfo->EvBatterySoc,
  139. pDcChargingInfo->PresentChargedEnergy,
  140. ShmOCPP16Data->StopTransaction[gunIndex].StopReason);
  141. //if (sqlite3_open("/Storage/ChargeLog/localCgargingRecord.db", &db)) {
  142. if (sqlite3_open(DB_FILE, &localDb)) { //DS60-120 add
  143. result = FAIL;
  144. log_info( "Can't open database: %s", sqlite3_errmsg(localDb));
  145. sqlite3_close(localDb);
  146. } else {
  147. //log_info( "Local charging record database open successfully.");
  148. if (sqlite3_exec(localDb, insertSql, 0, 0, &errMsg) != SQLITE_OK) {
  149. result = FAIL;
  150. log_info( "Insert local charging record error message: %s", errMsg);
  151. } else {
  152. //log_info( "Insert local charging record successfully");
  153. }
  154. //DS60-120 add
  155. sprintf(insertSql, "delete from charging_record where idx < (select idx from charging_record order by idx desc limit 1)-2000;");
  156. if (sqlite3_exec(localDb, insertSql, 0, 0, &errMsg) != SQLITE_OK) {
  157. result = FAIL;
  158. log_info( "delete local charging error message: %s", errMsg);
  159. } else {
  160. //log_info( "delete local charging record successfully");
  161. }
  162. sqlite3_close(localDb);
  163. }
  164. return result;
  165. }
  166. int DB_Update_Operactive(uint8_t gunIndex, uint8_t IsAvailable)
  167. {
  168. uint8_t result = false;
  169. char *errMsg = NULL;
  170. char sqlStr[1024];
  171. srand(time(NULL));
  172. if (sqlite3_open(DB_FILE, &localDb)) {
  173. result = FAIL;
  174. log_info( "Can't open database: %s", sqlite3_errmsg(localDb));
  175. sqlite3_close(localDb);
  176. } else {
  177. log_info( "Local charging record database open successfully (%d).", IsAvailable);
  178. //sprintf(sqlStr, "insert or replace into config (IsAvailable, connector, val) values('IsAvailable', %d, %d);", gunIndex, IsAvailable);
  179. sprintf(sqlStr,
  180. "insert or replace into config (item, connector, val) values('IsAvailable', %d, %d);",
  181. gunIndex,
  182. IsAvailable); //DS60-120 add
  183. log_info("sqlStr= %s", sqlStr);
  184. if (sqlite3_exec(localDb, sqlStr, 0, 0, &errMsg) != SQLITE_OK) {
  185. result = FAIL;
  186. log_info( "update config error message: %s", errMsg);
  187. } else {
  188. log_info("update connector-%d config item isOperactive to %d", gunIndex, IsAvailable);
  189. }
  190. sqlite3_close(localDb);
  191. }
  192. return result;
  193. }
  194. int DB_Get_Operactive(uint8_t gunIndex)
  195. {
  196. uint8_t result = true;
  197. char *errMsg = NULL;
  198. char sqlStr[1024];
  199. char **rs;
  200. int rows, cols;
  201. //sprintf(sqlStr, "select * from config where IsAvailable='IsAvailable' and connector=%d;", gunIndex);
  202. sprintf(sqlStr, "select * from config where item='IsAvailable' and connector=%d;", gunIndex); //DS60-120 add
  203. //DEBUG_INFO("sqlStr= %s", sqlStr);
  204. if (sqlite3_open(DB_FILE, &localDb)) {
  205. result = FAIL;
  206. log_info( "Can't open database: %s", sqlite3_errmsg(localDb));
  207. sqlite3_close(localDb);
  208. } else {
  209. log_info( "Local config query database open successfully.");
  210. sqlite3_get_table(localDb, sqlStr, &rs, &rows, &cols, &errMsg);
  211. if (rows > 0) {
  212. for (int idxRow = 1; idxRow <= rows; idxRow++) {
  213. if (strcmp(rs[(idxRow * cols) + 3], "0") == 0) {
  214. result = false;
  215. }
  216. log_info("Query connector-%d isOperactive: %s", gunIndex, rs[(idxRow * cols) + 3]);
  217. }
  218. } else {
  219. log_info("Query connector-%d fail, set default value to operactive.", gunIndex);
  220. }
  221. sqlite3_free_table(rs);
  222. sqlite3_close(localDb);
  223. }
  224. return result;
  225. }
  226. int DB_Insert_PowerConsumption(uint8_t gunIndex, float energy)
  227. {
  228. uint8_t result = false;
  229. char* errMsg = NULL;
  230. char sqlStr[1024];
  231. srand(time(NULL));
  232. if (sqlite3_open(DB_FILE, &localDb)) {
  233. result = FAIL;
  234. log_info("Can't open database: %s", sqlite3_errmsg(localDb));
  235. sqlite3_close(localDb);
  236. } else {
  237. //log_info("Local charging record database open successfully (%f).", energy);
  238. sprintf(sqlStr,"insert into power_consumption (connector, val) values (%d, %f);",
  239. gunIndex,
  240. energy); //DS60-120 add
  241. //log_info("sqlStr= %s", sqlStr);
  242. if (sqlite3_exec(localDb, sqlStr, 0, 0, &errMsg) != SQLITE_OK) {
  243. result = FAIL;
  244. log_info("Insert power consumption error message: %s", errMsg);
  245. } else {
  246. log_info("Insert connector-%d config item PowerComsumption to %f", gunIndex, energy);
  247. }
  248. sqlite3_close(localDb);
  249. }
  250. return result;
  251. }
  252. int DB_Update_PowerConsumption(uint8_t gunIndex, float energy)
  253. {
  254. uint8_t result = false;
  255. char* errMsg = NULL;
  256. char sqlStr[1024];
  257. srand(time(NULL));
  258. if (sqlite3_open(DB_FILE, &localDb)) {
  259. result = FAIL;
  260. log_info("Can't open database: %s", sqlite3_errmsg(localDb));
  261. sqlite3_close(localDb);
  262. } else {
  263. //log_info("Local charging record database open successfully.");
  264. sprintf(sqlStr,"update power_consumption set val = %f where connector = %d; ",
  265. energy,
  266. gunIndex); //DS60-120 add
  267. //log_info("sqlStr= %s", sqlStr);
  268. if (sqlite3_exec(localDb, sqlStr, 0, 0, &errMsg) != SQLITE_OK) {
  269. result = FAIL;
  270. log_info("update config error message: %s", errMsg);
  271. } else {
  272. //log_info("update connector-%d config item PowerComsumption to %f", gunIndex, energy);
  273. }
  274. sqlite3_close(localDb);
  275. }
  276. return result;
  277. }
  278. int DB_Get_PowerConsumption(uint8_t gunIndex)
  279. {
  280. uint8_t result = true;
  281. char* errMsg = NULL;
  282. char sqlStr[1024];
  283. char** rs;
  284. int rows, cols;
  285. //sprintf(sqlStr, "select * from config where IsAvailable='IsAvailable' and connector=%d;", gunIndex);
  286. sprintf(sqlStr, "select * from power_consumption where connector=%d;", gunIndex); //DS60-120 add
  287. //DEBUG_INFO("sqlStr= %s", sqlStr);
  288. if (sqlite3_open(DB_FILE, &localDb)) {
  289. result = FAIL;
  290. log_info("Can't open database: %s", sqlite3_errmsg(localDb));
  291. sqlite3_close(localDb);
  292. } else {
  293. log_info("Local config query database open successfully.");
  294. sqlite3_get_table(localDb, sqlStr, &rs, &rows, &cols, &errMsg);
  295. if (rows > 0) {
  296. for (int idxRow = 1; idxRow <= rows; idxRow++) {
  297. ShmDcCommonData->pGunInfo[gunIndex].PowerConsumption = atof(rs[(idxRow * cols) + 2]);
  298. log_info("Query connector-%d PowerConsumption: %s", gunIndex, rs[(idxRow * cols) + 2]);
  299. }
  300. } else {
  301. log_info("Query connector-%d fail, set default value to operactive.", gunIndex);
  302. result = false;
  303. }
  304. sqlite3_free_table(rs);
  305. sqlite3_close(localDb);
  306. }
  307. return result;
  308. }
  309. int DB_Reboot_Record(void)
  310. {
  311. int result = PASS;
  312. char *errMsg = NULL;
  313. char insertSql[256];
  314. sprintf(insertSql, "insert into reboot_record(rebootDatetime) values(CURRENT_TIMESTAMP);");
  315. if (sqlite3_open(DB_FILE, &localDb)) {
  316. result = FAIL;
  317. log_info( "Can't open database: %s", sqlite3_errmsg(localDb));
  318. sqlite3_close(localDb);
  319. } else {
  320. log_info( "Local charging record database open successfully.");
  321. if (sqlite3_exec(localDb, insertSql, 0, 0, &errMsg) != SQLITE_OK) {
  322. result = FAIL;
  323. log_info( "Insert reboot record error message: %s", errMsg);
  324. } else {
  325. log_info( "Insert reboot record successfully");
  326. }
  327. sprintf(insertSql, "delete from reboot_record where idx < (select idx from charging_record order by idx desc limit 1)-2000;");
  328. if (sqlite3_exec(localDb, insertSql, 0, 0, &errMsg) != SQLITE_OK) {
  329. result = FAIL;
  330. log_info( "delete reboot record error message: %s", errMsg);
  331. } else {
  332. log_info( "delete reboot record successfully");
  333. }
  334. sqlite3_close(localDb);
  335. }
  336. return result;
  337. }
  338. //------------------------------------------------------------------------------
  339. //for Module_EventLog
  340. //------------------------------------------------------------------------------
  341. int CreateEventRecord(void)
  342. {
  343. int result = PASS;
  344. char *errMsg = NULL;
  345. char *createRecordSql = "CREATE TABLE IF NOT EXISTS event_record("
  346. "idx integer primary key AUTOINCREMENT, "
  347. "occurDatetime text NOT NULL, "
  348. "statusCode text NOT NULL"
  349. ");";
  350. if (sqlite3_open(DB_FILE, &localDb)) {
  351. result = FAIL;
  352. log_error( "Can't open database: %s", sqlite3_errmsg(localDb));
  353. sqlite3_close(localDb);
  354. } else {
  355. log_info( "Local event record database open successfully.");
  356. if (sqlite3_exec(localDb, createRecordSql, 0, 0, &errMsg) != SQLITE_OK) {
  357. result = FAIL;
  358. log_error( "Create local event record table error message: %s", errMsg);
  359. } else {
  360. log_info( "Opened local event record table successfully");
  361. }
  362. sqlite3_close(localDb);
  363. }
  364. return result;
  365. }
  366. int InsertEventRecord(uint8_t *statusCode)
  367. {
  368. int result = PASS;
  369. char *errMsg = NULL;
  370. char sqlStr[1024] = {0};
  371. sprintf(sqlStr, "insert into event_record(occurDatetime, statusCode) values(CURRENT_TIMESTAMP, '%s');", statusCode);
  372. if (sqlite3_open(DB_FILE, &localDb)) {
  373. result = FAIL;
  374. log_info( "Can't open database: %s", sqlite3_errmsg(localDb));
  375. sqlite3_close(localDb);
  376. } else {
  377. //log_info( "Local event record database open successfully.");
  378. if (sqlite3_exec(localDb, sqlStr, 0, 0, &errMsg) != SQLITE_OK) {
  379. result = FAIL;
  380. log_info( "Insert local event record error message: %s", errMsg);
  381. } else {
  382. //log_info( "Insert local event record successfully");
  383. }
  384. sprintf(sqlStr, "delete from event_record where idx < (select idx from event_record order by idx desc limit 1)-2000;");
  385. if (sqlite3_exec(localDb, sqlStr, 0, 0, &errMsg) != SQLITE_OK) {
  386. result = FAIL;
  387. log_info( "delete local event_record error message: %s", errMsg);
  388. } else {
  389. //log_info( "delete local event record successfully");
  390. }
  391. sqlite3_close(localDb);
  392. }
  393. return result;
  394. }
  395. int DB_Insert_ocmf(uint8_t gun_index)
  396. {
  397. int result = PASS;
  398. char* errMsg = NULL;
  399. char insertSql[2048];
  400. SelectGunInfo *ShmSelectGunInfo = (SelectGunInfo *)GetShmSelectGunInfo();
  401. memset(insertSql, 0, sizeof(insertSql));
  402. sprintf(insertSql, "insert into ocmf_record (transactionId, status, connector) values('%d', 0, '%d');",
  403. ShmSelectGunInfo->PricesInfo[gun_index].TransactionId,
  404. gun_index);
  405. if (sqlite3_open(DB_FILE, &localDb))
  406. {
  407. result = FAIL;
  408. log_warn("Can't open database: %s\n", sqlite3_errmsg(localDb));
  409. sqlite3_close(localDb);
  410. }
  411. else
  412. {
  413. if (sqlite3_exec(localDb, insertSql, 0, 0, & errMsg) != SQLITE_OK)
  414. {
  415. result = FAIL;
  416. log_warn("Insert ocmf error message : %s\n", errMsg);
  417. }
  418. else
  419. {
  420. log_info("Insert ocmf successfully");
  421. }
  422. sqlite3_close(localDb);
  423. }
  424. return result;
  425. }
  426. void DB_Update_ocmf(uint8_t gun_index)
  427. {
  428. char* errMsg = NULL;
  429. char insertSql[4096];
  430. struct SysInfoData *pSysInfo = (struct SysInfoData *)GetShmSysInfoData();
  431. SelectGunInfo *ShmSelectGunInfo = (SelectGunInfo *)GetShmSelectGunInfo();
  432. memset(insertSql, 0, sizeof(insertSql));
  433. sprintf(insertSql, "update ocmf_record set status=0, publicKey='%s', ocmfInfo='%s' where status=0 and transactionId=%d and connector=%d;",
  434. pSysInfo->DcMeterStatusInfo[gun_index].publicKeyOcmf,
  435. pSysInfo->DcMeterTransactionAction[gun_index].transactionOCMF,
  436. ShmSelectGunInfo->PricesInfo[gun_index].TransactionId,
  437. gun_index);
  438. if (sqlite3_open(DB_FILE, &localDb))
  439. {
  440. log_warn("Can't open database: %s\n", sqlite3_errmsg(localDb));
  441. sqlite3_close(localDb);
  442. }
  443. else
  444. {
  445. if (sqlite3_exec(localDb, insertSql, 0, 0, & errMsg) != SQLITE_OK)
  446. {
  447. log_warn("Update ocmf error message : %s", errMsg);
  448. }
  449. else
  450. {
  451. log_info("Update ocmf successfully ");
  452. }
  453. sqlite3_close(localDb);
  454. }
  455. }
  456. void DB_Update_ocmf_Record(uint8_t gun_index, int _trid, bool isGet)
  457. {
  458. char* errMsg = NULL;
  459. char insertSql[4096];
  460. struct SysInfoData *pSysInfo = (struct SysInfoData *)GetShmSysInfoData();
  461. memset(insertSql, 0, sizeof(insertSql));
  462. if (isGet)
  463. {
  464. sprintf(insertSql, "update ocmf_record set status=0, publicKey='%s', ocmfInfo='%s' where status=0 and transactionId=%d and connector=%d;",
  465. pSysInfo->DcMeterStatusInfo[gun_index].publicKeyOcmf,
  466. pSysInfo->DcMeterReadTransactionRecord[gun_index].transactionOCMF,
  467. _trid,
  468. gun_index);
  469. }
  470. else
  471. {
  472. sprintf(insertSql, "update ocmf_record set status=2 where status=0 and transactionId=%d and connector=%d;",
  473. _trid,
  474. gun_index);
  475. }
  476. if (sqlite3_open(DB_FILE, &localDb))
  477. {
  478. log_warn("Can't open database: %s\n", sqlite3_errmsg(localDb));
  479. sqlite3_close(localDb);
  480. }
  481. else
  482. {
  483. if (sqlite3_exec(localDb, insertSql, 0, 0, & errMsg) != SQLITE_OK)
  484. {
  485. log_warn("Update ocmf error message : %s", errMsg);
  486. }
  487. else
  488. {
  489. log_info("Update ocmf_Record successfully ");
  490. }
  491. sqlite3_close(localDb);
  492. }
  493. }
  494. int DB_Get_OcmfTrid(uint8_t gun_index)
  495. {
  496. int result = 0;
  497. char* errMsg = NULL;
  498. char sqlStr[2048];
  499. char **rs;
  500. int rows, cols;
  501. memset(sqlStr, 0, sizeof(sqlStr));
  502. sprintf(sqlStr, "select * from ocmf_record where status=0 and connector=%d and transactionId!=0;", gun_index);
  503. if (sqlite3_open(DB_FILE, &localDb))
  504. {
  505. log_warn("Can't open database: %s\r\n", sqlite3_errmsg(localDb));
  506. sqlite3_close(localDb);
  507. }
  508. else
  509. {
  510. //log_info("Local config query database open successfully.\r\n");
  511. sqlite3_get_table(localDb, sqlStr, &rs, &rows, &cols, &errMsg);
  512. if (rows > 0)
  513. {
  514. for (int idxRow = 1; idxRow <= rows; idxRow++)
  515. {
  516. result = atoi(rs[(idxRow * cols) + 1]);
  517. break;
  518. }
  519. }
  520. sqlite3_free_table(rs);
  521. sqlite3_close(localDb);
  522. }
  523. return result;
  524. }
  525. void DB_Upload_ocmf(uint8_t gun_index, int txid)
  526. {
  527. char* errMsg = NULL;
  528. char insertSql[4096];
  529. struct SysInfoData *pSysInfo = (struct SysInfoData *)GetShmSysInfoData();
  530. SelectGunInfo *ShmSelectGunInfo = (SelectGunInfo *)GetShmSelectGunInfo();
  531. memset(insertSql, 0, sizeof(insertSql));
  532. sprintf(insertSql, "update ocmf_record set status=1 where transactionId=%d and connector=%d;",txid,gun_index);
  533. if (sqlite3_open(DB_FILE, &localDb))
  534. {
  535. log_warn("Can't open database: %s\n", sqlite3_errmsg(localDb));
  536. sqlite3_close(localDb);
  537. }
  538. else
  539. {
  540. if (sqlite3_exec(localDb, insertSql, 0, 0, & errMsg) != SQLITE_OK)
  541. {
  542. log_warn("Upload ocmf error message : %s", errMsg);
  543. }
  544. else
  545. {
  546. log_info("Upload ocmf successfully ");
  547. }
  548. sqlite3_close(localDb);
  549. }
  550. }