mysql_statistics.cpp 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366
  1. //
  2. // Created by huli on 2024/3/19.
  3. //
  4. #include "mysql_statistics.h"
  5. void sql_test()
  6. {
  7. for (int i = 1; i <= CAR_WHEEL_BASE_LEVEL_MAX; ++i)
  8. {
  9. float t_wheel_base = i*0.05+2.45;
  10. //执行sql操作
  11. char update_record_sql[DB_SQL_SIZE];
  12. memset(update_record_sql, 0, DB_SQL_SIZE);
  13. sprintf(update_record_sql, "update space set wheel_base_level = %d where ( wheel_base < %f + 0.001 and wheel_base > %f - 0.001 ) ",
  14. i, t_wheel_base, t_wheel_base
  15. );
  16. LOG(INFO) << " update_record_sql = "<< update_record_sql << " --- " ;
  17. Database_controller::get_instance_pointer()->sql_update(update_record_sql);
  18. }
  19. }
  20. struct TTT
  21. {
  22. string car_number;
  23. string leave_time;
  24. int table_id;
  25. int exist;
  26. };
  27. int sql_ttt_1(string car_number)
  28. {
  29. //查询车位表
  30. char query_sql[DB_SQL_SIZE];
  31. memset(query_sql, 0, DB_SQL_SIZE);
  32. sprintf(query_sql,"select * from space where car_number = '%s' ", car_number.c_str());
  33. boost::shared_ptr<sql::ResultSet> tp_result = nullptr;
  34. Error_manager ec = Database_controller::get_instance_pointer()->sql_query(query_sql, tp_result);
  35. if(ec == SUCCESS)
  36. {
  37. if(tp_result == nullptr)
  38. {
  39. return 0;
  40. }
  41. //只取第一条结果, 默认是id最小的,
  42. if (tp_result->next())
  43. {
  44. char buf[DB_SQL_SIZE];
  45. memset(buf, 0, DB_SQL_SIZE);
  46. try
  47. {
  48. int t_table_id = tp_result->getInt("table_id");
  49. //执行sql操作
  50. char update_record_sql[DB_SQL_SIZE];
  51. memset(update_record_sql, 0, DB_SQL_SIZE);
  52. sprintf(update_record_sql, "update ttt set exist = 1, table_id = %d where car_number = '%s' ",t_table_id, car_number.c_str());
  53. LOG(INFO) << " update_record_sql = "<< update_record_sql << " --- " ;
  54. Database_controller::get_instance_pointer()->sql_update(update_record_sql);
  55. }
  56. catch (sql::SQLException &e)
  57. {
  58. /* Use what() (derived from std::runtime_error) to fetch the error message */
  59. sprintf(buf, "# ERR: %s\n (MySQL error code: %d, SQLState: %s", e.what(), e.getErrorCode(), e.getSQLState().c_str());
  60. return 0;
  61. }
  62. catch (std::runtime_error &e)
  63. {
  64. sprintf(buf, "# ERR: %s\n ERR: runtime_error in %s ", e.what(), __FILE__);
  65. return 0;
  66. }
  67. }
  68. else
  69. {
  70. //执行sql操作
  71. char update_record_sql[DB_SQL_SIZE];
  72. memset(update_record_sql, 0, DB_SQL_SIZE);
  73. sprintf(update_record_sql, "update ttt set exist = 0 where car_number = '%s' ", car_number.c_str());
  74. LOG(INFO) << " update_record_sql = "<< update_record_sql << " --- " ;
  75. Database_controller::get_instance_pointer()->sql_update(update_record_sql);
  76. }
  77. }
  78. return 0;
  79. }
  80. int sql_ttt_2(string car_number)
  81. {
  82. //查询车位表
  83. char query_sql[DB_SQL_SIZE];
  84. memset(query_sql, 0, DB_SQL_SIZE);
  85. sprintf(query_sql,"select * from record where car_number = '%s' order by count_id DESC limit 1 ", car_number.c_str());
  86. boost::shared_ptr<sql::ResultSet> tp_result = nullptr;
  87. Error_manager ec = Database_controller::get_instance_pointer()->sql_query(query_sql, tp_result);
  88. if(ec == SUCCESS)
  89. {
  90. if(tp_result == nullptr)
  91. {
  92. return 0;
  93. }
  94. //只取第一条结果, 默认是id最小的,
  95. if (tp_result->next())
  96. {
  97. char buf[DB_SQL_SIZE];
  98. memset(buf, 0, DB_SQL_SIZE);
  99. try
  100. {
  101. int t_table_id = tp_result->getInt("table_id");
  102. string enqueue_time = tp_result->getString("enqueue_time");
  103. string in_time_start = tp_result->getString("in_time_start");
  104. string in_time_end = tp_result->getString("in_time_end");
  105. string out_time_start = tp_result->getString("out_time_start");
  106. string out_time_end = tp_result->getString("out_time_end");
  107. string leave_time;
  108. if ( out_time_start.size()>2 )
  109. {
  110. leave_time=out_time_start;
  111. }
  112. else if ( out_time_end.size()>2 )
  113. {
  114. leave_time=out_time_end;
  115. }
  116. else if ( in_time_end.size()>2 )
  117. {
  118. leave_time=in_time_end;
  119. }
  120. else if ( in_time_start.size()>2 )
  121. {
  122. leave_time=in_time_start;
  123. }
  124. else if ( enqueue_time.size()>2 )
  125. {
  126. leave_time=enqueue_time;
  127. }
  128. //执行sql操作
  129. char update_record_sql[DB_SQL_SIZE];
  130. memset(update_record_sql, 0, DB_SQL_SIZE);
  131. sprintf(update_record_sql, "update ttt set leave_time = '%s', table_id = %d where car_number = '%s' ",leave_time.c_str(), t_table_id, car_number.c_str());
  132. LOG(INFO) << " update_record_sql = "<< update_record_sql << " --- " ;
  133. Database_controller::get_instance_pointer()->sql_update(update_record_sql);
  134. }
  135. catch (sql::SQLException &e)
  136. {
  137. /* Use what() (derived from std::runtime_error) to fetch the error message */
  138. sprintf(buf, "# ERR: %s\n (MySQL error code: %d, SQLState: %s", e.what(), e.getErrorCode(), e.getSQLState().c_str());
  139. return 0;
  140. }
  141. catch (std::runtime_error &e)
  142. {
  143. sprintf(buf, "# ERR: %s\n ERR: runtime_error in %s ", e.what(), __FILE__);
  144. return 0;
  145. }
  146. }
  147. else
  148. {
  149. std::this_thread::sleep_for(std::chrono::milliseconds(1));
  150. //执行sql操作
  151. char update_record_sql[DB_SQL_SIZE];
  152. memset(update_record_sql, 0, DB_SQL_SIZE);
  153. sprintf(update_record_sql, "update ttt set exist = 0 where car_number = '%s' ", car_number.c_str());
  154. LOG(INFO) << " update_record_sql = "<< update_record_sql << " --- " ;
  155. Database_controller::get_instance_pointer()->sql_update(update_record_sql);
  156. }
  157. }
  158. return 0;
  159. }
  160. int sql_ttt_3()
  161. {
  162. //查询车位表
  163. char query_sql[DB_SQL_SIZE];
  164. memset(query_sql, 0, DB_SQL_SIZE);
  165. sprintf(query_sql,"select car_number from ttt ");
  166. boost::shared_ptr<sql::ResultSet> tp_result = nullptr;
  167. Error_manager ec = Database_controller::get_instance_pointer()->sql_query(query_sql, tp_result);
  168. if(ec == SUCCESS)
  169. {
  170. if(tp_result == nullptr)
  171. {
  172. return 0;
  173. }
  174. //只取第一条结果, 默认是id最小的,
  175. while (tp_result->next())
  176. {
  177. char buf[DB_SQL_SIZE];
  178. memset(buf, 0, DB_SQL_SIZE);
  179. try
  180. {
  181. string t_car_number = tp_result->getString("car_number");
  182. sql_ttt_1(t_car_number);
  183. }
  184. catch (sql::SQLException &e)
  185. {
  186. /* Use what() (derived from std::runtime_error) to fetch the error message */
  187. sprintf(buf, "# ERR: %s\n (MySQL error code: %d, SQLState: %s", e.what(), e.getErrorCode(), e.getSQLState().c_str());
  188. return 0;
  189. }
  190. catch (std::runtime_error &e)
  191. {
  192. sprintf(buf, "# ERR: %s\n ERR: runtime_error in %s ", e.what(), __FILE__);
  193. return 0;
  194. }
  195. }
  196. }
  197. return 0;
  198. }
  199. int sql_ttt_4()
  200. {
  201. //查询车位表
  202. char query_sql[DB_SQL_SIZE];
  203. memset(query_sql, 0, DB_SQL_SIZE);
  204. sprintf(query_sql,"select car_number from ttt where exist =0 ");
  205. boost::shared_ptr<sql::ResultSet> tp_result = nullptr;
  206. Error_manager ec = Database_controller::get_instance_pointer()->sql_query(query_sql, tp_result);
  207. if(ec == SUCCESS)
  208. {
  209. if(tp_result == nullptr)
  210. {
  211. return 0;
  212. }
  213. //只取第一条结果, 默认是id最小的,
  214. while (tp_result->next())
  215. {
  216. char buf[DB_SQL_SIZE];
  217. memset(buf, 0, DB_SQL_SIZE);
  218. try
  219. {
  220. string t_car_number = tp_result->getString("car_number");
  221. sql_ttt_2(t_car_number);
  222. }
  223. catch (sql::SQLException &e)
  224. {
  225. /* Use what() (derived from std::runtime_error) to fetch the error message */
  226. sprintf(buf, "# ERR: %s\n (MySQL error code: %d, SQLState: %s", e.what(), e.getErrorCode(), e.getSQLState().c_str());
  227. return 0;
  228. }
  229. catch (std::runtime_error &e)
  230. {
  231. sprintf(buf, "# ERR: %s\n ERR: runtime_error in %s ", e.what(), __FILE__);
  232. return 0;
  233. }
  234. }
  235. }
  236. return 0;
  237. }
  238. //统计进车数量(指定的单元指定的日期)
  239. int mysql_collect_count_for_enqueue(int year, int month, int day, int unit, bool is_insert_row)
  240. {
  241. //查询车位表
  242. char query_sql[DB_SQL_SIZE];
  243. memset(query_sql, 0, DB_SQL_SIZE);
  244. sprintf(query_sql,"select count(*) from record where enqueue_time like '%04d-%02d-%02d%%' and unit_id = %d ", year, month, day, unit);
  245. // LOG(INFO) << " query_sql = "<< query_sql << " --- " ;
  246. boost::shared_ptr<sql::ResultSet> tp_result = nullptr;
  247. Error_manager ec = Database_controller::get_instance_pointer()->sql_query(query_sql, tp_result);
  248. if(ec == SUCCESS)
  249. {
  250. if(tp_result == nullptr)
  251. {
  252. return 0;
  253. }
  254. //只取第一条结果, 默认是id最小的,
  255. if (tp_result->next())
  256. {
  257. char buf[DB_SQL_SIZE];
  258. memset(buf, 0, DB_SQL_SIZE);
  259. try
  260. {
  261. int t_count = tp_result->getInt("count(*)");
  262. //执行sql操作
  263. if ( is_insert_row )
  264. {
  265. char insert_sql[DB_SQL_SIZE];
  266. memset(insert_sql, 0, DB_SQL_SIZE);
  267. sprintf(insert_sql, "INSERT INTO statistics (enqueue_day, `%d`) values ('%04d-%02d-%02d', %d) ", unit, year, month, day, t_count);
  268. LOG(INFO) << " update_record_sql = "<< insert_sql << " --- " ;
  269. Database_controller::get_instance_pointer()->sql_update(insert_sql);
  270. }
  271. else
  272. {
  273. char update_sql[DB_SQL_SIZE];
  274. memset(update_sql, 0, DB_SQL_SIZE);
  275. sprintf(update_sql, "update statistics set `%d` = %d where enqueue_day = '%04d-%02d-%02d' ", unit, t_count, year, month, day);
  276. // LOG(INFO) << " update_record_sql = "<< update_sql << " --- " ;
  277. Database_controller::get_instance_pointer()->sql_update(update_sql);
  278. }
  279. }
  280. catch (sql::SQLException &e)
  281. {
  282. /* Use what() (derived from std::runtime_error) to fetch the error message */
  283. sprintf(buf, "# ERR: %s\n (MySQL error code: %d, SQLState: %s", e.what(), e.getErrorCode(), e.getSQLState().c_str());
  284. return 0;
  285. }
  286. catch (std::runtime_error &e)
  287. {
  288. sprintf(buf, "# ERR: %s\n ERR: runtime_error in %s ", e.what(), __FILE__);
  289. return 0;
  290. }
  291. }
  292. else
  293. {
  294. }
  295. }
  296. return 0;
  297. return 0;
  298. }
  299. //统计一个月的进车数量(指定的单元指定的日期)
  300. int mysql_collect_daily_data_all_unit(int year, int month, int first_day, int end_day)
  301. {
  302. for (int i = first_day; i <= end_day; ++i)
  303. {
  304. mysql_collect_count_for_enqueue(year, month, i, 11, true);
  305. mysql_collect_count_for_enqueue(year, month, i, 12, false);
  306. mysql_collect_count_for_enqueue(year, month, i, 13, false);
  307. mysql_collect_count_for_enqueue(year, month, i, 14, false);
  308. mysql_collect_count_for_enqueue(year, month, i, 21, false);
  309. mysql_collect_count_for_enqueue(year, month, i, 22, false);
  310. mysql_collect_count_for_enqueue(year, month, i, 23, false);
  311. mysql_collect_count_for_enqueue(year, month, i, 24, false);
  312. mysql_collect_count_for_enqueue(year, month, i, 25, false);
  313. mysql_collect_count_for_enqueue(year, month, i, 31, false);
  314. mysql_collect_count_for_enqueue(year, month, i, 32, false);
  315. }
  316. return 0;
  317. }