DataBase.c 45 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267
  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. //------------------------------------------------------------------------------
  11. #define DB_FILE "/Storage/ChargeLog/localCgargingRecord.db"
  12. #define DEDUCT_FILE "/Storage/ChargeLog/CreditCardRecord.db"
  13. #define PARKINGDEDUCT_FILE "/Storage/ChargeLog/ParkingCreditCardRecord.db"
  14. #define POWER_FILE "/Storage/ChargeLog/PowerConsumption.db"
  15. //------------------------------------------------------------------------------
  16. static sqlite3 *localDb;
  17. static sqlite3 *deductDb;
  18. static sqlite3 *parkingDb;
  19. static sqlite3* powerDb;
  20. static DcCommonInfo* ShmDcCommonData = NULL;
  21. //------------------------------------------------------------------------------
  22. //===============================================
  23. // SQLite3 related routine
  24. //===============================================
  25. int DB_Open(void)
  26. {
  27. int result = PASS;
  28. char *errMsg = NULL;
  29. char *createRecordSql = "CREATE TABLE IF NOT EXISTS charging_record("
  30. "idx integer primary key AUTOINCREMENT, "
  31. "reservationId text, "
  32. "transactionId text, "
  33. "startMethod text, "
  34. "userId text, "
  35. "dateTimeStart text, "
  36. "dateTimeStop text,"
  37. "socStart text, "
  38. "socStop text, "
  39. "chargeEnergy text, "
  40. "stopReason text"
  41. ");";
  42. /*char *createCfgSql = "CREATE TABLE IF NOT EXISTS `config` ( "
  43. "`idx` INTEGER PRIMARY KEY AUTOINCREMENT, "
  44. "`IsAvailable` TEXT NOT NULL, "
  45. "`connector` INTEGER NOT NULL, "
  46. "`val` TEXT NOT NULL, unique(IsAvailable,connector) on conflict replace);";
  47. */
  48. //DS60-120 add
  49. char *createCfgSql = "CREATE TABLE IF NOT EXISTS `config` ( "
  50. "`idx` INTEGER PRIMARY KEY AUTOINCREMENT, "
  51. "`item` TEXT NOT NULL, "
  52. "`connector` INTEGER NOT NULL, "
  53. "`val` TEXT NOT NULL, unique(item,connector) on conflict replace);";
  54. char *createrecordSql = "CREATE TABLE IF NOT EXISTS `event_record` ( "
  55. "`idx` INTEGER PRIMARY KEY AUTOINCREMENT, "
  56. "`occurDatetime` TEXT NOT NULL, "
  57. "`statusCode` TEXT NOT NULL, unique(occurDatetime,statusCode) on conflict replace);";
  58. char *createrebootSql = "CREATE TABLE IF NOT EXISTS `reboot_record` ( "
  59. "`idx` INTEGER PRIMARY KEY AUTOINCREMENT, "
  60. "`rebootDatetime` TEXT NOT NULL, unique(rebootDatetime) on conflict replace);";
  61. if (sqlite3_open(DB_FILE, &localDb)) {
  62. result = FAIL;
  63. log_info( "Can't open database: %s", sqlite3_errmsg(localDb));
  64. sqlite3_close(localDb);
  65. } else {
  66. //log_info( "Local charging record database open successfully.");
  67. if (sqlite3_exec(localDb, createRecordSql, 0, 0, &errMsg) != SQLITE_OK) {
  68. result = FAIL;
  69. log_info( "Create local charging record table error message: %s", errMsg);
  70. } else {
  71. log_info( "Opened local charging record table successfully");
  72. }
  73. if (sqlite3_exec(localDb, createCfgSql, 0, 0, &errMsg) != SQLITE_OK) {
  74. result = FAIL;
  75. log_info( "Create local config table error message: %s", errMsg);
  76. } else {
  77. log_info( "Opened local config table successfully");
  78. }
  79. //DS60-120
  80. if (sqlite3_exec(localDb, createrecordSql, 0, 0, &errMsg) != SQLITE_OK) {
  81. result = FAIL;
  82. log_info( "Create local record table error message: %s", errMsg);
  83. } else {
  84. log_info( "Opened local record table successfully");
  85. }
  86. if (sqlite3_exec(localDb, createrebootSql, 0, 0, &errMsg) != SQLITE_OK) {
  87. result = FAIL;
  88. log_info( "Create reboot record table error message: %s", errMsg);
  89. } else {
  90. log_info( "Opened reboot record table successfully");
  91. }
  92. //-----
  93. sqlite3_close(localDb);
  94. }
  95. ShmDcCommonData = (DcCommonInfo*)GetShmDcCommonData();
  96. return result;
  97. }
  98. int DB_Insert_Record(int gunIndex)
  99. {
  100. int result = PASS;
  101. char *errMsg = NULL;
  102. char insertSql[1024];
  103. struct ChargingInfoData *pDcChargingInfo = (struct ChargingInfoData *)GetDcChargingInfoData(gunIndex);
  104. struct OCPP16Data *ShmOCPP16Data = (struct OCPP16Data *)GetShmOCPP16Data();
  105. sprintf(insertSql, "insert into charging_record(reservationId, transactionId, startMethod, userId, dateTimeStart, dateTimeStop, socStart, socStop, chargeEnergy, stopReason) "
  106. "values('%d', '%d', '%d', '%s', '%s', '%s', '%d', '%d', '%f', '%s');",
  107. pDcChargingInfo->ReservationId, //DS60-120 add
  108. ShmOCPP16Data->StartTransaction[gunIndex].ResponseTransactionId,
  109. pDcChargingInfo->StartMethod,
  110. pDcChargingInfo->StartUserId,
  111. pDcChargingInfo->StartDateTime,
  112. pDcChargingInfo->StopDateTime,
  113. pDcChargingInfo->EvBatteryStartSoc,
  114. pDcChargingInfo->EvBatterySoc,
  115. pDcChargingInfo->PresentChargedEnergy,
  116. ShmOCPP16Data->StopTransaction[gunIndex].StopReason);
  117. //if (sqlite3_open("/Storage/ChargeLog/localCgargingRecord.db", &db)) {
  118. if (sqlite3_open(DB_FILE, &localDb)) { //DS60-120 add
  119. result = FAIL;
  120. log_info( "Can't open database: %s", sqlite3_errmsg(localDb));
  121. sqlite3_close(localDb);
  122. } else {
  123. //log_info( "Local charging record database open successfully.");
  124. if (sqlite3_exec(localDb, insertSql, 0, 0, &errMsg) != SQLITE_OK) {
  125. result = FAIL;
  126. log_info( "Insert local charging record error message: %s", errMsg);
  127. } else {
  128. //log_info( "Insert local charging record successfully");
  129. }
  130. //DS60-120 add
  131. sprintf(insertSql, "delete from charging_record where idx < (select idx from charging_record order by idx desc limit 1)-2000;");
  132. if (sqlite3_exec(localDb, insertSql, 0, 0, &errMsg) != SQLITE_OK) {
  133. result = FAIL;
  134. log_info( "delete local charging error message: %s", errMsg);
  135. } else {
  136. //log_info( "delete local charging record successfully");
  137. }
  138. sqlite3_close(localDb);
  139. }
  140. return result;
  141. }
  142. int DB_Update_Operactive(uint8_t gunIndex, uint8_t IsAvailable)
  143. {
  144. uint8_t result = false;
  145. char *errMsg = NULL;
  146. char sqlStr[1024];
  147. srand(time(NULL));
  148. if (sqlite3_open(DB_FILE, &localDb)) {
  149. result = FAIL;
  150. log_info( "Can't open database: %s", sqlite3_errmsg(localDb));
  151. sqlite3_close(localDb);
  152. } else {
  153. //log_info( "Local charging record database open successfully (%d).", IsAvailable);
  154. //sprintf(sqlStr, "insert or replace into config (IsAvailable, connector, val) values('IsAvailable', %d, %d);", gunIndex, IsAvailable);
  155. sprintf(sqlStr,
  156. "insert or replace into config (item, connector, val) values('IsAvailable', %d, %d);",
  157. gunIndex,
  158. IsAvailable); //DS60-120 add
  159. //log_info("sqlStr= %s", sqlStr);
  160. if (sqlite3_exec(localDb, sqlStr, 0, 0, &errMsg) != SQLITE_OK) {
  161. result = FAIL;
  162. log_info( "update config error message: %s", errMsg);
  163. } else {
  164. log_info("update connector-%d config item isOperactive to %d", gunIndex, IsAvailable);
  165. }
  166. sqlite3_close(localDb);
  167. }
  168. return result;
  169. }
  170. int DB_Get_Operactive(uint8_t gunIndex)
  171. {
  172. uint8_t result = true;
  173. char *errMsg = NULL;
  174. char sqlStr[1024];
  175. char **rs;
  176. int rows, cols;
  177. //sprintf(sqlStr, "select * from config where IsAvailable='IsAvailable' and connector=%d;", gunIndex);
  178. sprintf(sqlStr, "select * from config where item='IsAvailable' and connector=%d;", gunIndex); //DS60-120 add
  179. //DEBUG_INFO("sqlStr= %s", sqlStr);
  180. if (sqlite3_open(DB_FILE, &localDb)) {
  181. result = FAIL;
  182. log_info( "Can't open database: %s", sqlite3_errmsg(localDb));
  183. sqlite3_close(localDb);
  184. } else {
  185. log_info( "Local config query database open successfully.");
  186. sqlite3_get_table(localDb, sqlStr, &rs, &rows, &cols, &errMsg);
  187. if (rows > 0) {
  188. for (int idxRow = 1; idxRow <= rows; idxRow++) {
  189. if (strcmp(rs[(idxRow * cols) + 3], "0") == 0) {
  190. result = false;
  191. }
  192. log_info("Query connector-%d isOperactive: %s", gunIndex, rs[(idxRow * cols) + 3]);
  193. }
  194. } else {
  195. log_info("Query connector-%d fail, set default value to operactive.", gunIndex);
  196. }
  197. sqlite3_free_table(rs);
  198. sqlite3_close(localDb);
  199. }
  200. return result;
  201. }
  202. int DB_Reboot_Record(void)
  203. {
  204. int result = PASS;
  205. char *errMsg = NULL;
  206. char insertSql[256];
  207. sprintf(insertSql, "insert into reboot_record(rebootDatetime) values(CURRENT_TIMESTAMP);");
  208. if (sqlite3_open(DB_FILE, &localDb)) {
  209. result = FAIL;
  210. log_info( "Can't open database: %s", sqlite3_errmsg(localDb));
  211. sqlite3_close(localDb);
  212. } else {
  213. //log_info( "Local charging record database open successfully.");
  214. if (sqlite3_exec(localDb, insertSql, 0, 0, &errMsg) != SQLITE_OK) {
  215. result = FAIL;
  216. log_info( "Insert reboot record error message: %s", errMsg);
  217. } else {
  218. log_info( "Insert reboot record successfully");
  219. }
  220. sprintf(insertSql, "delete from reboot_record where idx < (select idx from charging_record order by idx desc limit 1)-2000;");
  221. if (sqlite3_exec(localDb, insertSql, 0, 0, &errMsg) != SQLITE_OK) {
  222. result = FAIL;
  223. log_info( "delete reboot record error message: %s", errMsg);
  224. } else {
  225. log_info( "delete reboot record successfully");
  226. }
  227. sqlite3_close(localDb);
  228. }
  229. return result;
  230. }
  231. //------------------------------------------------------------------------------
  232. //for Module_EventLog
  233. //------------------------------------------------------------------------------
  234. int CreateEventRecord(void)
  235. {
  236. int result = PASS;
  237. char *errMsg = NULL;
  238. char *createRecordSql = "CREATE TABLE IF NOT EXISTS event_record("
  239. "idx integer primary key AUTOINCREMENT, "
  240. "occurDatetime text NOT NULL, "
  241. "statusCode text NOT NULL"
  242. ");";
  243. if (sqlite3_open(DB_FILE, &localDb)) {
  244. result = FAIL;
  245. log_error( "Can't open database: %s", sqlite3_errmsg(localDb));
  246. sqlite3_close(localDb);
  247. } else {
  248. log_info( "Local event record database open successfully.");
  249. if (sqlite3_exec(localDb, createRecordSql, 0, 0, &errMsg) != SQLITE_OK) {
  250. result = FAIL;
  251. log_error( "Create local event record table error message: %s", errMsg);
  252. } else {
  253. log_info( "Opened local event record table successfully");
  254. }
  255. sqlite3_close(localDb);
  256. }
  257. return result;
  258. }
  259. int InsertEventRecord(uint8_t *statusCode)
  260. {
  261. int result = PASS;
  262. char *errMsg = NULL;
  263. char sqlStr[1024] = {0};
  264. sprintf(sqlStr, "insert into event_record(occurDatetime, statusCode) values(CURRENT_TIMESTAMP, '%s');", statusCode);
  265. if (sqlite3_open(DB_FILE, &localDb)) {
  266. result = FAIL;
  267. log_info( "Can't open database: %s", sqlite3_errmsg(localDb));
  268. sqlite3_close(localDb);
  269. } else {
  270. //log_info( "Local event record database open successfully.");
  271. if (sqlite3_exec(localDb, sqlStr, 0, 0, &errMsg) != SQLITE_OK) {
  272. result = FAIL;
  273. log_info( "Insert local event record error message: %s", errMsg);
  274. } else {
  275. //log_info( "Insert local event record successfully");
  276. }
  277. sprintf(sqlStr, "delete from event_record where idx < (select idx from event_record order by idx desc limit 1)-2000;");
  278. if (sqlite3_exec(localDb, sqlStr, 0, 0, &errMsg) != SQLITE_OK) {
  279. result = FAIL;
  280. log_info( "delete local event_record error message: %s", errMsg);
  281. } else {
  282. //log_info( "delete local event record successfully");
  283. }
  284. sqlite3_close(localDb);
  285. }
  286. return result;
  287. }
  288. void CreditCardTimeSet(char *_time, RecordTransactionInfo* deductInfo)
  289. {
  290. _time[0] = '2';
  291. _time[1] = '0';
  292. _time[2] = (char)deductInfo->pCreditCard.TransDate[0];
  293. _time[3] = (char)deductInfo->pCreditCard.TransDate[1];
  294. _time[4] = '-';
  295. _time[5] = (char)deductInfo->pCreditCard.TransDate[2];
  296. _time[6] = (char)deductInfo->pCreditCard.TransDate[3];
  297. _time[7] = '-';
  298. _time[8] = (char)deductInfo->pCreditCard.TransDate[4];
  299. _time[9] = (char)deductInfo->pCreditCard.TransDate[5];
  300. _time[10] = ' ';
  301. _time[11] = (char)deductInfo->pCreditCard.TransTime[0];
  302. _time[12] = (char)deductInfo->pCreditCard.TransTime[1];
  303. _time[13] = ':';
  304. _time[14] = (char)deductInfo->pCreditCard.TransTime[2];
  305. _time[15] = (char)deductInfo->pCreditCard.TransTime[3];
  306. _time[16] = ':';
  307. _time[17] = (char)deductInfo->pCreditCard.TransTime[4];
  308. _time[18] = (char)deductInfo->pCreditCard.TransTime[5];
  309. _time[19] = '\0';
  310. }
  311. int DeductDB_Open(void)
  312. {
  313. int result = PASS;
  314. char* errMsg = NULL;
  315. char* createDeductInfoSql="CREATE TABLE IF NOT EXISTS report_credit_deduct("
  316. "idx integer primary key AUTOINCREMENT, "
  317. "gun_index text, "
  318. "reportDate text, "
  319. "vemData text, "
  320. "txId text, "
  321. "creditNo text, "
  322. "amount text, "
  323. "storeId text, "
  324. "approvalNo text, "
  325. "RRN text, "
  326. "ROC text, "
  327. "isDonateInvoice text, "
  328. "isDeductResult text, "
  329. "isIntoCharge text, "
  330. "isUpload text, "
  331. "lineSn text, "
  332. "Energy text, "
  333. "RedeductTime "
  334. ");";
  335. if(sqlite3_open(DEDUCT_FILE, &deductDb))
  336. {
  337. result = FAIL;
  338. log_info("Can't open deduct database: %s", sqlite3_errmsg(deductDb));
  339. sqlite3_close(deductDb);
  340. }
  341. else
  342. {
  343. //log_info("Deduct database open successfully.");
  344. if (sqlite3_exec(deductDb, createDeductInfoSql, 0, 0, &errMsg) != SQLITE_OK)
  345. {
  346. result = FAIL;
  347. log_info("Create deduct info table error message: %s", errMsg);
  348. }
  349. else
  350. {
  351. log_info("Opened deduct info table successfully");
  352. }
  353. sqlite3_close(deductDb);
  354. }
  355. return result;
  356. }
  357. int InsertDeductInfo(int gunIndex, RecordTransactionInfo *deductInfo)
  358. {
  359. int result = PASS;
  360. char *errMsg = NULL;
  361. char sqlStr[1024] = {0};
  362. char approNo[13];
  363. char carNo[21];
  364. char vemData[65];
  365. char storeId[18];
  366. char RRN[12];
  367. char ROC[12];
  368. char lineSn[20];
  369. char _time[20];
  370. memset(approNo, '\0', sizeof(approNo));
  371. memset(carNo, '\0', sizeof(carNo));
  372. memset(vemData, '\0', sizeof(vemData));
  373. memset(storeId, '\0', sizeof(storeId));
  374. memset(RRN, '\0', sizeof(RRN));
  375. memset(ROC, '\0', sizeof(ROC));
  376. memset(lineSn, '\0', sizeof(lineSn));
  377. strncpy(approNo, (char *)&deductInfo->pCreditCard.ApprovalNo,9);
  378. strncpy(carNo, (char *)&deductInfo->pCreditCard.CardNo,20);
  379. strncpy(vemData, (char *)&deductInfo->pCreditCard.VemData,64);
  380. strncpy(storeId, (char *)&deductInfo->pCreditCard.StoreId,18 );
  381. strncpy(RRN,(char *)&deductInfo->pCreditCard.RRN,12);
  382. strncpy(ROC,(char *)&deductInfo->pCreditCard.ROC,12);
  383. CreditCardTimeSet(&_time[0], deductInfo);
  384. //sprintf(reportDate, "%s%s", deductInfo->pCreditCard.TransDate, deductInfo->pCreditCard.TransTime);
  385. sprintf(sqlStr, "insert into report_credit_deduct(gun_index, reportDate, vemData, txId, creditNo, amount, storeId, approvalNo, RRN, ROC, isDonateInvoice, isDeductResult, isIntoCharge, isUpload, lineSn, Energy, RedeductTime) "
  386. "values('%d', '%s', '%s', '%d', '%s', '%.1f', '%s', '%s', '%s', '%s', '%d', '%d', '%d' , '%d', '%d', '%.4f', '%d');",
  387. gunIndex,
  388. _time,
  389. vemData,
  390. deductInfo->TransactionId,
  391. carNo,
  392. deductInfo->Amount,
  393. storeId,
  394. approNo,
  395. RRN,
  396. ROC,
  397. (int)deductInfo->IsDonateInvoice,
  398. (int)deductInfo->DeductResult,
  399. (int)deductInfo->isIntoCharge,
  400. (int)deductInfo->IsUpload,
  401. deductInfo->LineStatus,
  402. deductInfo->Energy,
  403. deductInfo->RedeductTime);
  404. //log_info("%s",sqlStr);
  405. if (sqlite3_open(DEDUCT_FILE, &deductDb))
  406. {
  407. result = FAIL;
  408. log_info( "Can't open deduct database: %s", sqlite3_errmsg(deductDb));
  409. sqlite3_close(deductDb);
  410. }
  411. else
  412. {
  413. //log_info( "Local event record database open successfully.");
  414. if (sqlite3_exec(deductDb, sqlStr, 0, 0, &errMsg) != SQLITE_OK)
  415. {
  416. result = FAIL;
  417. log_info( "Insert deduct record error message: %s", errMsg);
  418. }
  419. else
  420. {
  421. //log_info( "Insert local event record successfully");
  422. }
  423. sprintf(sqlStr, "delete from report_credit_deduct where idx < (select idx from report_credit_deduct order by idx desc limit 1)-10000;");
  424. if (sqlite3_exec(deductDb, sqlStr, 0, 0, &errMsg) != SQLITE_OK)
  425. {
  426. result = FAIL;
  427. log_info("delete deduct record error message: %s", errMsg);
  428. }
  429. else
  430. {
  431. //log_info("delete local charging record successfully");
  432. }
  433. sqlite3_close(deductDb);
  434. }
  435. return result;
  436. }
  437. int UpdateDeductInfoStatus(int gunIndex, RecordTransactionInfo *deductInfo)
  438. {
  439. int result = PASS;
  440. char *errMsg = NULL;
  441. char sqlStr[1024] = {0};
  442. char ApprovalNo[10] = {0};
  443. memset(ApprovalNo, '\0', 10);
  444. strncpy(ApprovalNo, (char*)&deductInfo->pCreditCard.ApprovalNo,9);
  445. sprintf(sqlStr, "update report_credit_deduct set isUpload = %d , isIntoCharge = %d, amount = %.1f, txId = %d, isDeductResult = %d, Energy = %.4f, lineSn = %d, RedeductTime = %d where approvalNo = '%s'; ",
  446. (int)deductInfo->IsUpload,
  447. (int)deductInfo->isIntoCharge,
  448. deductInfo->Amount,
  449. deductInfo->TransactionId,
  450. (int)deductInfo->DeductResult,
  451. deductInfo->Energy,
  452. deductInfo->LineStatus,
  453. deductInfo->RedeductTime,
  454. ApprovalNo);
  455. //log_info("%s",sqlStr);
  456. if (sqlite3_open(DEDUCT_FILE, &deductDb))
  457. {
  458. result = FAIL;
  459. log_info( "Can't open deduct database: %s", sqlite3_errmsg(deductDb));
  460. sqlite3_close(deductDb);
  461. }
  462. else
  463. {
  464. //log_info( "Local event record database open successfully.");
  465. if (sqlite3_exec(deductDb, sqlStr, 0, 0, &errMsg) != SQLITE_OK)
  466. {
  467. result = FAIL;
  468. log_info( "update deduct record error message: %s!", errMsg);
  469. }
  470. else
  471. {
  472. //log_info( "update deduct record successfully");
  473. }
  474. sqlite3_close(deductDb);
  475. }
  476. return result;
  477. }
  478. int UpdateRedeuctBill(int Txid,float amount)
  479. {
  480. int result = PASS;
  481. char* errMsg = NULL;
  482. char sqlStr[1024] = { 0 };
  483. sprintf(sqlStr, "update report_credit_deduct set amount = %.1f where txId = '%d'; ",
  484. amount,
  485. Txid);
  486. //log_info("%s",sqlStr);
  487. if (sqlite3_open(DEDUCT_FILE, &deductDb))
  488. {
  489. result = FAIL;
  490. log_info("Can't open deduct database: %s", sqlite3_errmsg(deductDb));
  491. sqlite3_close(deductDb);
  492. } else
  493. {
  494. //log_info( "Local event record database open successfully.");
  495. if (sqlite3_exec(deductDb, sqlStr, 0, 0, &errMsg) != SQLITE_OK)
  496. {
  497. result = FAIL;
  498. log_info("update deduct record error message: %s!", errMsg);
  499. } else
  500. {
  501. //log_info( "update deduct record successfully");
  502. }
  503. sqlite3_close(deductDb);
  504. }
  505. return result;
  506. }
  507. int DB_GetDeductInfo(int deductResult, int uploadState, int *gunIndex, RecordTransactionInfo *deductInfo)
  508. {
  509. int result = PASS;
  510. char *errMsg = NULL;
  511. char sqlStr[1024];
  512. char **rs;
  513. int rows, cols;
  514. if(deductResult >= 0 && uploadState >= 0)
  515. {
  516. sprintf(sqlStr, "select * from report_credit_deduct where isDeductResult = %d and isUpload = %d;", deductResult > 0 ? 1 : 0, uploadState > 0 ? 1 : 0);
  517. }
  518. else if(deductResult >= 0 && uploadState < 0)
  519. {
  520. sprintf(sqlStr, "select * from report_credit_deduct where isDeductResult = 0 OR isDeductResult = 3;");
  521. }
  522. else if(deductResult < 0 && uploadState >= 0)
  523. {
  524. sprintf(sqlStr, "select * from report_credit_deduct where isUpload = %d;", uploadState > 0 ? 1 : 0);
  525. }
  526. else
  527. {
  528. sprintf(sqlStr, "select * from report_credit_deduct;");
  529. }
  530. if (sqlite3_open(DEDUCT_FILE, &deductDb))
  531. {
  532. result = FAIL;
  533. log_info("Can't open deduct database: %s", sqlite3_errmsg(deductDb));
  534. sqlite3_close(deductDb);
  535. }
  536. else
  537. {
  538. sqlite3_get_table(deductDb, sqlStr, &rs, &rows, &cols, &errMsg);
  539. if (rows > 0)
  540. {
  541. for (int idxRow = 1; idxRow <= rows; idxRow++)
  542. {
  543. *gunIndex = atoi(rs[(idxRow * cols) + 1]);
  544. deductInfo->TransactionId = atoi(rs[(idxRow * cols) + 2]);
  545. deductInfo->DeductResult = atoi(rs[(idxRow * cols) + 3]);
  546. deductInfo->IsDonateInvoice = atoi(rs[(idxRow * cols) + 4]);
  547. strcpy((char *)&deductInfo->pCreditCard.ApprovalNo, rs[(idxRow * cols) + 5]);
  548. strcpy((char *)&deductInfo->pCreditCard.CardNo, rs[(idxRow * cols) + 6]);
  549. strcpy((char *)&deductInfo->pCreditCard.VemData, rs[(idxRow * cols) + 7]);
  550. deductInfo->Amount = atoi(rs[(idxRow * cols) + 8]);
  551. deductInfo->IsUpload = atoi(rs[(idxRow * cols) + 9]);
  552. break;
  553. }
  554. }
  555. else
  556. {
  557. result = FAIL;
  558. }
  559. sqlite3_free_table(rs);
  560. sqlite3_close(deductDb);
  561. }
  562. return result;
  563. }
  564. int DB_GetReDeductInfo(int *gunIndex, RecordTransactionInfo *deductInfo)
  565. {
  566. int result = PASS;
  567. if(DB_GetDeductInfo(0, -1, gunIndex, deductInfo) == PASS)
  568. {
  569. //log_info("GetReDeductInfo OK");
  570. }
  571. else
  572. {
  573. result = FAIL;
  574. //log_info("GetReDeductInfo NG");
  575. }
  576. return result;
  577. }
  578. int DB_GetReUploadDeduct(int *gunIndex, RecordTransactionInfo *deductInfo)
  579. {
  580. int result = PASS;
  581. if(DB_GetDeductInfo(-1, 0, gunIndex, deductInfo) == PASS)
  582. {
  583. //log_info("GetReUploadDeduct OK");
  584. }
  585. else
  586. {
  587. result = FAIL;
  588. //log_info("GetReUploadDeduct NG");
  589. }
  590. return result;
  591. }
  592. void GetDeductTime(char* _time,RecordTransactionInfo* deductInfo)
  593. {
  594. deductInfo->pCreditCard.TransDate[0] = (unsigned char)_time[2];
  595. deductInfo->pCreditCard.TransDate[1] = (unsigned char)_time[3];
  596. deductInfo->pCreditCard.TransDate[2] = (unsigned char)_time[5];
  597. deductInfo->pCreditCard.TransDate[3] = (unsigned char)_time[6];
  598. deductInfo->pCreditCard.TransDate[4] = (unsigned char)_time[8];
  599. deductInfo->pCreditCard.TransDate[5] = (unsigned char)_time[9];
  600. deductInfo->pCreditCard.TransTime[0] = (unsigned char)_time[11];
  601. deductInfo->pCreditCard.TransTime[1] = (unsigned char)_time[12];
  602. deductInfo->pCreditCard.TransTime[2] = (unsigned char)_time[14];
  603. deductInfo->pCreditCard.TransTime[3] = (unsigned char)_time[15];
  604. deductInfo->pCreditCard.TransTime[4] = (unsigned char)_time[17];
  605. deductInfo->pCreditCard.TransTime[5] = (unsigned char)_time[18];
  606. }
  607. // return quantity of DeductInfo
  608. int DB_GetMultiDeductInfo(int deductResult, int uploadState, int *gunIndex, RecordTransactionInfo *deductInfo)
  609. {
  610. char *errMsg = NULL;
  611. char sqlStr[1024];
  612. char **rs;
  613. int rows = 0, cols = 0;
  614. if(deductResult >= 0 && uploadState >= 0)
  615. {
  616. sprintf(sqlStr, "select * from report_credit_deduct where isDeductResult = %d and isUpload = %d;", deductResult > 0 ? 1 : 0, uploadState > 0 ? 1 : 0);
  617. }
  618. else if(deductResult >= 0 && uploadState < 0)
  619. {
  620. sprintf(sqlStr, "select * from report_credit_deduct where isDeductResult IN (0,3) AND RedeductTime < 10;");
  621. }
  622. else if(deductResult < 0 && uploadState >= 0)
  623. {
  624. sprintf(sqlStr, "select * from report_credit_deduct where isUpload = %d;", uploadState > 0 ? 1 : 0);
  625. }
  626. else
  627. {
  628. sprintf(sqlStr, "select * from report_credit_deduct;");
  629. }
  630. if (sqlite3_open(DEDUCT_FILE, &deductDb))
  631. {
  632. log_info("Can't open deduct database: %s", sqlite3_errmsg(deductDb));
  633. sqlite3_close(deductDb);
  634. }
  635. else
  636. {
  637. sqlite3_get_table(deductDb, sqlStr, &rs, &rows, &cols, &errMsg);
  638. if (rows > 0)
  639. {
  640. for (int idxRow = 1; idxRow <= rows; idxRow++)
  641. {
  642. //gunIndex[idxRow - 1] = atoi(rs[(idxRow * cols) + 1]);
  643. deductInfo[idxRow - 1].ConnectorID = atoi(rs[(idxRow * cols) + 1]);
  644. // GetDeductTime(rs[(idxRow * cols) + 1], deductInfo);
  645. memcpy((char*)&deductInfo[idxRow - 1].pCreditCard.VemData, rs[(idxRow * cols) + 3],64);
  646. deductInfo[idxRow - 1].TransactionId = atoi(rs[(idxRow * cols) + 4]);
  647. memcpy((char*)&deductInfo[idxRow - 1].pCreditCard.CardNo, rs[(idxRow * cols) + 5],20);
  648. deductInfo[idxRow - 1].Amount = atoi(rs[(idxRow * cols) + 6]);
  649. memcpy((char*)&deductInfo[idxRow - 1].pCreditCard.StoreId, rs[(idxRow * cols) + 7],18);
  650. memcpy((char*)&deductInfo[idxRow - 1].pCreditCard.ApprovalNo, rs[(idxRow * cols) + 8],9);
  651. memcpy((char*)&deductInfo[idxRow - 1].pCreditCard.RRN, rs[(idxRow * cols) + 9],12);
  652. memcpy((char*)&deductInfo[idxRow - 1].pCreditCard.ROC, rs[(idxRow * cols) + 10],12);
  653. deductInfo[idxRow - 1].IsDonateInvoice = atoi(rs[(idxRow * cols) + 11]);
  654. deductInfo[idxRow - 1].DeductResult = atoi(rs[(idxRow * cols) + 12]);
  655. deductInfo[idxRow - 1].isIntoCharge = atoi(rs[(idxRow * cols) + 13]);
  656. deductInfo[idxRow - 1].IsUpload = atoi(rs[(idxRow * cols) + 14]);
  657. deductInfo[idxRow - 1].LineStatus = atoi(rs[(idxRow * cols) + 15]);
  658. deductInfo[idxRow - 1].Energy = atof(rs[(idxRow * cols) + 16]);
  659. deductInfo[idxRow - 1].RedeductTime = atoi(rs[(idxRow * cols) + 17]);
  660. if(idxRow >= 128)
  661. {
  662. rows = 128;
  663. break;
  664. }
  665. }
  666. }
  667. sqlite3_free_table(rs);
  668. sqlite3_close(deductDb);
  669. }
  670. return rows;
  671. }
  672. int DB_GetMultiReDeductInfo(int *gunIndex, RecordTransactionInfo *deductInfo)
  673. {
  674. int quantity = 0;
  675. quantity = DB_GetMultiDeductInfo(0, -1, gunIndex, deductInfo);
  676. return quantity;
  677. }
  678. int DB_GetMultiReUploadDeduct(int *gunIndex, RecordTransactionInfo *deductInfo)
  679. {
  680. int quantity = 0;
  681. quantity = DB_GetMultiDeductInfo(-1, 0, gunIndex, deductInfo);
  682. return quantity;
  683. }
  684. void ReDeductTest()
  685. {
  686. int quantity = 0;
  687. int gunList[128];
  688. RecordTransactionInfo deductInfo[128];
  689. quantity = DB_GetMultiReDeductInfo(gunList, deductInfo);
  690. if(quantity > 0)
  691. {
  692. for(int i = 0; i < quantity; i++)
  693. {
  694. printf("Gun %d Rededuct CardNo: %s", gunList[i], deductInfo[i].pCreditCard.VemData);
  695. }
  696. }
  697. }
  698. int PowerDB_Open(void)
  699. {
  700. int result = PASS;
  701. char* errMsg = NULL;
  702. char* createPowerConsumption = "CREATE TABLE IF NOT EXISTS power_consumption( "
  703. "idx INTEGER PRIMARY KEY AUTOINCREMENT, "
  704. "connector TEXT, "
  705. "val TEXT);";
  706. if (sqlite3_open(POWER_FILE, &powerDb))
  707. {
  708. result = FAIL;
  709. log_info("Can't open deduct database: %s", sqlite3_errmsg(powerDb));
  710. sqlite3_close(powerDb);
  711. } else
  712. {
  713. if (sqlite3_exec(powerDb, createPowerConsumption, 0, 0, &errMsg) != SQLITE_OK) {
  714. result = FAIL;
  715. log_info("Create power consumption record table error message: %s", errMsg);
  716. } else {
  717. log_info("Opened power consumption record table successfully");
  718. }
  719. sqlite3_close(powerDb);
  720. }
  721. return result;
  722. }
  723. int DB_Insert_PowerConsumption(uint8_t gunIndex, float energy)
  724. {
  725. uint8_t result = false;
  726. char* errMsg = NULL;
  727. char sqlStr[1024];
  728. srand(time(NULL));
  729. if (sqlite3_open(POWER_FILE, &powerDb)) {
  730. result = FAIL;
  731. log_info("Can't open database: %s", sqlite3_errmsg(powerDb));
  732. sqlite3_close(powerDb);
  733. } else {
  734. //log_info("Local charging record database open successfully (%f).", energy);
  735. sprintf(sqlStr, "insert into power_consumption (connector, val) values (%d, %f);",
  736. gunIndex,
  737. energy); //DS60-120 add
  738. //log_info("sqlStr= %s", sqlStr);
  739. if (sqlite3_exec(powerDb, sqlStr, 0, 0, &errMsg) != SQLITE_OK) {
  740. result = FAIL;
  741. log_info("Insert power consumption error message: %s", errMsg);
  742. } else {
  743. log_info("Insert connector-%d config item PowerComsumption to %f", gunIndex, energy);
  744. }
  745. sqlite3_close(powerDb);
  746. }
  747. return result;
  748. }
  749. int DB_Update_PowerConsumption(uint8_t gunIndex, float energy)
  750. {
  751. uint8_t result = false;
  752. char* errMsg = NULL;
  753. char sqlStr[1024];
  754. srand(time(NULL));
  755. if (sqlite3_open(POWER_FILE, &powerDb)) {
  756. result = FAIL;
  757. log_info("Can't open database: %s", sqlite3_errmsg(powerDb));
  758. sqlite3_close(powerDb);
  759. } else {
  760. //log_info("Local charging record database open successfully.");
  761. sprintf(sqlStr, "update power_consumption set val = %f where connector = %d; ",
  762. energy,
  763. gunIndex); //DS60-120 add
  764. //log_info("sqlStr= %s", sqlStr);
  765. if (sqlite3_exec(powerDb, sqlStr, 0, 0, &errMsg) != SQLITE_OK) {
  766. result = FAIL;
  767. log_info("update config error message: %s", errMsg);
  768. } else {
  769. //log_info("update connector-%d config item PowerComsumption to %f", gunIndex, energy);
  770. }
  771. sqlite3_close(powerDb);
  772. }
  773. return result;
  774. }
  775. int DB_Get_PowerConsumption(uint8_t gunIndex)
  776. {
  777. uint8_t result = true;
  778. char* errMsg = NULL;
  779. char sqlStr[1024];
  780. char** rs;
  781. int rows, cols;
  782. //sprintf(sqlStr, "select * from config where IsAvailable='IsAvailable' and connector=%d;", gunIndex);
  783. sprintf(sqlStr, "select * from power_consumption where connector=%d;", gunIndex); //DS60-120 add
  784. //DEBUG_INFO("sqlStr= %s", sqlStr);
  785. if (sqlite3_open(POWER_FILE, &powerDb)) {
  786. result = FAIL;
  787. log_info("Can't open database: %s", sqlite3_errmsg(powerDb));
  788. sqlite3_close(powerDb);
  789. } else {
  790. //log_info("Local config query database open successfully.");
  791. sqlite3_get_table(powerDb, sqlStr, &rs, &rows, &cols, &errMsg);
  792. if (rows > 0) {
  793. for (int idxRow = 1; idxRow <= rows; idxRow++) {
  794. ShmDcCommonData->pGunInfo[gunIndex].PowerConsumption = atof(rs[(idxRow * cols) + 2]);
  795. log_info("Query connector-%d PowerConsumption: %s", gunIndex, rs[(idxRow * cols) + 2]);
  796. }
  797. } else {
  798. log_info("Query connector-%d fail, set default value to operactive.", gunIndex);
  799. result = false;
  800. }
  801. sqlite3_free_table(rs);
  802. sqlite3_close(powerDb);
  803. }
  804. return result;
  805. }
  806. int ParkingDB_Open(void)
  807. {
  808. int result = PASS;
  809. char* errMsg = NULL;
  810. char* createDeductInfoSql="CREATE TABLE IF NOT EXISTS report_Parking_deduct("
  811. "idx integer primary key AUTOINCREMENT, "
  812. "gun_index text, "
  813. "vemData text, "
  814. "OccupancySN text, "
  815. "duration text, "
  816. "creditNo text, "
  817. "amount text, "
  818. "storeId text, "
  819. "approvalNo text, "
  820. "RRN text, "
  821. "ROC text, "
  822. "isDonateInvoice text, "
  823. "isDeductResult text, "
  824. "isUpload text, "
  825. "lineSn text, "
  826. "StartTime text, "
  827. "RedeductTime "
  828. ");";
  829. if(sqlite3_open(PARKINGDEDUCT_FILE, &parkingDb))
  830. {
  831. result = FAIL;
  832. log_info("Can't open Parking deduct database: %s", sqlite3_errmsg(parkingDb));
  833. sqlite3_close(parkingDb);
  834. }
  835. else
  836. {
  837. //log_info("Deduct database open successfully.");
  838. if (sqlite3_exec(parkingDb, createDeductInfoSql, 0, 0, &errMsg) != SQLITE_OK)
  839. {
  840. result = FAIL;
  841. log_info("Create Parking deduct info table error message: %s", errMsg);
  842. }
  843. else
  844. {
  845. log_info("Opened Parking deduct info table successfully");
  846. }
  847. sqlite3_close(parkingDb);
  848. }
  849. return result;
  850. }
  851. int InsertParkingDeductInfo(int gunIndex, RecordTransactionInfo *deductInfo)
  852. {
  853. int result = PASS;
  854. char *errMsg = NULL;
  855. char sqlStr[1024] = {0};
  856. char approNo[13];
  857. char carNo[21];
  858. char OccupancySN[37];
  859. char storeId[18];
  860. char RRN[12];
  861. char ROC[12];
  862. char lineSn[20];
  863. char _time[33];
  864. char vemData[65];
  865. memset(approNo, '\0', sizeof(approNo));
  866. memset(carNo, '\0', sizeof(carNo));
  867. memset(OccupancySN, '\0', sizeof(OccupancySN));
  868. memset(storeId, '\0', sizeof(storeId));
  869. memset(RRN, '\0', sizeof(RRN));
  870. memset(ROC, '\0', sizeof(ROC));
  871. memset(lineSn, '\0', sizeof(lineSn));
  872. memset(_time,'\0',sizeof(_time));
  873. memset(vemData,'\0',sizeof(vemData));
  874. strncpy(approNo, (char *)&deductInfo->pCreditCard.ApprovalNo,9);
  875. strncpy(carNo, (char *)&deductInfo->pCreditCard.CardNo,20);
  876. strncpy(OccupancySN, (char *)&deductInfo->OccupancySN,36);
  877. strncpy(storeId, (char *)&deductInfo->pCreditCard.StoreId,18 );
  878. strncpy(RRN,(char *)&deductInfo->pCreditCard.RRN,12);
  879. strncpy(ROC,(char *)&deductInfo->pCreditCard.ROC,12);
  880. strncpy(_time,(char *)&deductInfo->ParkingStartTime,33);
  881. strncpy(vemData,(char *)&deductInfo->pCreditCard.VemData,64);
  882. //sprintf(reportDate, "%s%s", deductInfo->pCreditCard.TransDate, deductInfo->pCreditCard.TransTime);
  883. sprintf(sqlStr, "insert into report_Parking_deduct(gun_index, vemData, OccupancySN, duration, creditNo, amount, storeId, approvalNo, RRN, ROC, isDonateInvoice, isDeductResult, isUpload, lineSn, StartTime, RedeductTime) "
  884. "values('%d', '%s', '%s', '%d', '%s', '%.1f', '%s', '%s', '%s', '%s', '%d', '%d', '%d', '%d', '%s', '%d');",
  885. gunIndex,
  886. vemData,
  887. OccupancySN,
  888. deductInfo->ParkingDuration,
  889. carNo,
  890. deductInfo->Amount,
  891. storeId,
  892. approNo,
  893. RRN,
  894. ROC,
  895. (int)deductInfo->IsDonateInvoice,
  896. (int)deductInfo->DeductResult,
  897. (int)deductInfo->IsUpload,
  898. deductInfo->LineStatus,
  899. _time,
  900. deductInfo->RedeductTime);
  901. //log_info("%s",sqlStr);
  902. if (sqlite3_open(PARKINGDEDUCT_FILE, &parkingDb))
  903. {
  904. result = FAIL;
  905. log_info( "Can't open deduct database: %s", sqlite3_errmsg(parkingDb));
  906. sqlite3_close(parkingDb);
  907. }
  908. else
  909. {
  910. //log_info( "Local event record database open successfully.");
  911. if (sqlite3_exec(parkingDb, sqlStr, 0, 0, &errMsg) != SQLITE_OK)
  912. {
  913. result = FAIL;
  914. log_info( "Insert deduct record error message: %s", errMsg);
  915. }
  916. else
  917. {
  918. //log_info( "Insert local event record successfully");
  919. }
  920. sprintf(sqlStr, "delete from report_Parking_deduct where idx < (select idx from report_Parking_deduct order by idx desc limit 1)-10000;");
  921. if (sqlite3_exec(parkingDb, sqlStr, 0, 0, &errMsg) != SQLITE_OK)
  922. {
  923. result = FAIL;
  924. log_info("delete deduct record error message: %s", errMsg);
  925. }
  926. else
  927. {
  928. //log_info("delete local charging record successfully");
  929. }
  930. sqlite3_close(parkingDb);
  931. }
  932. return result;
  933. }
  934. // return quantity of DeductInfo
  935. int DB_GetParkingDeductUpload(int *gunIndex, RecordTransactionInfo *deductInfo)
  936. {
  937. char *errMsg = NULL;
  938. char sqlStr[1024];
  939. char **rs;
  940. int rows = 0, cols = 0;
  941. sprintf(sqlStr, "select * from report_Parking_deduct where isUpload = 0;");
  942. if (sqlite3_open(PARKINGDEDUCT_FILE, &parkingDb))
  943. {
  944. log_info("Can't open parking database: %s", sqlite3_errmsg(parkingDb));
  945. sqlite3_close(parkingDb);
  946. }
  947. else
  948. {
  949. sqlite3_get_table(parkingDb, sqlStr, &rs, &rows, &cols, &errMsg);
  950. if (rows > 0)
  951. {
  952. for (int idxRow = 1; idxRow <= rows; idxRow++)
  953. {
  954. //gunIndex[idxRow - 1] = atoi(rs[(idxRow * cols) + 1]);
  955. deductInfo[idxRow - 1].ConnectorID = atoi(rs[(idxRow * cols) + 1]);
  956. // GetDeductTime(rs[(idxRow * cols) + 1], deductInfo);
  957. memcpy((char*)&deductInfo[idxRow - 1].pCreditCard.VemData, rs[(idxRow * cols) + 2],64);
  958. memcpy((char*)&deductInfo[idxRow - 1].OccupancySN, rs[(idxRow * cols) + 3],36);
  959. deductInfo[idxRow - 1].ParkingDuration = atoi(rs[(idxRow * cols) + 4]);
  960. memcpy((char*)&deductInfo[idxRow - 1].pCreditCard.CardNo, rs[(idxRow * cols) + 5],20);
  961. deductInfo[idxRow - 1].Amount = atoi(rs[(idxRow * cols) + 6]);
  962. memcpy((char*)&deductInfo[idxRow - 1].pCreditCard.StoreId, rs[(idxRow * cols) + 7],18);
  963. memcpy((char*)&deductInfo[idxRow - 1].pCreditCard.ApprovalNo, rs[(idxRow * cols) + 8],9);
  964. memcpy((char*)&deductInfo[idxRow - 1].pCreditCard.RRN, rs[(idxRow * cols) + 9],12);
  965. memcpy((char*)&deductInfo[idxRow - 1].pCreditCard.ROC, rs[(idxRow * cols) + 10],12);
  966. deductInfo[idxRow - 1].IsDonateInvoice = atoi(rs[(idxRow * cols) + 11]);
  967. deductInfo[idxRow - 1].DeductResult = atoi(rs[(idxRow * cols) + 12]);
  968. deductInfo[idxRow - 1].IsUpload = atoi(rs[(idxRow * cols) + 13]);
  969. deductInfo[idxRow - 1].LineStatus = atoi(rs[(idxRow * cols) + 14]);
  970. memcpy((char*)&deductInfo[idxRow - 1].ParkingStartTime, rs[(idxRow * cols) + 15],32);
  971. deductInfo[idxRow - 1].RedeductTime = atoi(rs[(idxRow * cols) + 16]);
  972. if(idxRow >= 128)
  973. {
  974. rows = 128;
  975. break;
  976. }
  977. }
  978. }
  979. sqlite3_free_table(rs);
  980. sqlite3_close(parkingDb);
  981. }
  982. return rows;
  983. }
  984. int DB_GetParkingDeductResult(int *gunIndex, RecordTransactionInfo *deductInfo)
  985. {
  986. char *errMsg = NULL;
  987. char sqlStr[1024];
  988. char **rs;
  989. int rows = 0, cols = 0;
  990. sprintf(sqlStr, "select * from report_Parking_deduct where isDeductResult = 0 OR isDeductResult = 3;");
  991. if (sqlite3_open(PARKINGDEDUCT_FILE, &parkingDb))
  992. {
  993. log_info("Can't open parking database: %s", sqlite3_errmsg(parkingDb));
  994. sqlite3_close(parkingDb);
  995. }
  996. else
  997. {
  998. sqlite3_get_table(parkingDb, sqlStr, &rs, &rows, &cols, &errMsg);
  999. if (rows > 0)
  1000. {
  1001. for (int idxRow = 1; idxRow <= rows; idxRow++)
  1002. {
  1003. //gunIndex[idxRow - 1] = atoi(rs[(idxRow * cols) + 1]);
  1004. deductInfo[idxRow - 1].ConnectorID = atoi(rs[(idxRow * cols) + 1]);
  1005. // GetDeductTime(rs[(idxRow * cols) + 1], deductInfo);
  1006. memcpy((char*)&deductInfo[idxRow - 1].pCreditCard.VemData, rs[(idxRow * cols) + 2],64);
  1007. memcpy((char*)&deductInfo[idxRow - 1].OccupancySN, rs[(idxRow * cols) + 3],36);
  1008. deductInfo[idxRow - 1].ParkingDuration = atoi(rs[(idxRow * cols) + 4]);
  1009. memcpy((char*)&deductInfo[idxRow - 1].pCreditCard.CardNo, rs[(idxRow * cols) + 5],20);
  1010. deductInfo[idxRow - 1].Amount = atoi(rs[(idxRow * cols) + 6]);
  1011. memcpy((char*)&deductInfo[idxRow - 1].pCreditCard.StoreId, rs[(idxRow * cols) + 7],18);
  1012. memcpy((char*)&deductInfo[idxRow - 1].pCreditCard.ApprovalNo, rs[(idxRow * cols) + 8],9);
  1013. memcpy((char*)&deductInfo[idxRow - 1].pCreditCard.RRN, rs[(idxRow * cols) + 9],12);
  1014. memcpy((char*)&deductInfo[idxRow - 1].pCreditCard.ROC, rs[(idxRow * cols) + 10],12);
  1015. deductInfo[idxRow - 1].IsDonateInvoice = atoi(rs[(idxRow * cols) + 11]);
  1016. deductInfo[idxRow - 1].DeductResult = atoi(rs[(idxRow * cols) + 12]);
  1017. deductInfo[idxRow - 1].IsUpload = atoi(rs[(idxRow * cols) + 13]);
  1018. deductInfo[idxRow - 1].LineStatus = atoi(rs[(idxRow * cols) + 14]);
  1019. memcpy((char*)&deductInfo[idxRow - 1].ParkingStartTime, rs[(idxRow * cols) + 15],10);
  1020. deductInfo[idxRow - 1].RedeductTime = atoi(rs[(idxRow * cols) + 16]);
  1021. if(idxRow >= 128)
  1022. {
  1023. rows = 128;
  1024. break;
  1025. }
  1026. }
  1027. }
  1028. sqlite3_free_table(rs);
  1029. sqlite3_close(parkingDb);
  1030. }
  1031. return rows;
  1032. }
  1033. int UpdateParkingUpload(char* OccupancySN,int is_upload)
  1034. {
  1035. int result = PASS;
  1036. char* errMsg = NULL;
  1037. char sqlStr[1024] = { 0 };
  1038. if (strcmp((char*)OccupancySN,"") == EQUAL) {
  1039. log_info("OccupancySN is NULL");
  1040. return;
  1041. }
  1042. char SN[37];
  1043. memset(SN,'\0',sizeof(SN));
  1044. memcpy((char*)SN,OccupancySN,36);
  1045. sprintf(sqlStr, "update report_Parking_deduct set IsUpload = %d where OccupancySN = '%s'; ",
  1046. is_upload,
  1047. SN);
  1048. //log_info("%s",sqlStr);
  1049. if (sqlite3_open(PARKINGDEDUCT_FILE, &parkingDb))
  1050. {
  1051. result = FAIL;
  1052. log_info("Can't open parking database: %s", sqlite3_errmsg(parkingDb));
  1053. sqlite3_close(parkingDb);
  1054. } else
  1055. {
  1056. //log_info( "Local event record database open successfully.");
  1057. if (sqlite3_exec(parkingDb, sqlStr, 0, 0, &errMsg) != SQLITE_OK)
  1058. {
  1059. result = FAIL;
  1060. log_info("update parkingDB record error message: %s!", errMsg);
  1061. } else
  1062. {
  1063. //log_info( "update deduct record successfully");
  1064. }
  1065. sqlite3_close(parkingDb);
  1066. }
  1067. return result;
  1068. }
  1069. int UpdateParkingDeductInfo(int gunIndex, RecordTransactionInfo *deductInfo)
  1070. {
  1071. int result = PASS;
  1072. char *errMsg = NULL;
  1073. char sqlStr[1024] = {0};
  1074. char OccupancySN[37] = {0};
  1075. memset(OccupancySN, '\0', 37);
  1076. strncpy(OccupancySN, (char*)&deductInfo->OccupancySN,36);
  1077. if (strcmp((char*)deductInfo->OccupancySN,"") == EQUAL) {
  1078. log_info("OccupancySN is NULL");
  1079. return;
  1080. }
  1081. sprintf(sqlStr, "update report_Parking_deduct set isUpload = %d ,amount = %.1f, isDeductResult = %d, RedeductTime = %d where OccupancySN = '%s'; ",
  1082. (int)deductInfo->IsUpload,
  1083. deductInfo->Amount,
  1084. (int)deductInfo->DeductResult,
  1085. deductInfo->RedeductTime,
  1086. deductInfo->OccupancySN);
  1087. // log_info("%s",sqlStr);
  1088. if (sqlite3_open(PARKINGDEDUCT_FILE, &parkingDb))
  1089. {
  1090. result = FAIL;
  1091. log_info( "Can't open deduct database: %s", sqlite3_errmsg(parkingDb));
  1092. sqlite3_close(parkingDb);
  1093. }
  1094. else
  1095. {
  1096. //log_info( "Local event record database open successfully.");
  1097. if (sqlite3_exec(parkingDb, sqlStr, 0, 0, &errMsg) != SQLITE_OK)
  1098. {
  1099. result = FAIL;
  1100. log_info( "update deduct record error message: %s!", errMsg);
  1101. }
  1102. else
  1103. {
  1104. //log_info( "update deduct record successfully");
  1105. }
  1106. sqlite3_close(parkingDb);
  1107. }
  1108. return result;
  1109. }