sqlite_handle.c 81 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971
  1. #include "sqlite_handle.h"
  2. #include "elog.h"
  3. #include "time.h"
  4. #include "math.h"
  5. #define TOTAL_COUNT 60//统计总数
  6. /// @brief 初始化SQLite数据库
  7. /// @param db 数据库接口
  8. /// @param daba_name 数据库名称
  9. /// @return
  10. int sqlite_init(sqlite3** db, const char* daba_name)
  11. {
  12. int ret = 0;
  13. char *errorMsg = NULL;
  14. ret = sqlite3_open(daba_name,db);
  15. if(ret != SQLITE_OK)
  16. return -1 ;
  17. char SetData[]="PRAGMA cache_size = 0;";
  18. ret = sqlite3_exec(*db,SetData,NULL,NULL,&errorMsg);
  19. return 0;
  20. }
  21. /// @brief 关闭SQLite数据库
  22. /// @param db 数据库接口
  23. void sqlite_deinit(sqlite3 *db)
  24. {
  25. int ret = 0;
  26. ret = sqlite3_close(db);
  27. if(ret != SQLITE_OK)
  28. return;
  29. return;
  30. }
  31. int dev_update_485_consumer(sqlite3 *db,float consumer,GlobalDeviceInfo* _globalDeviceInfo)
  32. {
  33. int res ;
  34. char select_sql[256] = {0};
  35. //// char *errorMsg = NULL;
  36. int nrow = 0; //满足条件的记录数目
  37. int ncolumn = 0; //每条记录包含的字段数据
  38. char** pResult = NULL; //用来指向sql执行结果的指针
  39. char* err_msg=NULL;
  40. char buff[200] = {0};
  41. sprintf(buff,"%.2f",consumer);
  42. sprintf(select_sql,"UPDATE Table_DeviceInfo SET product_consumer=%s WHERE product_id=%d;",buff,_globalDeviceInfo->product_id);
  43. //printf("consumer=%2f. product_id = %d\n",consumer,_globalDeviceInfo->product_id);
  44. res = sqlite3_get_table(db, select_sql, &pResult, &nrow, &ncolumn, &err_msg);
  45. if(res != SQLITE_OK){
  46. printf("UPDATE dasdasdasdasdasdasdas FAIELD\n");
  47. return -1 ;
  48. }
  49. sqlite3_free_table(pResult);
  50. }
  51. int dev_set_485_saddr(sqlite3 *db,uint16_t saddr,GlobalDeviceInfo* _globalDeviceInfo)
  52. {
  53. int res ;
  54. char select_sql[256] = {0};
  55. //// char *errorMsg = NULL;
  56. int nrow = 0; //满足条件的记录数目
  57. int ncolumn = 0; //每条记录包含的字段数据
  58. char** pResult = NULL; //用来指向sql执行结果的指针
  59. char* err_msg=NULL;
  60. sprintf(select_sql,"UPDATE Table_DeviceInfo SET product_modbus_addr=%d WHERE product_id=%d;",saddr,_globalDeviceInfo->product_id);
  61. res = sqlite3_get_table(db, select_sql, &pResult, &nrow, &ncolumn, &err_msg);
  62. if(res != SQLITE_OK)
  63. return -1 ;
  64. sqlite3_free_table(pResult);
  65. return 0;
  66. }
  67. /// @brief 查询设备信息表
  68. /// @param db 数据库接口
  69. /// @param _globalDeviceInfo 返回数据接口
  70. /// @return 0:正常
  71. int dev_get_device_info(sqlite3 *db,GlobalDeviceInfo* _globalDeviceInfo)
  72. {
  73. int res = 0 ;
  74. int rowIndex = 1 ;
  75. // // char *errorMsg = NULL;
  76. int nrow = 0; //满足条件的记录数目
  77. int ncolumn = 0; //每条记录包含的字段数据
  78. char** pResult = NULL; //用来指向sql执行结果的指针
  79. char* err_msg=NULL;
  80. const char* select_sql = "SELECT* from Table_DeviceInfo;";
  81. res = sqlite3_get_table(db, select_sql, &pResult, &nrow, &ncolumn, &err_msg);
  82. if(res != SQLITE_OK)
  83. return -1 ;
  84. //提取数据
  85. if(nrow==0)
  86. return -1 ;
  87. //获取ID
  88. _globalDeviceInfo->product_id = atoi(pResult[rowIndex*ncolumn+0]);
  89. //获取产品编号
  90. strcpy(_globalDeviceInfo->product_number,pResult[rowIndex*ncolumn+1]);
  91. //获取产品名称
  92. strcpy(_globalDeviceInfo->product_name,pResult[rowIndex*ncolumn+2]);
  93. //获取产品类型
  94. _globalDeviceInfo->product_type = atoi(pResult[rowIndex*ncolumn+3]);
  95. //获取电源类型
  96. _globalDeviceInfo->product_pwr_type = atoi(pResult[rowIndex*ncolumn+4]);
  97. //获取版本号
  98. strcpy((char *)(_globalDeviceInfo->product_version),pResult[rowIndex*ncolumn+5]);
  99. //多国语言
  100. _globalDeviceInfo->product_language = atoi(pResult[rowIndex*ncolumn+6]);
  101. //获取级联设备数
  102. _globalDeviceInfo->product_count = atoi(pResult[rowIndex*ncolumn+7]);
  103. //获取采样间隔时间
  104. _globalDeviceInfo->product_samp_time = atoi(pResult[rowIndex*ncolumn+8]);
  105. //获取采样存储时间
  106. _globalDeviceInfo->product_save_time = atoi(pResult[rowIndex*ncolumn+9]);
  107. //获取modbus主从模式
  108. _globalDeviceInfo->_modbus_info.product_modbus_type = atoi(pResult[rowIndex*ncolumn+10]);
  109. //获取波特率
  110. _globalDeviceInfo->_modbus_info.product_modbus_baud = atoi(pResult[rowIndex*ncolumn+11]);
  111. //获取从Modbus地址信息
  112. _globalDeviceInfo->_modbus_info.product_modbus_addr = atoi(pResult[rowIndex*ncolumn+12]);
  113. //获取继电器控制端口号
  114. strcpy(_globalDeviceInfo->_modbus_info.product_relay_ctrl_port,pResult[rowIndex*ncolumn+13]);
  115. _globalDeviceInfo->consumer = atof(pResult[rowIndex*ncolumn+14]);
  116. //_globalDeviceInfo->consumer = 0;
  117. sqlite3_free_table(pResult);
  118. return 0;
  119. }
  120. /// @brief 更新设备信息表
  121. /// @param db 数据库接口
  122. /// @param _globalDeviceInfo 更新的数据接口
  123. /// @return
  124. int dev_update_device_genera_info(sqlite3 *db,GlobalDeviceInfo* _globalDeviceInfo)
  125. {
  126. int res ;
  127. char select_sql[256] = {0};
  128. //// char *errorMsg = NULL;
  129. int nrow = 0; //满足条件的记录数目
  130. int ncolumn = 0; //每条记录包含的字段数据
  131. char** pResult = NULL; //用来指向sql执行结果的指针
  132. char* err_msg=NULL;
  133. sprintf(select_sql,"UPDATE Table_DeviceInfo SET product_number='%s',product_name='%s',product_type=%d,product_pwr_type=%d,product_version='%s',product_language=%d,product_count=%d,product_samp_time=%d,product_save_time=%d WHERE product_id=%d;",
  134. _globalDeviceInfo->product_number,
  135. _globalDeviceInfo->product_name,
  136. _globalDeviceInfo->product_type,
  137. _globalDeviceInfo->product_pwr_type,
  138. _globalDeviceInfo->product_version,
  139. _globalDeviceInfo->product_language,
  140. _globalDeviceInfo->product_count,
  141. _globalDeviceInfo->product_samp_time,
  142. _globalDeviceInfo->product_save_time,
  143. _globalDeviceInfo->product_id);
  144. res = sqlite3_get_table(db, select_sql, &pResult, &nrow, &ncolumn, &err_msg);
  145. if(res != SQLITE_OK)
  146. return -1 ;
  147. sqlite3_free_table(pResult);
  148. return 0;
  149. }
  150. /// @brief 更新modbus相关控制接口
  151. /// @param db
  152. /// @param _globalDeviceInfo
  153. /// @return
  154. int dev_update_device_modus_info(sqlite3 *db,GlobalDeviceInfo* _globalDeviceInfo)
  155. {
  156. int res ;
  157. char select_sql[256] = {0};
  158. // // char *errorMsg = NULL;
  159. int nrow = 0; //满足条件的记录数目
  160. int ncolumn = 0; //每条记录包含的字段数据
  161. char** pResult = NULL; //用来指向sql执行结果的指针
  162. char* err_msg=NULL;
  163. sprintf(select_sql,"UPDATE Table_DeviceInfo SET product_modbus_type=%d,product_modbus_baud=%d,product_modbus_addr=%d,product_relay_ctrl_port='%s' WHERE product_id=%d;",
  164. _globalDeviceInfo->_modbus_info.product_modbus_type,
  165. _globalDeviceInfo->_modbus_info.product_modbus_baud,
  166. _globalDeviceInfo->_modbus_info.product_modbus_addr,
  167. _globalDeviceInfo->_modbus_info.product_relay_ctrl_port,
  168. _globalDeviceInfo->product_id);
  169. res = sqlite3_get_table(db, select_sql, &pResult, &nrow, &ncolumn, &err_msg);
  170. if(res != SQLITE_OK)
  171. return -1 ;
  172. sqlite3_free_table(pResult);
  173. return 0;
  174. }
  175. /// @brief 获取最大的Index
  176. /// @param db
  177. int dev_search_last_Index(sqlite3 *db,int* nIndex,char* tableName)
  178. {
  179. int res ;
  180. char select_sql[512] = {0};
  181. // // char *errorMsg = NULL;
  182. int nrow = 0; //满足条件的记录数目
  183. int ncolumn = 0; //每条记录包含的字段数据
  184. char** pResult = NULL; //用来指向sql执行结果的指针
  185. char* err_msg=NULL;
  186. sprintf(select_sql,"SELECT count(*),max(product_Index) FROM %s;",tableName);
  187. res = sqlite3_get_table(db, select_sql, &pResult, &nrow, &ncolumn, &err_msg);
  188. if(res != SQLITE_OK)
  189. {
  190. log_e("sqlite handle error.");
  191. return -1 ;
  192. }
  193. if(nrow==0)
  194. {
  195. log_e("sqlite search no data.");
  196. return -1 ;
  197. }
  198. if (!pResult[nrow * ncolumn])
  199. {
  200. *nIndex = 1;
  201. }
  202. else
  203. {
  204. int nCount = atoi(pResult[nrow * ncolumn]);
  205. if (nCount > 0)
  206. {
  207. *nIndex = atoi(pResult[nrow * ncolumn + 1]);
  208. }
  209. *nIndex += 1;
  210. }
  211. sqlite3_free_table(pResult);
  212. return 0;
  213. }
  214. /// @brief 删除最早的数据将所有数据平移。
  215. /// @param db
  216. int dev_change_last_Index(sqlite3 *db,int* nIndex,int nDeleteNumber,char* tableName)
  217. {
  218. int res ;
  219. char select_sql[512] = {0};
  220. int nrow = 0; //满足条件的记录数目
  221. int ncolumn = 0; //每条记录包含的字段数据
  222. char** pResult = NULL; //用来指向sql执行结果的指针
  223. char* err_msg=NULL;
  224. sprintf(select_sql,"delete FROM %s where product_Index<%d;",tableName,nDeleteNumber);
  225. res = sqlite3_get_table(db, select_sql, &pResult, &nrow, &ncolumn, &err_msg);
  226. if(res != SQLITE_OK)
  227. {
  228. log_e("sqlite handle error: %s \n%s", err_msg,select_sql);
  229. return -1 ;
  230. }
  231. sqlite3_free_table(pResult);
  232. sprintf(select_sql,"UPDATE %s SET product_Index = product_Index - %d;",tableName,nDeleteNumber);
  233. res = sqlite3_get_table(db, select_sql, &pResult, &nrow, &ncolumn, &err_msg);
  234. if(res != SQLITE_OK)
  235. {
  236. log_e("sqlite handle error: %s \n%s", err_msg,select_sql);
  237. return -1 ;
  238. }
  239. *nIndex-=nDeleteNumber;
  240. sqlite3_free_table(pResult);
  241. return 0;
  242. }
  243. /// @brief 插入一条电源监控信息
  244. /// @param db
  245. /// @param _globalPowerChnInfo
  246. /// @return
  247. int dev_insert_power_info(sqlite3 *db,GlobalPowerInfo* _globalPowerChnInfo,int* nIndex)
  248. {
  249. int res ;
  250. char select_sql[512] = {0};
  251. // char *errorMsg = NULL;
  252. int nrow = 0; //满足条件的记录数目
  253. int ncolumn = 0; //每条记录包含的字段数据
  254. char** pResult = NULL; //用来指向sql执行结果的指针
  255. char* err_msg=NULL;
  256. sprintf(select_sql,"INSERT INTO Table_PowerInfo VALUES ('%s',%d,%d,%d,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%d);",
  257. _globalPowerChnInfo->samp_time,
  258. _globalPowerChnInfo->product_id,
  259. _globalPowerChnInfo->product_ch_id,
  260. _globalPowerChnInfo->product_status,
  261. _globalPowerChnInfo->_power_info.voltage,
  262. _globalPowerChnInfo->_power_info.current,
  263. _globalPowerChnInfo->_power_info.power,
  264. _globalPowerChnInfo->_power_info.freq,
  265. _globalPowerChnInfo->_power_info.consumption,
  266. _globalPowerChnInfo->_power_info.factor,
  267. *nIndex);
  268. (*nIndex)+=1;
  269. // if(_globalPowerChnInfo->product_ch_id==0)
  270. //log_d(select_sql);
  271. res = sqlite3_get_table(db, select_sql, &pResult, &nrow, &ncolumn, &err_msg);
  272. if(res != SQLITE_OK)
  273. {
  274. log_e("sqlite handle error: %s \n%s", err_msg,select_sql);
  275. return -1 ;
  276. }
  277. sqlite3_free_table(pResult);
  278. return 0;
  279. }
  280. /// @brief 获取采集的最新值
  281. /// @param db
  282. /// @param product_id
  283. /// @param product_ch_id
  284. /// @param _globalPowerInfo
  285. /// @return
  286. int dev_search_latest_power_info(sqlite3 *db,int product_id,int product_ch_id,GlobalPowerInfo* _globalPowerInfo)
  287. {
  288. int res ;
  289. char select_sql[512] = {0};
  290. // char *errorMsg = NULL;
  291. int nrow = 0; //满足条件的记录数目
  292. int ncolumn = 0; //每条记录包含的字段数据
  293. char** pResult = NULL; //用来指向sql执行结果的指针
  294. char* err_msg=NULL;
  295. // SELECT *
  296. // FROM Table_PowerInfo
  297. // WHERE product_id = 1 AND product_ch_id = 0
  298. // ORDER BY product_samp_time DESC
  299. // LIMIT 1;
  300. // sprintf(select_sql,"SELECT * FROM Table_PowerInfo WHERE product_id=%d AND product_ch_id=%d ORDER BY strftime('%%Y-%%m-%%d %%H:%%M:%%S',product_samp_time || '.000') DESC LIMIT 1;",
  301. // product_id,
  302. // product_ch_id);
  303. sprintf(select_sql,"SELECT * FROM Table_PowerInfo WHERE product_id=%d AND product_ch_id=%d ORDER BY product_samp_time DESC LIMIT 1;",
  304. product_id,
  305. product_ch_id);
  306. res = sqlite3_get_table(db, select_sql, &pResult, &nrow, &ncolumn, &err_msg);
  307. if(res != SQLITE_OK)
  308. {
  309. log_e("sqlite handle error.");
  310. return -1 ;
  311. }
  312. if(nrow==0)
  313. {
  314. log_e("sqlite search no data.");
  315. return -1 ;
  316. }
  317. _globalPowerInfo->product_id = atoi(pResult[nrow*ncolumn+1]);
  318. _globalPowerInfo->product_ch_id = atoi(pResult[nrow*ncolumn+2]);
  319. _globalPowerInfo->_power_info.status = atoi(pResult[nrow*ncolumn+3]);
  320. _globalPowerInfo->_power_info.voltage = atof(pResult[nrow*ncolumn+4]);
  321. _globalPowerInfo->_power_info.current = atof(pResult[nrow*ncolumn+5]);
  322. _globalPowerInfo->_power_info.power = atof(pResult[nrow*ncolumn+6]);
  323. _globalPowerInfo->_power_info.freq = atof(pResult[nrow*ncolumn+7]);
  324. _globalPowerInfo->_power_info.consumption = atof(pResult[nrow*ncolumn+8]);
  325. _globalPowerInfo->_power_info.factor = atof(pResult[nrow*ncolumn+9]);
  326. sqlite3_free_table(pResult);
  327. return 0;
  328. }
  329. /// @brief 获取所有采集的最新值
  330. /// @param db
  331. /// @param _globalPowerManger
  332. /// @return
  333. #if 0
  334. int dev_search_latest_power_All_info(GlobalDeviceManager* __globalDeviceManger,_OverChnPwrAckInfo* __overChnPwrAckInfo)
  335. {
  336. GlobalPowerManger* _globalPowerMangerTemp = NULL ;
  337. char* upgrade_msg = NULL ;
  338. list_for_each_entry(_globalPowerMangerTemp, &__globalDeviceManger->_globalPowerManger.list, list)
  339. {
  340. _OverChnPwrAckInfo *_overChnPwrBackInfoTemp = (_OverChnPwrAckInfo *)malloc(sizeof(_OverChnPwrAckInfo));
  341. if (_overChnPwrBackInfoTemp == NULL)
  342. {
  343. log_e("_overChnPwrBackInfoTemp malloc err.");
  344. return -1;
  345. }
  346. // 填数据
  347. _overChnPwrBackInfoTemp->product_name = __globalDeviceManage._global_device_info->product_name;
  348. _overChnPwrBackInfoTemp->product_number = __globalDeviceManage._global_device_info->product_number;
  349. _overChnPwrBackInfoTemp->product_id = __globalDeviceManage._global_device_info->product_id;
  350. _overChnPwrBackInfoTemp->productChName = _globalPowerMangerTemp->product_ch_name;
  351. _overChnPwrBackInfoTemp->productChId = _globalPowerMangerTemp->product_ch_id;
  352. _overChnPwrBackInfoTemp->status = _globalPowerMangerTemp->_PowerInfo.status;
  353. _overChnPwrBackInfoTemp->voltage = _globalPowerMangerTemp->_PowerInfo.voltage;
  354. _overChnPwrBackInfoTemp->current = _globalPowerMangerTemp->_PowerInfo.current;
  355. _overChnPwrBackInfoTemp->power = _globalPowerMangerTemp->_PowerInfo.power;
  356. _overChnPwrBackInfoTemp->freq = _globalPowerMangerTemp->_PowerInfo.freq;
  357. _overChnPwrBackInfoTemp->consumption = _globalPowerMangerTemp->_PowerInfo.consumption;
  358. _overChnPwrBackInfoTemp->factor = _globalPowerMangerTemp->_PowerInfo.factor;
  359. _overChnPwrBackInfoTemp->product_ch_start_delay=_globalPowerMangerTemp->product_ch_start_delay;
  360. _overChnPwrBackInfoTemp->product_ch_stop_delay=_globalPowerMangerTemp->product_ch_stop_delay;
  361. list_add_tail(&_overChnPwrBackInfoTemp->list, &__overChnPwrAckInfo->list);
  362. }
  363. return 0;
  364. }
  365. #endif
  366. /// @brief 获取所有采集统计的最新值
  367. /// @param db
  368. /// @param _globalPowerManger
  369. /// @return
  370. #if 0
  371. int dev_search_latest_power_statistic_info(GlobalDeviceManager* __globalDeviceManger)
  372. {
  373. _OverAllPwrAckInfo _over_all_pwr_back_info; //设备电源信息
  374. GlobalPowerManger* _globalPowerMangerTemp = NULL ;
  375. char* upgrade_msg = NULL ;
  376. float fSaveVoltage =0.0f,fSaveFreq =0.0f,fSaveFactor =0.0f;
  377. float faverageVoltage =0.0f,faverageFreq =0.0f,faverageFactor =0.0f;
  378. float fDiffVoltage =0.0f,fDiffFreq =0.0f,fDiffFactor =0.0f;
  379. float fNowVoltage =0.0f,fNowFreq =0.0f,fNowFactor =0.0f;
  380. memset(&_over_all_pwr_back_info,0,sizeof(_OverAllPwrAckInfo));
  381. _over_all_pwr_back_info.product_name = __globalDeviceManage._global_device_info->product_name;
  382. _over_all_pwr_back_info.product_id = __globalDeviceManage._global_device_info->product_id;
  383. _over_all_pwr_back_info.product_number = __globalDeviceManage._global_device_info->product_number;
  384. int nTempSum=0;
  385. list_for_each_entry(_globalPowerMangerTemp, &__globalDeviceManger->_globalPowerManger.list, list)
  386. {
  387. faverageVoltage += _globalPowerMangerTemp->_PowerInfo.voltage;
  388. faverageFreq += _globalPowerMangerTemp->_PowerInfo.freq;
  389. faverageFactor += _globalPowerMangerTemp->_PowerInfo.factor;
  390. nTempSum++;
  391. }
  392. if (nTempSum>0)
  393. {
  394. faverageVoltage /= nTempSum;
  395. faverageFreq /= nTempSum;
  396. faverageFactor /= nTempSum;
  397. }else
  398. {
  399. return -1;
  400. }
  401. nTempSum=0;
  402. list_for_each_entry(_globalPowerMangerTemp, &__globalDeviceManger->_globalPowerManger.list, list)
  403. {
  404. if (nTempSum==0)
  405. {
  406. fSaveVoltage=_globalPowerMangerTemp->_PowerInfo.voltage;
  407. fSaveFreq=_globalPowerMangerTemp->_PowerInfo.freq;
  408. fSaveFactor=_globalPowerMangerTemp->_PowerInfo.factor;
  409. fDiffVoltage=abs(faverageVoltage-fSaveVoltage);
  410. fDiffFreq=abs(faverageFreq-fSaveFreq);
  411. fDiffFactor=abs(faverageFactor-fSaveFactor);
  412. }else
  413. { //其他位则计算偏差值
  414. fNowVoltage=abs(faverageVoltage-_globalPowerMangerTemp->_PowerInfo.voltage);
  415. fNowFreq=abs(faverageFreq-_globalPowerMangerTemp->_PowerInfo.freq);
  416. fNowFactor=abs(faverageFactor-_globalPowerMangerTemp->_PowerInfo.factor);
  417. if (fNowVoltage<fDiffVoltage)
  418. {
  419. fSaveVoltage=_globalPowerMangerTemp->_PowerInfo.voltage;
  420. fDiffVoltage=fNowVoltage;
  421. }
  422. if (fNowFreq<fDiffFreq)
  423. {
  424. fSaveFreq=_globalPowerMangerTemp->_PowerInfo.freq;
  425. fDiffFreq=fNowFreq;
  426. }
  427. if (fNowFactor<fDiffFactor)
  428. {
  429. fSaveFactor=_globalPowerMangerTemp->_PowerInfo.voltage;
  430. fDiffFactor=fNowFactor;
  431. }
  432. }
  433. // 填数据
  434. _over_all_pwr_back_info.current += _globalPowerMangerTemp->_PowerInfo.current ;
  435. _over_all_pwr_back_info.power += _globalPowerMangerTemp->_PowerInfo.power ;
  436. _over_all_pwr_back_info.consumption += _globalPowerMangerTemp->_PowerInfo.consumption ;
  437. nTempSum++;
  438. }
  439. _over_all_pwr_back_info.voltage = fSaveVoltage ;
  440. _over_all_pwr_back_info.freq = fSaveFreq ;
  441. _over_all_pwr_back_info.factor = fSaveFactor;
  442. upgrade_msg = ws_over_status_ack_to_json(0,&_over_all_pwr_back_info);
  443. //struct mg_connection *WStemp = WSLinklist;
  444. //while (WStemp != NULL)
  445. //{
  446. // mg_ws_send(WStemp->ws_client, upgrade_msg, strlen(upgrade_msg), WEBSOCKET_OP_TEXT);
  447. // WStemp = WStemp->next;
  448. // }
  449. if (__globalDeviceManger->ws_client != NULL)
  450. {
  451. mg_ws_send(__globalDeviceManger->ws_client, upgrade_msg, strlen(upgrade_msg), WEBSOCKET_OP_TEXT);
  452. }
  453. //释放资源,一定要记得释放json字符串
  454. free(upgrade_msg);
  455. return 0;
  456. }
  457. #endif
  458. #define DEBUG_TEST 0
  459. /// @brief 获取一段时间内采集的最新值
  460. /// @param db
  461. /// @param product_id
  462. /// @param product_ch_id
  463. /// @param total_type
  464. /// @param _globalPowerInfo
  465. /// @return
  466. int dev_search_time_power_info(sqlite3 *db,int product_id,int product_ch_id,int total_type,GlobalPowerInfo* _globalPowerInfo,char* start_time,char* end_time)
  467. {
  468. int res ;
  469. char select_sql[512] = {0};
  470. // char *errorMsg = NULL;
  471. int nrow = 0; //满足条件的记录数目
  472. int ncolumn = 0; //每条记录包含的字段数据
  473. char** pResult = NULL; //用来指向sql执行结果的指针
  474. char* err_msg=NULL;
  475. // SELECT *
  476. // FROM Table_PowerInfo
  477. // WHERE product_id = 1 AND product_ch_id = 0
  478. // ORDER BY product_samp_time DESC
  479. // LIMIT 1;
  480. // sprintf(select_sql,"SELECT * FROM Table_PowerInfo WHERE product_id=%d AND product_ch_id=%d ORDER BY strftime('%%Y-%%m-%%d %%H:%%M:%%S',product_samp_time || '.000') DESC LIMIT 1;",
  481. // product_id,
  482. // product_ch_id);
  483. log_d("product_id = %d product_ch_id=%d ",product_id,product_ch_id);
  484. //数据库查询 1MIN一个点
  485. // snprintf(select_sql,sizeof(select_sql),"SELECT * FROM Table_PowerInfo WHERE product_id=%d AND product_ch_id=%d ORDER BY product_Index DESC LIMIT 60;",
  486. // product_id,
  487. // product_ch_id);
  488. snprintf(select_sql, sizeof(select_sql), "SELECT * FROM Table_PowerInfo WHERE (product_id=%d) AND (product_ch_id=%d) AND (product_samp_time BETWEEN '%s' AND '%s') ORDER BY product_Index DESC LIMIT 60;",
  489. product_id,
  490. product_ch_id,
  491. start_time,
  492. end_time);
  493. //300是秒数,即5分钟的秒数为300秒,这个间隔数可以自己定义
  494. // select id,cameraName,checkPointName,datetime(strftime('%s', countTime)/300*300,'unixepoch')
  495. // as countTime,sum(todayCount) as 'todaycount'
  496. // from cardetectinfo where countTime>='2022-04-01 01:01:01' and countTime<='2022-08-31 01:01:01' group by strftime('%s', countTime)/300 order by countTime limit 0,20
  497. // SELECT TO_CHAR(TRUNC(SYSDATE, 'DD') + (1 / (24 * 60) * ROWNUM),
  498. // 'YYYY-MM-DD hh24:MI:SS')
  499. // FROM ALL_OBJECTS
  500. // WHERE ROWNUM <= 1440 / 1;
  501. res = sqlite3_get_table(db, select_sql, &pResult, &nrow, &ncolumn, &err_msg);
  502. if(res != SQLITE_OK)
  503. {
  504. log_e("sqlite handle error.");
  505. return -1 ;
  506. }
  507. if(nrow==0)
  508. {
  509. log_e("sqlite search no data.");
  510. return -1 ;
  511. }
  512. int nCount=1;
  513. if (nrow<=TOTAL_COUNT)
  514. {
  515. nCount=nrow;
  516. }
  517. else nCount=TOTAL_COUNT;
  518. //电压统计
  519. if(total_type == TOTAL_VOLTAGE_TYPE)
  520. {
  521. for(int i=0;i < nCount; i++)
  522. {
  523. _globalPowerInfo ->_total_voltage.ydata[i] = atof(pResult[(nCount-i)*ncolumn+4]);
  524. strcpy(_globalPowerInfo ->_total_voltage.xAxis[i],pResult[(nCount-i)*ncolumn+0]);
  525. #if DEBUG_TEST
  526. _globalPowerInfo ->_total_voltage.ydata[i] = 220.0+i*0.8;
  527. sprintf(data_time_str,"2023-01-23:%d",i+4);
  528. strcpy(&_globalPowerInfo ->_total_voltage.xAxis[i][0],data_time_str);
  529. #endif
  530. }
  531. }
  532. //电流统计
  533. else if(total_type == TOTAL_CURRENT_TYPE)
  534. {
  535. for(int i=1;i < nCount; i++)
  536. {
  537. #if DEBUG_TEST
  538. _globalPowerInfo ->_total_current.ydata[i] = i+2.7;
  539. sprintf(data_time_str,"2023-01-23:%d",i+6);
  540. strcpy(&_globalPowerInfo ->_total_current.xAxis[i][0],data_time_str);
  541. #endif
  542. _globalPowerInfo->_total_current.ydata[i] = atof(pResult[(nCount-i)*ncolumn+5]);
  543. strcpy(_globalPowerInfo ->_total_current.xAxis[i],pResult[(nCount-i)*ncolumn+0]);
  544. }
  545. }
  546. //功率统计
  547. else if(total_type == TOTAL_POWER_TYPE)
  548. {
  549. for(int i=0;i < nCount; i++)
  550. {
  551. #if DEBUG_TEST
  552. _globalPowerInfo ->_total_power.ydata[i] = i+5.8;
  553. sprintf(data_time_str,"2023-01-23:%d",i+12);
  554. strcpy(&_globalPowerInfo ->_total_power.xAxis[i][0],data_time_str);
  555. #endif
  556. _globalPowerInfo->_total_power.ydata[i] = atof(pResult[(nCount-i)*ncolumn+6]);
  557. strcpy(_globalPowerInfo ->_total_power.xAxis[i],pResult[(nCount-i)*ncolumn+0]);
  558. }
  559. }
  560. //耗电量统计
  561. else if(total_type == TOTAL_POWER_CONS_TYPE)
  562. {
  563. for(int i=0;i < nCount; i++)
  564. {
  565. #if DEBUG_TEST
  566. _globalPowerInfo ->_total_consumption.ydata[i] = i+7.2;
  567. sprintf(data_time_str,"2023-01-23:%d",i+10);
  568. strcpy(&_globalPowerInfo ->_total_consumption.xAxis[i][0],data_time_str);
  569. #endif
  570. _globalPowerInfo->_total_consumption.ydata[i] = atof(pResult[(nCount-i)*ncolumn+8]);
  571. strcpy(_globalPowerInfo ->_total_consumption.xAxis[i],pResult[(nCount-i)*ncolumn+0]);
  572. }
  573. }
  574. sqlite3_free_table(pResult);
  575. return 0;
  576. }
  577. /// @brief 获取系统总数信息
  578. /// @param db
  579. /// @param product_id
  580. /// @param product_ch_id
  581. /// @param _globalPowerInfo
  582. /// @return
  583. int dev_get_system_total_info(sqlite3 *db,int product_id,int product_ch_id, SystemTotalInfo* __SystemTotalInfo,char* start_time,char* end_time)
  584. {
  585. int res ;
  586. char select_sql[512] = {0};
  587. // char *errorMsg = NULL;
  588. int nrow = 0; //满足条件的记录数目
  589. int ncolumn = 0; //每条记录包含的字段数据
  590. char** pResult = NULL; //用来指向sql执行结果的指针
  591. char* err_msg=NULL;
  592. __SystemTotalInfo->log_total=0;
  593. __SystemTotalInfo->sensor_total=0;
  594. __SystemTotalInfo->warn_total=0;
  595. //查询告警总数
  596. snprintf(select_sql,sizeof(select_sql),"SELECT count (*) FROM Table_AlarmManage where (alarmType=%d) and (alarmDate BETWEEN '%s' AND '%s');",0,start_time,end_time);
  597. res = sqlite3_get_table(db, select_sql, &pResult, &nrow, &ncolumn, &err_msg);
  598. if(res != SQLITE_OK)
  599. {
  600. log_e("sqlite select Table_AlarmManage handle error.");
  601. return -1 ;
  602. }
  603. if(nrow==0)
  604. {
  605. log_e("sqlite search Table_AlarmManage no data.");
  606. return -1 ;
  607. }
  608. __SystemTotalInfo->warn_total = atoi(pResult[1]);
  609. //查询日志总数
  610. snprintf(select_sql,sizeof(select_sql),"SELECT count (*) FROM Table_AlarmManage where (alarmType=%d) and (alarmDate BETWEEN '%s' AND '%s');",2,start_time,end_time);
  611. res = sqlite3_get_table(db, select_sql, &pResult, &nrow, &ncolumn, &err_msg);
  612. if(res != SQLITE_OK)
  613. {
  614. log_e("sqlite select run_log handle error.");
  615. return -1 ;
  616. }
  617. if(nrow==0)
  618. {
  619. log_e("sqlite search run_log no data.");
  620. return -1 ;
  621. }
  622. __SystemTotalInfo->log_total = atoi(pResult[1]);
  623. //查询传感器总数
  624. snprintf(select_sql,sizeof(select_sql),"SELECT count (*) FROM Table_SensorManage;");
  625. res = sqlite3_get_table(db, select_sql, &pResult, &nrow, &ncolumn, &err_msg);
  626. if(res != SQLITE_OK)
  627. {
  628. log_e("sqlite select Table_SensorInfo handle error.");
  629. return -1 ;
  630. }
  631. if(nrow==0)
  632. {
  633. log_e("sqlite search Table_SensorInfo no data.");
  634. return -1 ;
  635. }
  636. __SystemTotalInfo->sensor_total = atoi(pResult[1]);
  637. #if 0
  638. __SystemTotalInfo->channel_total =
  639. #endif
  640. sqlite3_free_table(pResult);
  641. return 0;
  642. }
  643. /// @brief 功率趋势图接口(有功功率、无功功率以及视在功率)
  644. /// @param db
  645. /// @param product_id
  646. /// @param product_ch_id
  647. /// @param total_type
  648. /// @param _globalPowerInfo
  649. /// @return
  650. int dev_search_power_trend_info(sqlite3 *db,int product_id,int product_ch_id,GlobalPowerInfo* _globalPowerInfo,char* start_time,char* end_time)
  651. {
  652. int res ;
  653. char select_sql[512] = {0};
  654. // char *errorMsg = NULL;
  655. int nrow = 0; //满足条件的记录数目
  656. int ncolumn = 0; //每条记录包含的字段数据
  657. char** pResult = NULL; //用来指向sql执行结果的指针
  658. char* err_msg=NULL;
  659. // SELECT *
  660. // FROM Table_PowerInfo
  661. // WHERE product_id = 1 AND product_ch_id = 0
  662. // ORDER BY product_samp_time DESC
  663. // LIMIT 1;
  664. // sprintf(select_sql,"SELECT * FROM Table_PowerInfo WHERE product_id=%d AND product_ch_id=%d ORDER BY strftime('%%Y-%%m-%%d %%H:%%M:%%S',product_samp_time || '.000') DESC LIMIT 1;",
  665. // product_id,
  666. // product_ch_id);
  667. // 数据库查询 1MIN一个点
  668. snprintf(select_sql, sizeof(select_sql), "SELECT * FROM Table_PowerInfo WHERE (product_id=%d) AND (product_ch_id=%d) AND (product_samp_time BETWEEN '%s' AND '%s') ORDER BY product_Index DESC LIMIT 60;",
  669. product_id,
  670. product_ch_id,
  671. start_time,
  672. end_time);
  673. //300是秒数,即5分钟的秒数为300秒,这个间隔数可以自己定义
  674. // select id,cameraName,checkPointName,datetime(strftime('%s', countTime)/300*300,'unixepoch')
  675. // as countTime,sum(todayCount) as 'todaycount'
  676. // from cardetectinfo where countTime>='2022-04-01 01:01:01' and countTime<='2022-08-31 01:01:01' group by strftime('%s', countTime)/300 order by countTime limit 0,20
  677. // SELECT TO_CHAR(TRUNC(SYSDATE, 'DD') + (1 / (24 * 60) * ROWNUM),
  678. // 'YYYY-MM-DD hh24:MI:SS')
  679. // FROM ALL_OBJECTS
  680. // WHERE ROWNUM <= 1440 / 1;
  681. res = sqlite3_get_table(db, select_sql, &pResult, &nrow, &ncolumn, &err_msg);
  682. if(res != SQLITE_OK)
  683. {
  684. log_e("sqlite handle error.");
  685. return -1 ;
  686. }
  687. if(nrow==0)
  688. {
  689. log_e("sqlite search no data.");
  690. return -1 ;
  691. }
  692. int nCount=1;
  693. if (nrow<=TOTAL_COUNT)
  694. {
  695. nCount=nrow;
  696. }
  697. else nCount=TOTAL_COUNT;
  698. // char data_time_str[32]={0};
  699. for(int i=0;i < nCount; i++)
  700. {
  701. _globalPowerInfo ->_power_trend_info.ydata[POWER_MERITORIOUS_TYPE][i] = atof(pResult[(nCount-i)*ncolumn+6]);
  702. _globalPowerInfo ->_power_trend_info.ydata[POWER_REACTIVE_TYPE][i] =atof(pResult[(nCount-i)*ncolumn+6])*atof(pResult[(nCount-i)*ncolumn+9]) - atof(pResult[(nCount-i)*ncolumn+6]);
  703. _globalPowerInfo ->_power_trend_info.ydata[POWER_APPARENT_TYPE][i] = atof(pResult[(nCount-i)*ncolumn+6])*atof(pResult[(nCount-i)*ncolumn+9]);
  704. strcpy(_globalPowerInfo ->_power_trend_info.xAxis[i],pResult[(nCount-i)*ncolumn+0]);
  705. #if DEBUG_TEST
  706. sprintf(data_time_str,"2023-01-23:%d",i+4);
  707. strcpy(&_globalPowerInfo ->_power_trend_info.xAxis[i][0],data_time_str);
  708. _globalPowerInfo ->_power_trend_info.ydata[POWER_MERITORIOUS_TYPE][i] = i+1.5;
  709. _globalPowerInfo ->_power_trend_info.ydata[POWER_REACTIVE_TYPE][i] = i+2;
  710. _globalPowerInfo ->_power_trend_info.ydata[POWER_APPARENT_TYPE][i] = i+2.5;
  711. #endif
  712. }
  713. sqlite3_free_table(pResult);
  714. return 0;
  715. }
  716. /// @brief 查询电源监控信息表 查询条件 时间与ID号
  717. /// @param db
  718. /// @param product_id 查询产品ID号
  719. /// @param start_time 查询起始时间
  720. /// @param stop_time 查询结束时间
  721. /// @param size 查询数据个数
  722. /// @param _globalPowerInfo 返回信息
  723. /// @return
  724. int dev_search_power_info(sqlite3 *db,
  725. int product_id,
  726. int product_ch_id,
  727. char* start_time,
  728. char* stop_time,
  729. int page,
  730. int pageSize,
  731. int* size,
  732. GlobalPowerInfo* _globalPowerInfo)
  733. {
  734. //按时间段查询语句
  735. //SELECT* FROM Table_PowerInfo WHERE product_id=product_id AND (product_samp_time BETWEEN 'start_time' AND 'stop_time');
  736. int res ;
  737. char select_sql[512] = {0};
  738. // char *errorMsg = NULL;
  739. int nrow = 0; //满足条件的记录数目
  740. int ncolumn = 0; //每条记录包含的字段数据
  741. char** pResult = NULL; //用来指向sql执行结果的指针
  742. char* err_msg=NULL;
  743. sprintf(select_sql,"SELECT* FROM Table_PowerInfo WHERE (product_id=%d AND product_ch_id=%d) AND (product_samp_time BETWEEN '%s' AND '%s') LIMIT %d OFFSET %d;",
  744. product_id,
  745. product_ch_id,
  746. start_time,
  747. stop_time,
  748. pageSize,
  749. page);
  750. res = sqlite3_get_table(db, select_sql, &pResult, &nrow, &ncolumn, &err_msg);
  751. if(res != SQLITE_OK)
  752. return -1 ;
  753. if(nrow==0)
  754. return -1 ;
  755. //log_d(select_sql);
  756. //log_d("total_num: %d", nrow-1);
  757. //初始化头
  758. // int k = 0 ;
  759. for (size_t i = 1; i < nrow + 1; i++)
  760. {
  761. GlobalPowerInfo* _globalPowerInfoTemp = (GlobalPowerInfo*)malloc(sizeof(GlobalPowerInfo));
  762. if(_globalPowerInfoTemp==NULL)
  763. return -1 ;
  764. strcpy(_globalPowerInfoTemp->samp_time,pResult[i*ncolumn+0]);//i=0 10
  765. _globalPowerInfoTemp->product_id = atoi(pResult[i*ncolumn+1]);
  766. _globalPowerInfoTemp->product_ch_id = atoi(pResult[i*ncolumn+2]);
  767. _globalPowerInfoTemp->product_status = atoi(pResult[i*ncolumn+3]);
  768. _globalPowerInfoTemp->_power_info.voltage = atof(pResult[i*ncolumn+4]);
  769. _globalPowerInfoTemp->_power_info.current = atof(pResult[i*ncolumn+5]);
  770. _globalPowerInfoTemp->_power_info.power = atof(pResult[i*ncolumn+6]);
  771. _globalPowerInfoTemp->_power_info.freq = atof(pResult[i*ncolumn+7]);
  772. _globalPowerInfoTemp->_power_info.consumption = atof(pResult[i*ncolumn+8]);
  773. _globalPowerInfoTemp->_power_info.factor = atof(pResult[i*ncolumn+9]);
  774. //尾部插入
  775. list_add_tail(&_globalPowerInfoTemp->list, &_globalPowerInfo->list);
  776. }
  777. *size = nrow;
  778. sqlite3_free_table(pResult);
  779. return 0;
  780. }
  781. /// @brief 添加通道管理信息
  782. /// @param db
  783. /// @param product_id
  784. /// @param product_ch_id
  785. /// @param _globalPowerChnManger
  786. /// @return
  787. int dev_insert_power_manage_info(sqlite3 *db,int product_id,int product_ch_id,GlobalPowerManger* _globalPowerChnManger)
  788. {
  789. int res ;
  790. char select_sql[512] = {0};
  791. // char *errorMsg = NULL;
  792. int nrow = 0; //满足条件的记录数目
  793. int ncolumn = 0; //每条记录包含的字段数据
  794. char** pResult = NULL; //用来指向sql执行结果的指针
  795. char* err_msg=NULL;
  796. sprintf(select_sql,"INSERT INTO Table_PowerManage VALUES (%d,%d,'%s',%d,%d,%d,%d,%d,%.2f,%d,%d,%d,%.2f,%d,%d,%d,%.2f,%d,%d,%d,%.2f,%d,%d,%d,%.2f,%d,%d,%d,%d);",
  797. _globalPowerChnManger->product_id,
  798. _globalPowerChnManger->product_ch_id,
  799. _globalPowerChnManger->product_ch_name,
  800. _globalPowerChnManger->product_ch_type,
  801. _globalPowerChnManger->product_ch_status,
  802. _globalPowerChnManger->product_ch_start_delay,
  803. _globalPowerChnManger->product_ch_stop_delay,
  804. _globalPowerChnManger->global_over_manager->product_vol_upper_enable,
  805. _globalPowerChnManger->global_over_manager->product_vol_upper_threshold,
  806. _globalPowerChnManger->global_over_manager->product_vol_over_upper_threshold_ctrl,
  807. _globalPowerChnManger->global_over_manager->product_vol_over_upper_threshold_ctrl_para,
  808. _globalPowerChnManger->global_over_manager->product_vol_lower_enable,
  809. _globalPowerChnManger->global_over_manager->product_vol_lower_threshold,
  810. _globalPowerChnManger->global_over_manager->product_vol_over_lower_threshold_ctrl,
  811. _globalPowerChnManger->global_over_manager->product_vol_over_lower_threshold_ctrl_para,
  812. _globalPowerChnManger->global_over_manager->product_cur_upper_enable,
  813. _globalPowerChnManger->global_over_manager->product_cur_upper_threshold,
  814. _globalPowerChnManger->global_over_manager->product_cur_over_upper_threshold_ctrl,
  815. _globalPowerChnManger->global_over_manager->product_cur_over_upper_threshold_ctrl_para,
  816. _globalPowerChnManger->global_over_manager->product_pwr_upper_enable,
  817. _globalPowerChnManger->global_over_manager->product_pwr_upper_threshold,
  818. _globalPowerChnManger->global_over_manager->product_pwr_over_upper_threshold_ctrl,
  819. _globalPowerChnManger->global_over_manager->product_pwr_over_upper_threshold_ctrl_para,
  820. _globalPowerChnManger->global_over_manager->product_pwrcon_upper_enable,
  821. _globalPowerChnManger->global_over_manager->product_pwrcon_upper_threshold,
  822. _globalPowerChnManger->global_over_manager->product_pwrcon_over_upper_threshold_ctrl,
  823. _globalPowerChnManger->global_over_manager->product_pwrcon_over_upper_threshold_ctrl_para,
  824. _globalPowerChnManger->product_saddr,
  825. _globalPowerChnManger->product_ch_addr
  826. );
  827. printf("select_sql:%s\n",select_sql);
  828. res = sqlite3_get_table(db, select_sql, &pResult, &nrow, &ncolumn, &err_msg);
  829. if(res != SQLITE_OK)
  830. return -1 ;
  831. sqlite3_free_table(pResult);
  832. return 0;
  833. }
  834. /// @brief 查询电源通道管理信息
  835. /// @param db
  836. /// @param product_id
  837. /// @param _globalPowerManger
  838. /// @return
  839. int dev_get_power_manage_info(sqlite3 *db,int product_id,int product_addr,int product_ch_id,GlobalPowerManger* _globalPowerChnManger)
  840. {
  841. int res = 0 ;
  842. int rowIndex = 1 ;
  843. // char *errorMsg = NULL;
  844. int nrow = 0; //满足条件的记录数目
  845. int ncolumn = 0; //每条记录包含的字段数据
  846. char** pResult = NULL; //用来指向sql执行结果的指针
  847. char* err_msg=NULL;
  848. char select_sql[256] = {0};
  849. sprintf(select_sql,"SELECT* FROM Table_PowerManage WHERE product_id=%d AND product_ch_addr_id=%d and product_ch_addr_ch_id=%d;",product_id,product_addr,product_ch_id);
  850. res = sqlite3_get_table(db, select_sql, &pResult, &nrow, &ncolumn, &err_msg);
  851. if(res != SQLITE_OK)
  852. return -2 ;
  853. //提取数据
  854. if(nrow==0)
  855. return -1 ;
  856. //获取产品ID
  857. _globalPowerChnManger->product_id = atoi(pResult[rowIndex*ncolumn+0]);
  858. //获取产品ID
  859. _globalPowerChnManger->product_ch_id = atoi(pResult[rowIndex*ncolumn+1]);
  860. //获取通道名称
  861. strcpy(_globalPowerChnManger->product_ch_name,pResult[rowIndex*ncolumn+2]);
  862. //获取通道类型
  863. _globalPowerChnManger->product_ch_type = atoi(pResult[rowIndex*ncolumn+3]);
  864. //获取通道状态
  865. _globalPowerChnManger->product_ch_status = atoi(pResult[rowIndex*ncolumn+4]);
  866. //获取通道延时
  867. _globalPowerChnManger->product_ch_start_delay = atoi(pResult[rowIndex*ncolumn+5]);
  868. //获取通道延时
  869. _globalPowerChnManger->product_ch_stop_delay = atoi(pResult[rowIndex*ncolumn+6]);
  870. if (_globalPowerChnManger->_PowerSXManage == NULL) _globalPowerChnManger->_PowerSXManage = (_PowerSXManage_t*)malloc(sizeof(_PowerSXManage_t));
  871. if (__globalSxIdx >= pow(2, 32)) __globalSxIdx = 0;
  872. _globalPowerChnManger->_PowerSXManage->firingSortno = __globalSxIdx++;
  873. _globalPowerChnManger->_PowerSXManage->closeSortno = __globalSxIdx++;
  874. //获取电压超上限使能
  875. _globalPowerChnManger->global_over_manager->product_vol_upper_enable = atoi(pResult[rowIndex*ncolumn+7]);
  876. //获取电压上限范围
  877. _globalPowerChnManger->global_over_manager->product_vol_upper_threshold = atof(pResult[rowIndex*ncolumn+8]);
  878. //获取电压上限超限动作
  879. _globalPowerChnManger->global_over_manager->product_vol_over_upper_threshold_ctrl = atoi(pResult[rowIndex*ncolumn+9]);
  880. //获取电压上限超限关联参数
  881. _globalPowerChnManger->global_over_manager->product_vol_over_upper_threshold_ctrl_para = atoi(pResult[rowIndex*ncolumn+10]);
  882. //获取电压超下限使能
  883. _globalPowerChnManger->global_over_manager->product_vol_lower_enable = atoi(pResult[rowIndex*ncolumn+11]);
  884. //获取电压下限范围
  885. _globalPowerChnManger->global_over_manager->product_vol_lower_threshold = atof(pResult[rowIndex*ncolumn+12]);
  886. //获取电压下限超限动作
  887. _globalPowerChnManger->global_over_manager->product_vol_over_lower_threshold_ctrl = atoi(pResult[rowIndex*ncolumn+13]);
  888. //超限关联参数
  889. _globalPowerChnManger->global_over_manager->product_vol_over_lower_threshold_ctrl_para = atoi(pResult[rowIndex*ncolumn+14]);
  890. //获取电流超上限使能
  891. _globalPowerChnManger->global_over_manager->product_cur_upper_enable = atoi(pResult[rowIndex*ncolumn+15]);
  892. //获取电流上限范围
  893. _globalPowerChnManger->global_over_manager->product_cur_upper_threshold = atof(pResult[rowIndex*ncolumn+16]);
  894. //获取电流上限超限动作
  895. _globalPowerChnManger->global_over_manager->product_cur_over_upper_threshold_ctrl = atoi(pResult[rowIndex*ncolumn+17]);
  896. //超限关联参数
  897. _globalPowerChnManger->global_over_manager->product_cur_over_upper_threshold_ctrl_para = atoi(pResult[rowIndex*ncolumn+18]);
  898. //获取功耗超上限使能
  899. _globalPowerChnManger->global_over_manager->product_pwr_upper_enable = atoi(pResult[rowIndex*ncolumn+19]);
  900. //获取功耗上限范围
  901. _globalPowerChnManger->global_over_manager->product_pwr_upper_threshold = atof(pResult[rowIndex*ncolumn+20]);
  902. //获取功耗上限超限动作
  903. _globalPowerChnManger->global_over_manager->product_pwr_over_upper_threshold_ctrl = atoi(pResult[rowIndex*ncolumn+21]);
  904. //超限关联参数
  905. _globalPowerChnManger->global_over_manager->product_pwr_over_upper_threshold_ctrl_para = atoi(pResult[rowIndex*ncolumn+22]);
  906. //获取耗电量超上限使能
  907. _globalPowerChnManger->global_over_manager->product_pwrcon_upper_enable = atoi(pResult[rowIndex*ncolumn+23]);
  908. //获取耗电量上限范围
  909. _globalPowerChnManger->global_over_manager->product_pwrcon_upper_threshold = atof(pResult[rowIndex*ncolumn+24]);
  910. //获取耗电量上限超限动作
  911. _globalPowerChnManger->global_over_manager->product_pwrcon_over_upper_threshold_ctrl = atoi(pResult[rowIndex*ncolumn+25]);
  912. //超限关联参数
  913. _globalPowerChnManger->global_over_manager->product_pwrcon_over_upper_threshold_ctrl_para = atoi(pResult[rowIndex*ncolumn+26]);
  914. //获取板ID
  915. _globalPowerChnManger->product_saddr = atoi(pResult[rowIndex*ncolumn+27]);
  916. //获取板TYPE
  917. _globalPowerChnManger->product_ch_addr = atoi(pResult[rowIndex*ncolumn+28]);
  918. sqlite3_free_table(pResult);
  919. return 0;
  920. }
  921. /// @brief 更新通道基本管理信息
  922. /// @param db
  923. /// @param product_id
  924. /// @param _globalPowerManger
  925. /// @return
  926. int dev_update_power_manage_genera_info(sqlite3 *db,int product_id,int product_ch_id,GlobalPowerManger* _globalPowerChnManger)
  927. {
  928. int res = 0 ;
  929. // int rowIndex = 1 ;
  930. // char *errorMsg = NULL;
  931. int nrow = 0; //满足条件的记录数目
  932. int ncolumn = 0; //每条记录包含的字段数据
  933. char** pResult = NULL; //用来指向sql执行结果的指针
  934. char* err_msg=NULL;
  935. char select_sql[1024] = {0};
  936. sprintf(select_sql,"UPDATE Table_PowerManage SET product_id=%d,product_ch_id=%d,product_ch_name='%s',product_ch_type=%d,product_ch_status=%d,product_ch_start_delay=%d,product_ch_stop_delay=%d WHERE product_id=%d AND product_ch_id=%d;",
  937. _globalPowerChnManger->product_id,
  938. _globalPowerChnManger->product_ch_id,
  939. _globalPowerChnManger->product_ch_name,
  940. _globalPowerChnManger->product_ch_type,
  941. _globalPowerChnManger->product_ch_status,
  942. _globalPowerChnManger->product_ch_start_delay,
  943. _globalPowerChnManger->product_ch_stop_delay,
  944. product_id,
  945. product_ch_id);
  946. res = sqlite3_get_table(db, select_sql, &pResult, &nrow, &ncolumn, &err_msg);
  947. if(res != SQLITE_OK)
  948. {
  949. return -1 ;
  950. }
  951. sqlite3_free_table(pResult);
  952. return 0 ;
  953. }
  954. /// @brief 更新超限信息
  955. /// @param db
  956. /// @param product_id
  957. /// @param product_ch_id
  958. /// @param _globalPowerChnManger
  959. /// @return
  960. int dev_update_power_manage_over_info(sqlite3 *db,int product_id,int product_ch_id,GlobalPowerManger* _globalPowerChnManger)
  961. {
  962. int res = 0 ;
  963. // int rowIndex = 1 ;
  964. // char *errorMsg = NULL;
  965. int nrow = 0; //满足条件的记录数目
  966. int ncolumn = 0; //每条记录包含的字段数据
  967. char** pResult = NULL; //用来指向sql执行结果的指针
  968. char* err_msg=NULL;
  969. char select_sql[1024] = {0};
  970. sprintf(select_sql,"UPDATE Table_PowerManage SET product_vol_u_enable=%d,product_vol_u_threshold=%0.2f,product_vol_over_u_threshold_ctrl=%d,product_vol_over_u_threshold_para=%d,product_vol_l_enable=%d,product_vol_l_threshold=%0.2f,product_vol_over_l_threshold_ctrl=%d,product_vol_over_l_threshold_para=%d,product_cur_u_enable=%d,product_cur_u_threshold=%0.2f,product_cur_over_u_threshold_ctrl=%d,product_cur_over_u_threshold_para=%d,product_pwr_u_enable=%d,product_pwr_u_threshold=%0.2f,product_pwr_over_u_threshold_ctrl=%d,product_pwr_over_u_threshold_para=%d,product_pwrcon_u_enable=%d,product_pwrcon_u_threshold=%0.2f,product_pwrcon_over_u_threshold_ctrl=%d,product_pwrcon_over_u_threshold_para=%d WHERE product_id=%d AND product_ch_id=%d;",
  971. _globalPowerChnManger->global_over_manager->product_vol_upper_enable,
  972. _globalPowerChnManger->global_over_manager->product_vol_upper_threshold,
  973. _globalPowerChnManger->global_over_manager->product_vol_over_upper_threshold_ctrl,
  974. _globalPowerChnManger->global_over_manager->product_vol_over_upper_threshold_ctrl_para,
  975. _globalPowerChnManger->global_over_manager->product_vol_lower_enable,
  976. _globalPowerChnManger->global_over_manager->product_vol_lower_threshold,
  977. _globalPowerChnManger->global_over_manager->product_vol_over_lower_threshold_ctrl,
  978. _globalPowerChnManger->global_over_manager->product_vol_over_lower_threshold_ctrl_para,
  979. _globalPowerChnManger->global_over_manager->product_cur_upper_enable,
  980. _globalPowerChnManger->global_over_manager->product_cur_upper_threshold,
  981. _globalPowerChnManger->global_over_manager->product_cur_over_upper_threshold_ctrl,
  982. _globalPowerChnManger->global_over_manager->product_cur_over_upper_threshold_ctrl_para,
  983. _globalPowerChnManger->global_over_manager->product_pwr_upper_enable,
  984. _globalPowerChnManger->global_over_manager->product_pwr_upper_threshold,
  985. _globalPowerChnManger->global_over_manager->product_pwr_over_upper_threshold_ctrl,
  986. _globalPowerChnManger->global_over_manager->product_pwr_over_upper_threshold_ctrl_para,
  987. _globalPowerChnManger->global_over_manager->product_pwrcon_upper_enable,
  988. _globalPowerChnManger->global_over_manager->product_pwrcon_upper_threshold,
  989. _globalPowerChnManger->global_over_manager->product_pwrcon_over_upper_threshold_ctrl,
  990. _globalPowerChnManger->global_over_manager->product_pwrcon_over_upper_threshold_ctrl_para,
  991. product_id,
  992. product_ch_id);
  993. // log_i(select_sql);
  994. printf("%s\n",select_sql);
  995. res = sqlite3_get_table(db, select_sql, &pResult, &nrow, &ncolumn, &err_msg);
  996. if(res != SQLITE_OK)
  997. return -1 ;
  998. sqlite3_free_table(pResult);
  999. return 0 ;
  1000. }
  1001. /// @brief 获取传感器管理信息
  1002. /// @param db
  1003. /// @param product_id
  1004. /// @param _globalSensorManger
  1005. /// @return
  1006. int dev_get_sensor_manage_info(sqlite3 *db,int product_id,GlobalSensorManger* _globalSensorManger)
  1007. {
  1008. int res = 0 ;
  1009. // int rowIndex = 1 ;
  1010. // char *errorMsg = NULL;
  1011. int nrow = 0; //满足条件的记录数目
  1012. int ncolumn = 0; //每条记录包含的字段数据
  1013. char** pResult = NULL; //用来指向sql执行结果的指针
  1014. char* err_msg=NULL;
  1015. char select_sql[1024] = {0};
  1016. //GlobalSensorManger* _globalSensorMangerTemp = NULL;
  1017. sprintf(select_sql,"SELECT* FROM Table_SensorManage WHERE product_id=%d;",product_id);
  1018. printf("product_id =%d\n",product_id);
  1019. res = sqlite3_get_table(db, select_sql, &pResult, &nrow, &ncolumn, &err_msg);
  1020. if(res != SQLITE_OK)
  1021. return -2 ;
  1022. //提取数据
  1023. if(nrow==0)
  1024. return -1 ;
  1025. for (size_t i = 1; i <= nrow; i++)
  1026. {
  1027. GlobalSensorManger* _globalSensorMangerTemp = (GlobalSensorManger*)malloc(sizeof(GlobalSensorManger));
  1028. if(_globalSensorMangerTemp==NULL)
  1029. return -1 ;
  1030. _globalSensorMangerTemp->over_manager = (GlobalSensorOverManage*)malloc(sizeof(GlobalSensorOverManage));
  1031. if(_globalSensorMangerTemp->over_manager==NULL)
  1032. return -1 ;
  1033. _globalSensorMangerTemp->product_id = atoi(pResult[i*ncolumn+0]);
  1034. _globalSensorMangerTemp->sensor_id = atoi(pResult[i*ncolumn+1]);
  1035. _globalSensorMangerTemp->sensor_type = atoi(pResult[i*ncolumn+2]);
  1036. _globalSensorMangerTemp->sensor_interface_type = atoi(pResult[i*ncolumn+3]);
  1037. strcpy(_globalSensorMangerTemp->sensor_name,pResult[i*ncolumn+4]);
  1038. strcpy(_globalSensorMangerTemp->sensor_port_name,pResult[i*ncolumn+5]);
  1039. if( _globalSensorMangerTemp->sensor_interface_type==1)
  1040. {
  1041. _globalSensorMangerTemp->sensor_baud = atoi(pResult[i*ncolumn+6]);
  1042. _globalSensorMangerTemp->sensor_addr = atoi(pResult[i*ncolumn+7]);
  1043. }
  1044. else
  1045. {
  1046. _globalSensorMangerTemp->sensor_baud = 0 ;
  1047. _globalSensorMangerTemp->sensor_addr = 0 ;
  1048. }
  1049. _globalSensorMangerTemp->sensor_status = 1;//atoi(pResult[i*ncolumn+8]);
  1050. _globalSensorMangerTemp->sensor_val_count = atoi(pResult[i*ncolumn+9]);
  1051. //记录超限信息
  1052. _globalSensorMangerTemp->over_manager->sensor_val1_upper_enabled = atoi(pResult[i*ncolumn+10]);
  1053. _globalSensorMangerTemp->over_manager->sensor_val1_upper_threshold = atof(pResult[i*ncolumn+11]);
  1054. _globalSensorMangerTemp->over_manager->sensor_val1_upper_threshold_ctrl = atoi(pResult[i*ncolumn+12]);
  1055. _globalSensorMangerTemp->over_manager->sensor_val1_upper_threshold_ctrl_para = atoi(pResult[i*ncolumn+13]);
  1056. _globalSensorMangerTemp->over_manager->sensor_val1_lower_enabled = atoi(pResult[i*ncolumn+14]);
  1057. _globalSensorMangerTemp->over_manager->sensor_val1_lower_threshold = atof(pResult[i*ncolumn+15]);
  1058. _globalSensorMangerTemp->over_manager->sensor_val1_lower_threshold_ctrl = atoi(pResult[i*ncolumn+16]);
  1059. _globalSensorMangerTemp->over_manager->sensor_val1_lower_threshold_ctrl_para = atoi(pResult[i*ncolumn+17]);
  1060. _globalSensorMangerTemp->over_manager->sensor_val2_upper_enabled = atoi(pResult[i*ncolumn+18]);
  1061. _globalSensorMangerTemp->over_manager->sensor_val2_upper_threshold = atof(pResult[i*ncolumn+19]);
  1062. _globalSensorMangerTemp->over_manager->sensor_val2_upper_threshold_ctrl = atoi(pResult[i*ncolumn+20]);
  1063. _globalSensorMangerTemp->over_manager->sensor_val2_upper_threshold_ctrl_para = atoi(pResult[i*ncolumn+21]);
  1064. _globalSensorMangerTemp->over_manager->sensor_val2_lower_enabled = atoi(pResult[i*ncolumn+22]);
  1065. _globalSensorMangerTemp->over_manager->sensor_val2_lower_threshold = atof(pResult[i*ncolumn+23]);
  1066. _globalSensorMangerTemp->over_manager->sensor_val2_lower_threshold_ctrl = atoi(pResult[i*ncolumn+24]);
  1067. _globalSensorMangerTemp->over_manager->sensor_val2_lower_threshold_ctrl_para = atoi(pResult[i*ncolumn+25]);
  1068. //尾部插入
  1069. list_add_tail(&_globalSensorMangerTemp->list, &_globalSensorManger->list);
  1070. }
  1071. sqlite3_free_table(pResult);
  1072. return 0 ;
  1073. }
  1074. /// @brief 插入一条传感器值
  1075. /// @param db
  1076. /// @param _globalSensorInfo
  1077. /// @return
  1078. int dev_insert_sensor_info(sqlite3 *db,GlobalSensorInfo* _globalSensorInfo,int *nIndex)
  1079. {
  1080. int res ;
  1081. char select_sql[256] = {0};
  1082. // char *errorMsg = NULL;
  1083. int nrow = 0; //满足条件的记录数目
  1084. int ncolumn = 0; //每条记录包含的字段数据
  1085. char** pResult = NULL; //用来指向sql执行结果的指针
  1086. char* err_msg=NULL;
  1087. sprintf(select_sql,"INSERT INTO Table_SensorInfo VALUES (%d,'%s',%d,%d,%.2f,%.2f);",
  1088. *nIndex,
  1089. _globalSensorInfo->samp_time,
  1090. _globalSensorInfo->product_id,
  1091. _globalSensorInfo->sensor_id,
  1092. _globalSensorInfo->val1,
  1093. _globalSensorInfo->val2);
  1094. res = sqlite3_get_table(db, select_sql, &pResult, &nrow, &ncolumn, &err_msg);
  1095. if(res != SQLITE_OK)
  1096. {
  1097. printf("errmsg = %s %s\n",err_msg,select_sql);
  1098. return -1 ;
  1099. }
  1100. sqlite3_free_table(pResult);
  1101. *nIndex+=1;
  1102. return 0;
  1103. }
  1104. /// @brief 返回传感器的最新值
  1105. /// @param db
  1106. /// @param product_id
  1107. /// @param sensor_id
  1108. /// @param sensor_type
  1109. /// @param _globalSensorInfo
  1110. /// @return
  1111. int dev_serach_latest_sensor_info(sqlite3 *db,int product_id,int sensor_id,GlobalSensorInfo* _globalSensorInfo)
  1112. {
  1113. int res ;
  1114. char select_sql[256] = {0};
  1115. // char *errorMsg = NULL;
  1116. int nrow = 1; //满足条件的记录数目
  1117. int ncolumn = 1; //每条记录包含的字段数据
  1118. char** pResult = NULL; //用来指向sql执行结果的指针
  1119. char* err_msg=NULL;
  1120. sprintf(select_sql,"SELECT * FROM Table_SensorInfo WHERE product_id=%d AND sensor_id=%d ORDER BY sensor_samp_time DESC LIMIT 1;",
  1121. product_id,
  1122. sensor_id);
  1123. //log_d(select_sql);
  1124. res = sqlite3_get_table(db, select_sql, &pResult, &nrow, &ncolumn, &err_msg);
  1125. if(res != SQLITE_OK)
  1126. {
  1127. log_e("sqlite handle error.");
  1128. return -1 ;
  1129. }
  1130. if(nrow==0)
  1131. {
  1132. log_e("sqlite search no data.");
  1133. return -1 ;
  1134. }
  1135. printf("nrow = %d ncolumen = %d\n",nrow,ncolumn);
  1136. strcpy(_globalSensorInfo->samp_time,pResult[nrow*ncolumn+1]);
  1137. _globalSensorInfo->product_id = atoi(pResult[nrow*ncolumn+2]);
  1138. _globalSensorInfo->sensor_id = atoi(pResult[nrow*ncolumn+3]);
  1139. _globalSensorInfo->val1 = atof(pResult[nrow*ncolumn+4]);
  1140. _globalSensorInfo->val2 = atof(pResult[nrow*ncolumn+5]);
  1141. sqlite3_free_table(pResult);
  1142. return 0;
  1143. }
  1144. /// @brief 查询传感器信息
  1145. /// @param db
  1146. /// @param product_id
  1147. /// @param sensor_id
  1148. /// @param start_time
  1149. /// @param stop_time
  1150. /// @param size
  1151. /// @param _globalSensorInfo
  1152. /// @return
  1153. int dev_search_sensor_info(sqlite3 *db,
  1154. int product_id,
  1155. int sensor_id,
  1156. char* start_time,
  1157. char* stop_time,
  1158. int pageNum,
  1159. int pageSize,
  1160. int* size,
  1161. GlobalSensorInfo* _globalSensorInfo)
  1162. {
  1163. //按时间段查询语句
  1164. //SELECT* FROM Table_PowerInfo WHERE product_id=product_id AND (product_samp_time BETWEEN 'start_time' AND 'stop_time');
  1165. int res ;
  1166. char select_sql[256] = {0};
  1167. // char *errorMsg = NULL;
  1168. int nrow = 0; //满足条件的记录数目
  1169. int ncolumn = 0; //每条记录包含的字段数据
  1170. char** pResult = NULL; //用来指向sql执行结果的指针
  1171. char* err_msg=NULL;
  1172. sprintf(select_sql,"SELECT* FROM Table_SensorInfo WHERE (product_id=%d) AND (sensor_id=%d) AND (sensor_samp_time BETWEEN '%s' AND '%s') LIMIT %d OFFSET %d;",
  1173. product_id,
  1174. sensor_id,
  1175. start_time,
  1176. stop_time,
  1177. pageSize,
  1178. pageNum);
  1179. log_d(select_sql);
  1180. res = sqlite3_get_table(db, select_sql, &pResult, &nrow, &ncolumn, &err_msg);
  1181. if(res != SQLITE_OK)
  1182. return -1 ;
  1183. if(nrow==0)
  1184. return -1 ;
  1185. //初始化头
  1186. //GlobalSensorInfo* _temp = _globalSensorInfo;
  1187. for (size_t i = 1; i <= nrow; i++)
  1188. {
  1189. GlobalSensorInfo* _globalSensorInfoTemp = (GlobalSensorInfo*)malloc(sizeof(GlobalSensorInfo));
  1190. if(_globalSensorInfoTemp==NULL)
  1191. return -1 ;
  1192. strcpy(_globalSensorInfoTemp->samp_time,pResult[i*ncolumn+2]);
  1193. _globalSensorInfoTemp->product_id = atoi(pResult[i*ncolumn+3]);
  1194. _globalSensorInfoTemp->sensor_id = atoi(pResult[i*ncolumn+4]);
  1195. if(pResult[i*ncolumn+5]!=NULL)
  1196. _globalSensorInfoTemp->val1 = atof(pResult[i*ncolumn+5]);
  1197. if(pResult[i*ncolumn+6]!=NULL)
  1198. _globalSensorInfoTemp->val2 = atof(pResult[i*ncolumn+6]);
  1199. //尾部插入
  1200. list_add_tail(&_globalSensorInfoTemp->list, &_globalSensorInfo->list);
  1201. }
  1202. sqlite3_free_table(pResult);
  1203. return 0;
  1204. }
  1205. /// @brief 删除一条传感器信息
  1206. /// @param db
  1207. /// @param product_id
  1208. /// @param sensor_id
  1209. /// @return
  1210. int dev_delete_sensor_manage(sqlite3 *db,int product_id,int sensor_id)
  1211. {
  1212. int res ;
  1213. char select_sql[256] = {0};
  1214. // char *errorMsg = NULL;
  1215. int nrow = 0; //满足条件的记录数目
  1216. int ncolumn = 0; //每条记录包含的字段数据
  1217. char** pResult = NULL; //用来指向sql执行结果的指针
  1218. char* err_msg=NULL;
  1219. sprintf(select_sql,"DELETE FROM Table_SensorManage WHERE product_id=%d AND sensor_id=%d;",
  1220. product_id,
  1221. sensor_id
  1222. );
  1223. res = sqlite3_get_table(db, select_sql, &pResult, &nrow, &ncolumn, &err_msg);
  1224. if(res != SQLITE_OK)
  1225. return -1 ;
  1226. sqlite3_free_table(pResult);
  1227. return 0;
  1228. }
  1229. /// @brief 插入一条传感器管理信息
  1230. /// @param db
  1231. /// @param _globalSensorManger
  1232. /// @return
  1233. int dev_insert_sensor_genera_manage(sqlite3 *db,GlobalSensorManger* _globalSensorManger)
  1234. {
  1235. int res ;
  1236. char select_sql[1024] = {0};
  1237. // char *errorMsg = NULL;
  1238. int nrow = 0; //满足条件的记录数目
  1239. int ncolumn = 0; //每条记录包含的字段数据
  1240. char** pResult = NULL; //用来指向sql执行结果的指针
  1241. char* err_msg=NULL;
  1242. sprintf(select_sql,"INSERT INTO Table_SensorManage (product_id,sensor_type,sensor_interface_type,sensor_name,sensor_port_name,sensor_baud,sensor_addr,sensor_status,sensor_val_count,sensor_val1_u_enable,sensor_val1_u_threshold,sensor_val1_over_u_threshold_ctrl,sensor_val1_over_u_threshold_ctrl_para,sensor_val1_l_enable,sensor_val1_l_threshold,sensor_val1_over_l_threshold_ctrl,sensor_val1_over_l_threshold_ctrl_para,sensor_val2_u_enable,sensor_val2_u_threshold,sensor_val2_over_u_threshold_ctrl,sensor_val2_over_u_threshold_ctrl_para,sensor_val2_l_enable,sensor_val2_l_threshold,sensor_val2_over_l_threshold_ctrl,sensor_val2_over_l_threshold_ctrl_para) VALUES (%d,%d,%d,'%s','%s',%d,%d, %d,%d,%d,%0.2f,%d,%d,%d,%0.2f,%d,%d,%d,%0.2f,%d,%d,%d,%0.2f,%d,%d);",
  1243. _globalSensorManger->product_id,
  1244. // _globalSensorManger->sensor_id,
  1245. _globalSensorManger->sensor_type,
  1246. _globalSensorManger->sensor_interface_type,
  1247. _globalSensorManger->sensor_name,
  1248. _globalSensorManger->sensor_port_name,
  1249. _globalSensorManger->sensor_baud,
  1250. _globalSensorManger->sensor_addr,
  1251. _globalSensorManger->sensor_status,
  1252. _globalSensorManger->sensor_val_count,
  1253. 0,
  1254. 0.0,
  1255. 0,
  1256. 0,
  1257. 0,
  1258. 0.0,
  1259. 0,
  1260. 0,
  1261. 0,
  1262. 0.0,
  1263. 0,
  1264. 0,
  1265. 0,
  1266. 0.0,
  1267. 0,
  1268. 0);
  1269. log_d(select_sql);
  1270. res = sqlite3_get_table(db, select_sql, &pResult, &nrow, &ncolumn, &err_msg);
  1271. if(res != SQLITE_OK)
  1272. return -1 ;
  1273. sqlite3_free_table(pResult);
  1274. return 0;
  1275. }
  1276. /// @brief 更新传感器基本信息
  1277. /// @param db
  1278. /// @param product_id
  1279. /// @param sensor_id
  1280. /// @param _globalSensorManger
  1281. /// @return
  1282. int dev_update_sensor_genera_manage(sqlite3 *db,int product_id,int sensor_id,GlobalSensorManger* _globalSensorManger)
  1283. {
  1284. int res = 0 ;
  1285. // int rowIndex = 1 ;
  1286. // char *errorMsg = NULL;
  1287. int nrow = 0; //满足条件的记录数目
  1288. int ncolumn = 0; //每条记录包含的字段数据
  1289. char** pResult = NULL; //用来指向sql执行结果的指针
  1290. char* err_msg=NULL;
  1291. char select_sql[1024] = {0};
  1292. sprintf(select_sql,"UPDATE Table_SensorManage SET product_id=%d,sensor_id=%d,sensor_type=%d,sensor_interface_type=%d,sensor_name='%s',sensor_port_name='%s',sensor_baud=%d,sensor_addr=%d,sensor_status=%d,sensor_val_count=%d WHERE product_id=%d AND sensor_id=%d;",
  1293. _globalSensorManger->product_id,
  1294. _globalSensorManger->sensor_id,
  1295. _globalSensorManger->sensor_type,
  1296. _globalSensorManger->sensor_interface_type,
  1297. _globalSensorManger->sensor_name,
  1298. _globalSensorManger->sensor_port_name,
  1299. _globalSensorManger->sensor_baud,
  1300. _globalSensorManger->sensor_addr,
  1301. _globalSensorManger->sensor_status,
  1302. _globalSensorManger->sensor_val_count,
  1303. product_id,
  1304. sensor_id);
  1305. res = sqlite3_get_table(db, select_sql, &pResult, &nrow, &ncolumn, &err_msg);
  1306. if(res != SQLITE_OK)
  1307. return -1 ;
  1308. sqlite3_free_table(pResult);
  1309. return 0 ;
  1310. }
  1311. /// @brief 更新一条传感器超限信息
  1312. /// @param db
  1313. /// @param product_id
  1314. /// @param sensor_id
  1315. /// @param _globalSensorManger
  1316. /// @return
  1317. int dev_update_sensor_over_manage(sqlite3 *db,int product_id,int sensor_id,GlobalSensorManger* _globalSensorManger)
  1318. {
  1319. int res = 0 ;
  1320. // int rowIndex = 1 ;
  1321. // char *errorMsg = NULL;
  1322. int nrow = 0; //满足条件的记录数目
  1323. int ncolumn = 0; //每条记录包含的字段数据
  1324. char** pResult = NULL; //用来指向sql执行结果的指针
  1325. char* err_msg=NULL;
  1326. char select_sql[1024] = {0};
  1327. sprintf(select_sql,"UPDATE Table_SensorManage SET sensor_val1_u_enabled=%d,sensor_val1_u_threshold=%0.2f,sensor_val1_u_threshold_ctrl=%d,sensor_val1_u_threshold_ctrl_para=%d,sensor_val2_u_enabled=%d,sensor_val2_u_threshold=%0.2f,sensor_val2_u_threshold_ctrl=%d,sensor_val2_u_threshold_ctrl_para=%d WHERE product_id=%d AND product_ch_id=%d;",
  1328. _globalSensorManger->over_manager->sensor_val1_upper_enabled,
  1329. _globalSensorManger->over_manager->sensor_val1_upper_threshold,
  1330. _globalSensorManger->over_manager->sensor_val1_upper_threshold_ctrl,
  1331. _globalSensorManger->over_manager->sensor_val1_upper_threshold_ctrl_para,
  1332. _globalSensorManger->over_manager->sensor_val2_upper_enabled,
  1333. _globalSensorManger->over_manager->sensor_val2_upper_threshold,
  1334. _globalSensorManger->over_manager->sensor_val2_upper_threshold_ctrl,
  1335. _globalSensorManger->over_manager->sensor_val2_upper_threshold_ctrl_para,
  1336. product_id,
  1337. sensor_id);
  1338. res = sqlite3_get_table(db, select_sql, &pResult, &nrow, &ncolumn, &err_msg);
  1339. if(res != SQLITE_OK)
  1340. return -1 ;
  1341. sqlite3_free_table(pResult);
  1342. return 0 ;
  1343. }
  1344. /// @brief 插入一条告警信息
  1345. /// @param db
  1346. /// @param product_id
  1347. /// @param alarm_type
  1348. /// @param alarm_content
  1349. /// @return
  1350. int dev_insert_alarm_info(sqlite3* db,int product_id,int alarm_type,char* date_time,char* alarm_content)
  1351. {
  1352. int res = 0 ;
  1353. // int rowIndex = 1 ;
  1354. // char *errorMsg = NULL;
  1355. int nrow = 0; //满足条件的记录数目
  1356. int ncolumn = 0; //每条记录包含的字段数据
  1357. char** pResult = NULL; //用来指向sql执行结果的指针
  1358. char* err_msg=NULL;
  1359. char select_sql[1024] = {0};
  1360. sprintf(select_sql,"INSERT INTO Table_AlarmManage (alarmDate,alarmType,product_id,alarmContent) VALUES ('%s',%d,%d,'%s');",
  1361. date_time,
  1362. alarm_type,
  1363. product_id,
  1364. alarm_content);
  1365. res = sqlite3_get_table(db, select_sql, &pResult, &nrow, &ncolumn, &err_msg);
  1366. if(res != SQLITE_OK)
  1367. return -1 ;
  1368. sqlite3_free_table(pResult);
  1369. return 0;
  1370. }
  1371. /// @brief 查询电源 传感器以及网络告警信息
  1372. /// @param db
  1373. /// @param product_id
  1374. /// @param alarm_type
  1375. /// @param _alarm_ack_info
  1376. /// @return
  1377. #if 0
  1378. int dev_serarch_all_alarm(sqlite3* db,
  1379. int product_id,
  1380. int alarm_type,
  1381. int page_num,
  1382. int page_size,
  1383. _AlarmAckInfo* _alarm_ack_info,int* nAlarmSum)
  1384. {
  1385. int res = 0 ;
  1386. // int rowIndex = 1 ;
  1387. // char *errorMsg = NULL;
  1388. int nrow = 0; //满足条件的记录数目
  1389. int ncolumn = 0; //每条记录包含的字段数据
  1390. char** pResult = NULL; //用来指向sql执行结果的指针
  1391. char* err_msg=NULL;
  1392. char select_sql[1024] = {0};
  1393. //查询告警总数
  1394. if (alarm_type<0)//小于0加载所有的
  1395. {
  1396. snprintf(select_sql,sizeof(select_sql),"SELECT count (*) FROM Table_AlarmManage);");
  1397. }else{
  1398. snprintf(select_sql,sizeof(select_sql),"SELECT count (*) FROM Table_AlarmManage where (alarmType=%d) ;",alarm_type);
  1399. }
  1400. res = sqlite3_get_table(db, select_sql, &pResult, &nrow, &ncolumn, &err_msg);
  1401. if(res != SQLITE_OK)
  1402. {
  1403. log_e("sqlite select Table_AlarmManage handle error.");
  1404. return -1 ;
  1405. }
  1406. if(nrow==0)
  1407. {
  1408. log_e("sqlite search Table_AlarmManage no data.");
  1409. return -1 ;
  1410. }
  1411. *nAlarmSum = atoi(pResult[1]);
  1412. sqlite3_free_table(pResult);
  1413. if (alarm_type<0)//小于0加载所有的
  1414. {
  1415. sprintf(select_sql,"SELECT* FROM Table_AlarmManage WHERE (product_id=%d) order by alarmType desc LIMIT %d OFFSET %d ",
  1416. product_id,
  1417. page_size,
  1418. page_num>0?(page_num-1)*page_size:0);
  1419. }else
  1420. {
  1421. sprintf(select_sql,"SELECT* FROM Table_AlarmManage WHERE (product_id=%d) AND (alarmType=%d) LIMIT %d OFFSET %d",
  1422. product_id,
  1423. alarm_type,
  1424. page_size,
  1425. page_num>0?(page_num-1)*page_size:0);
  1426. }
  1427. //log_d(select_sql);
  1428. res = sqlite3_get_table(db, select_sql, &pResult, &nrow, &ncolumn, &err_msg);
  1429. if(res != SQLITE_OK)
  1430. return -1 ;
  1431. if(nrow==0)
  1432. return -1 ;
  1433. //初始化头
  1434. for (size_t i = 1; i <= nrow; i++)
  1435. {
  1436. _AlarmAckInfo* _alarmTemp = (_AlarmAckInfo*)malloc(sizeof( _AlarmAckInfo));
  1437. if(_alarmTemp==NULL)
  1438. log_e("alarm malloc failed");
  1439. strcpy(_alarmTemp->alarmNumber,pResult[i*ncolumn+0]);
  1440. strcpy(_alarmTemp->alarmDate,pResult[i*ncolumn+1]);
  1441. _alarmTemp->alarmType = atoi(pResult[i*ncolumn+2]);
  1442. strcpy(_alarmTemp->deviceNumber,__globalDeviceManage._global_device_info->product_number);
  1443. strcpy(_alarmTemp->deviceName,__globalDeviceManage._global_device_info->product_name);
  1444. strcpy(_alarmTemp->alarmContent,pResult[i*ncolumn+4]);
  1445. //尾部插入
  1446. list_add_tail(&_alarmTemp->list, &_alarm_ack_info->list);
  1447. }
  1448. sqlite3_free_table(pResult);
  1449. }
  1450. #endif
  1451. /// @brief 查询告警历史记录
  1452. /// @param db
  1453. /// @param product_id
  1454. /// @param alarm_type
  1455. /// @param start_time
  1456. /// @param end_time
  1457. /// @param page_num
  1458. /// @param page_size
  1459. /// @param _alarm_ack_info
  1460. /// @return
  1461. #if 0
  1462. int dev_search_alarm_info(sqlite3* db,
  1463. int product_id,
  1464. int alarm_type,
  1465. char* start_time,
  1466. char* end_time,
  1467. int page_num,
  1468. int page_size,
  1469. _AlarmAckInfo* _alarm_ack_info,
  1470. int *nAlarmSum
  1471. )
  1472. {
  1473. int res = 0 ;
  1474. // int rowIndex = 1 ;
  1475. // char *errorMsg = NULL;
  1476. int nrow = 0; //满足条件的记录数目
  1477. int ncolumn = 0; //每条记录包含的字段数据
  1478. char** pResult = NULL; //用来指向sql执行结果的指针
  1479. char* err_msg=NULL;
  1480. char select_sql[1024] = {0};
  1481. //查询告警总数
  1482. if (alarm_type<0)//小于0加载所有的
  1483. {
  1484. snprintf(select_sql,sizeof(select_sql),"SELECT count (*) FROM Table_AlarmManage where (alarmDate BETWEEN '%s' AND '%s');",start_time,end_time);
  1485. }else{
  1486. snprintf(select_sql,sizeof(select_sql),"SELECT count (*) FROM Table_AlarmManage where (alarmType=%d) and (alarmDate BETWEEN '%s' AND '%s');",alarm_type,start_time,end_time);
  1487. }
  1488. res = sqlite3_get_table(db, select_sql, &pResult, &nrow, &ncolumn, &err_msg);
  1489. if(res != SQLITE_OK)
  1490. {
  1491. log_e("sqlite select Table_AlarmManage handle error.");
  1492. return -1 ;
  1493. }
  1494. if(nrow==0)
  1495. {
  1496. log_e("sqlite search Table_AlarmManage no data.");
  1497. return -1 ;
  1498. }
  1499. *nAlarmSum = atoi(pResult[1]);
  1500. sprintf(select_sql,"SELECT* FROM Table_AlarmManage WHERE (product_id=%d) AND (alarmType=%d) AND (alarmDate BETWEEN '%s' AND '%s') LIMIT %d OFFSET %d;",
  1501. product_id,
  1502. alarm_type,
  1503. start_time,
  1504. end_time,
  1505. page_size,
  1506. page_num>0?(page_num-1)*page_size:0);
  1507. log_d(select_sql);
  1508. res = sqlite3_get_table(db, select_sql, &pResult, &nrow, &ncolumn, &err_msg);
  1509. if(res != SQLITE_OK)
  1510. return -1 ;
  1511. if(nrow==0)
  1512. return -1 ;
  1513. //初始化头
  1514. for (size_t i = 1; i <= nrow; i++)
  1515. {
  1516. _AlarmAckInfo* _alarmTemp = (_AlarmAckInfo*)malloc(sizeof( _AlarmAckInfo));
  1517. if(_alarmTemp==NULL)
  1518. log_e("alarm malloc failed");
  1519. strcpy(_alarmTemp->alarmNumber,pResult[i*ncolumn+0]);
  1520. strcpy(_alarmTemp->alarmDate,pResult[i*ncolumn+1]);
  1521. _alarmTemp->alarmType = atoi(pResult[i*ncolumn+2]);
  1522. strcpy(_alarmTemp->deviceNumber,__globalDeviceManage._global_device_info->product_number);
  1523. strcpy(_alarmTemp->deviceName,__globalDeviceManage._global_device_info->product_name);
  1524. strcpy(_alarmTemp->alarmContent,pResult[i*ncolumn+4]);
  1525. //尾部插入
  1526. list_add_tail(&_alarmTemp->list, &_alarm_ack_info->list);
  1527. }
  1528. sqlite3_free_table(pResult);
  1529. return 0;
  1530. }
  1531. #endif
  1532. #if 0
  1533. int dev_get_ntp_info(sqlite3 *db,NTPManager* _globalNTPInfo)
  1534. {
  1535. int res = 0 ;
  1536. // int rowIndex = 1 ;
  1537. // char *errorMsg = NULL;
  1538. int nrow = 0; //满足条件的记录数目
  1539. int ncolumn = 0; //每条记录包含的字段数据
  1540. char** pResult = NULL; //用来指向sql执行结果的指针
  1541. char* err_msg=NULL;
  1542. char select_sql[1024] = {0};
  1543. sprintf(select_sql, "SELECT* from Table_NTPManage WHERE product_id = %d;", __globalDeviceManage._global_device_info->product_id);
  1544. res = sqlite3_get_table(db, select_sql, &pResult, &nrow, &ncolumn, &err_msg);
  1545. if(res != SQLITE_OK)
  1546. return -1 ;
  1547. //提取数据
  1548. if(nrow==0)
  1549. return -2 ;
  1550. //获取ID
  1551. _globalNTPInfo->product_id = atoi(pResult[rowIndex*ncolumn+0]);
  1552. _globalNTPInfo->mode = atoi(pResult[rowIndex*ncolumn+1]);
  1553. _globalNTPInfo->ntpName= malloc(64);
  1554. strcpy(_globalNTPInfo->ntpName,pResult[rowIndex*ncolumn+2]);
  1555. _globalNTPInfo->ntpaddress= malloc(64);
  1556. strcpy(_globalNTPInfo->ntpaddress ,pResult[rowIndex*ncolumn+3]);
  1557. _globalNTPInfo->port = atoi(pResult[rowIndex*ncolumn+4]);
  1558. _globalNTPInfo->time= malloc(64);
  1559. strcpy(_globalNTPInfo->time,pResult[rowIndex*ncolumn+5]);
  1560. _globalNTPInfo->weekday = atoi(pResult[rowIndex*ncolumn+6]);
  1561. _globalNTPInfo->tzone = atoi(pResult[rowIndex*ncolumn+7]);
  1562. sqlite3_free_table(pResult);
  1563. return 0;
  1564. }
  1565. #endif
  1566. #if 0
  1567. int dev_update_ntp_info(sqlite3 *db, int product_id, NTPManager* _globalNTPInfo)
  1568. {
  1569. int res = 0 ;
  1570. // int rowIndex = 1 ;
  1571. // char *errorMsg = NULL;
  1572. int nrow = 0; //满足条件的记录数目
  1573. int ncolumn = 0; //每条记录包含的字段数据
  1574. char** pResult = NULL; //用来指向sql执行结果的指针
  1575. char* err_msg=NULL;
  1576. char select_sql[1024] = {0};
  1577. sprintf(select_sql,"UPDATE Table_NTPManage SET enable=%d,name='%s',address='%s',port=%d,time='%s',weekday=%d,timezone=%d WHERE product_id=%d ;",
  1578. _globalNTPInfo->mode,
  1579. _globalNTPInfo->ntpName,
  1580. _globalNTPInfo->ntpaddress,
  1581. _globalNTPInfo->port,
  1582. _globalNTPInfo->time,
  1583. _globalNTPInfo->weekday,
  1584. _globalNTPInfo->tzone,
  1585. product_id);
  1586. res = sqlite3_get_table(db, select_sql, &pResult, &nrow, &ncolumn, &err_msg);
  1587. if(res != SQLITE_OK)
  1588. return -1 ;
  1589. sqlite3_free_table(pResult);
  1590. return 0;
  1591. }
  1592. #endif
  1593. #if 0
  1594. int dev_insert_ntp_info(sqlite3 *db,NTPManager* _globalNTPInfo)
  1595. {
  1596. int res = 0 ;
  1597. // int rowIndex = 1 ;
  1598. // char *errorMsg = NULL;
  1599. int nrow = 0; //满足条件的记录数目
  1600. int ncolumn = 0; //每条记录包含的字段数据
  1601. char** pResult = NULL; //用来指向sql执行结果的指针
  1602. char* err_msg=NULL;
  1603. char select_sql[1024] = {0};
  1604. sprintf(select_sql,"INSERT INTO Table_NTPManage (product_id, enable, name, address, port, time, weekday, timezone) VALUES (%d,%d,'%s','%s', %d,'%s',%d,%d);",
  1605. _globalNTPInfo->product_id,
  1606. _globalNTPInfo->mode,
  1607. _globalNTPInfo->ntpName,
  1608. _globalNTPInfo->ntpaddress,
  1609. _globalNTPInfo->port,
  1610. _globalNTPInfo->time,
  1611. _globalNTPInfo->weekday,
  1612. _globalNTPInfo->tzone);
  1613. res = sqlite3_get_table(db, select_sql, &pResult, &nrow, &ncolumn, &err_msg);
  1614. if(res != SQLITE_OK)
  1615. return -1 ;
  1616. sqlite3_free_table(pResult);
  1617. return 0;
  1618. }
  1619. #endif
  1620. #if 0
  1621. int dev_get_snmp_info(sqlite3 *db, SNMPManager* _globalSNMPInfo)
  1622. {
  1623. int res = 0 ;
  1624. // int rowIndex = 1 ;
  1625. // char *errorMsg = NULL;
  1626. int nrow = 0; //满足条件的记录数目
  1627. int ncolumn = 0; //每条记录包含的字段数据
  1628. char** pResult = NULL; //用来指向sql执行结果的指针
  1629. char* err_msg=NULL;
  1630. char select_sql[1024] = {0};
  1631. sprintf(select_sql, "SELECT* from Table_SNMPManage WHERE product_id = %d;", __globalDeviceManage._global_device_info->product_id);
  1632. res = sqlite3_get_table(db, select_sql, &pResult, &nrow, &ncolumn, &err_msg);
  1633. if(res != SQLITE_OK)
  1634. return -1 ;
  1635. //提取数据
  1636. if(nrow==0)
  1637. return -2 ;
  1638. //获取ID
  1639. _globalSNMPInfo->product_id = atoi(pResult[rowIndex*ncolumn+0]);
  1640. _globalSNMPInfo->version= atoi(pResult[rowIndex*ncolumn+1]);
  1641. _globalSNMPInfo->mode = atoi(pResult[rowIndex*ncolumn+2]);
  1642. _globalSNMPInfo->public= malloc(64);
  1643. strcpy(_globalSNMPInfo->public,pResult[rowIndex*ncolumn+3]);
  1644. _globalSNMPInfo->trapmode = atoi(pResult[rowIndex*ncolumn+4]);
  1645. sqlite3_free_table(pResult);
  1646. return 0;
  1647. }
  1648. #endif
  1649. #if 0
  1650. int dev_insert_snmp_info(sqlite3 *db, SNMPManager* _globalSNMPInfo)
  1651. {
  1652. int res = 0 ;
  1653. // int rowIndex = 1 ;
  1654. // char *errorMsg = NULL;
  1655. int nrow = 0; //满足条件的记录数目
  1656. int ncolumn = 0; //每条记录包含的字段数据
  1657. char** pResult = NULL; //用来指向sql执行结果的指针
  1658. char* err_msg=NULL;
  1659. char select_sql[1024] = {0};
  1660. sprintf(select_sql,"INSERT INTO Table_SNMPManage (product_id, proto_type, enable, public, TrapEnable) VALUES (%d,%d,%d,'%s',%d);",
  1661. _globalSNMPInfo->product_id,
  1662. _globalSNMPInfo->version,
  1663. _globalSNMPInfo->mode,
  1664. _globalSNMPInfo->public,
  1665. _globalSNMPInfo->trapmode);
  1666. res = sqlite3_get_table(db, select_sql, &pResult, &nrow, &ncolumn, &err_msg);
  1667. if(res != SQLITE_OK)
  1668. return -1 ;
  1669. sqlite3_free_table(pResult);
  1670. return 0;
  1671. }
  1672. #endif
  1673. #if 0
  1674. int dev_update_snmp_info(sqlite3 *db, int product_id, SNMPManager* _globalSNMPInfo)
  1675. {
  1676. int res = 0 ;
  1677. // int rowIndex = 1 ;
  1678. // char *errorMsg = NULL;
  1679. int nrow = 0; //满足条件的记录数目
  1680. int ncolumn = 0; //每条记录包含的字段数据
  1681. char** pResult = NULL; //用来指向sql执行结果的指针
  1682. char* err_msg=NULL;
  1683. char select_sql[1024] = {0};
  1684. sprintf(select_sql,"UPDATE Table_SNMPManage SET proto_type='%d',enable=%d,public='%s',TrapEnable=%d WHERE product_id=%d;",
  1685. _globalSNMPInfo->version,
  1686. _globalSNMPInfo->mode,
  1687. _globalSNMPInfo->public,
  1688. _globalSNMPInfo->trapmode,
  1689. product_id);
  1690. res = sqlite3_get_table(db, select_sql, &pResult, &nrow, &ncolumn, &err_msg);
  1691. if(res != SQLITE_OK)
  1692. return -1 ;
  1693. sqlite3_free_table(pResult);
  1694. return 0;
  1695. }
  1696. #endif
  1697. #if 0
  1698. int dev_get_smtp_info(sqlite3 *db, SMTPManager* _globalSMTPInfo)
  1699. {
  1700. int res = 0 ;
  1701. // int rowIndex = 1 ;
  1702. // char *errorMsg = NULL;
  1703. int nrow = 0; //满足条件的记录数目
  1704. int ncolumn = 0; //每条记录包含的字段数据
  1705. char** pResult = NULL; //用来指向sql执行结果的指针
  1706. char* err_msg=NULL;
  1707. char select_sql[1024] = {0};
  1708. sprintf(select_sql, "SELECT* from Table_SMTPManage WHERE product_id = %d;", __globalDeviceManage._global_device_info->product_id);
  1709. res = sqlite3_get_table(db, select_sql, &pResult, &nrow, &ncolumn, &err_msg);
  1710. if(res != SQLITE_OK)
  1711. return -1 ;
  1712. //提取数据
  1713. if(nrow==0)
  1714. return -2 ;
  1715. //获取ID
  1716. _globalSMTPInfo->product_id = atoi(pResult[rowIndex*ncolumn+0]);
  1717. _globalSMTPInfo->mode = atoi(pResult[rowIndex*ncolumn+1]);
  1718. strcpy(_globalSMTPInfo->account,pResult[rowIndex*ncolumn+2]);
  1719. strcpy(_globalSMTPInfo->password,pResult[rowIndex*ncolumn+3]);
  1720. strcpy(_globalSMTPInfo->server,pResult[rowIndex*ncolumn+4]);
  1721. _globalSMTPInfo->port = atoi(pResult[rowIndex*ncolumn+5]);
  1722. strcpy(_globalSMTPInfo->auth,pResult[rowIndex*ncolumn+6]);
  1723. sqlite3_free_table(pResult);
  1724. return 0;
  1725. }
  1726. #endif
  1727. #if 0
  1728. int dev_get_smtp_recv_user_list(sqlite3 *db, SMTPreceiveAccount* _globalSMTPreceiveAccount)
  1729. {
  1730. int res = 0 ;
  1731. // int rowIndex = 1 ;
  1732. // char *errorMsg = NULL;
  1733. int nrow = 0; //满足条件的记录数目
  1734. int ncolumn = 0; //每条记录包含的字段数据
  1735. char** pResult = NULL; //用来指向sql执行结果的指针
  1736. char* err_msg=NULL;
  1737. char select_sql[1024] = {0};
  1738. sprintf(select_sql, "SELECT* from Table_SMTPRecAccount;");
  1739. res = sqlite3_get_table(db, select_sql, &pResult, &nrow, &ncolumn, &err_msg);
  1740. if(res != SQLITE_OK)
  1741. return -1 ;
  1742. //提取数据
  1743. if(nrow==0)
  1744. return -2 ;
  1745. for(int i = 1; i <= nrow; i++)
  1746. {
  1747. SMTPreceiveAccount* iterator = (SMTPreceiveAccount*)malloc(sizeof(SMTPreceiveAccount));
  1748. iterator->idx = atoi(pResult[i*ncolumn+0]);
  1749. iterator->receive_account = malloc(128);
  1750. strcpy(iterator->receive_account,pResult[i*ncolumn+1]);
  1751. iterator->receive_account_info = malloc(128);
  1752. strcpy(iterator->receive_account_info,pResult[i*ncolumn+2]);
  1753. list_add_tail(&iterator->list, &_globalSMTPreceiveAccount->list);
  1754. }
  1755. sqlite3_free_table(pResult);
  1756. return 0;
  1757. }
  1758. #endif
  1759. /// @brief 插入一条报警信息
  1760. /// @param db
  1761. /// @param product_id
  1762. /// @param alarm_content
  1763. /// @return
  1764. int dev_insert_alarm_ctrl(sqlite3* db,int product_id,int nAlarmType,char* alarm_content)
  1765. {
  1766. struct tm* t ;
  1767. time_t now;
  1768. time(&now);
  1769. t = localtime(&now);
  1770. char buffer[80];
  1771. strftime(buffer, sizeof(buffer), "%Y-%m-%d %H:%M:%S", t);
  1772. dev_insert_alarm_info(db,product_id,nAlarmType,buffer,alarm_content);
  1773. return 0;
  1774. }
  1775. /// @brief 删除分组信息
  1776. int dev_delete__group_info(sqlite3 *db,int product_id)
  1777. {
  1778. int res ;
  1779. char select_sql[256] = {0};
  1780. // char *errorMsg = NULL;
  1781. int nrow = 0; //满足条件的记录数目
  1782. int ncolumn = 0; //每条记录包含的字段数据
  1783. char** pResult = NULL; //用来指向sql执行结果的指针
  1784. char* err_msg=NULL;
  1785. sprintf(select_sql,"DELETE FROM Table_GroupManage WHERE product_id=%d;",
  1786. product_id
  1787. );
  1788. res = sqlite3_get_table(db, select_sql, &pResult, &nrow, &ncolumn, &err_msg);
  1789. if(res != SQLITE_OK)
  1790. return -1 ;
  1791. sqlite3_free_table(pResult);
  1792. return 0;
  1793. }
  1794. int dev_insert_group_info(sqlite3 *db,GroupInfo* _globalgroupInfo)
  1795. {
  1796. int res = 0 ;
  1797. // int rowIndex = 1 ;
  1798. // char *errorMsg = NULL;
  1799. int nrow = 0; //满足条件的记录数目
  1800. int ncolumn = 0; //每条记录包含的字段数据
  1801. char** pResult = NULL; //用来指向sql执行结果的指针
  1802. char* err_msg=NULL;
  1803. char select_sql[1024] = {0};
  1804. sprintf(select_sql,"INSERT INTO Table_GroupManage (product_id, groupID, groupName, groupChList) VALUES (%d,%d,'%s','%s');",
  1805. _globalgroupInfo->product_id,
  1806. _globalgroupInfo->GroupID,
  1807. _globalgroupInfo->GroupName,
  1808. _globalgroupInfo->GroupChList);
  1809. res = sqlite3_get_table(db, select_sql, &pResult, &nrow, &ncolumn, &err_msg);
  1810. if(res != SQLITE_OK)
  1811. return -1 ;
  1812. sqlite3_free_table(pResult);
  1813. return 0;
  1814. }