DBManager.cs 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477
  1. using db;
  2. using MySql.Data.MySqlClient;
  3. using parkMonitor.LOG;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. namespace parkspace_manager
  10. {
  11. class DBManager
  12. {
  13. /// <summary>
  14. /// 远程数据库操作句柄
  15. /// </summary>
  16. public static DBOperation remoteDBOper;
  17. /// <summary>
  18. /// 本地数据库操作句柄
  19. /// </summary>
  20. public static DBOperation localDBOper;
  21. public DBManager()
  22. {
  23. }
  24. ~DBManager()
  25. {
  26. }
  27. ///// <summary>
  28. ///// 返回停车记录信息
  29. ///// </summary>
  30. ///// <returns></returns>
  31. //public static List<object[]> GetParkingRecords(string license = "", string startTime = "", string endTime = "")
  32. //{
  33. // DateTime now = DateTime.Now;
  34. // List<object[]> result = new List<object[]>();
  35. // string getParkingRecordsSql = "";
  36. // if (startTime == "" || endTime == "")
  37. // {
  38. // DateTime yesterday = DateTime.Now - (new TimeSpan(1, 0, 0, 0));
  39. // DateTime twoDaysAgo = DateTime.Now - (new TimeSpan(2, 0, 0, 0));
  40. // getParkingRecordsSql = "select parkingRecordsID,userID,numberPlate,parkingSpaceID,realParkTime,realGetTime,receiptNum,parkingPrice,paymentStatus " +
  41. // "from parkingrecords where numberPlate " + (license == "" ? "like '%" : "= '" + license) + "' and (realParkTime like '" + now.ToString("yyyy-MM-dd") + "%' or realParkTime like '" + yesterday.ToString("yyyy-MM-dd") + "%' or realParkTime like '" + twoDaysAgo.ToString("yyyy-MM-dd") + "%');";
  42. // }
  43. // else
  44. // {
  45. // getParkingRecordsSql = "select parkingRecordsID,userID,numberPlate,parkingSpaceID,realParkTime,realGetTime,receiptNum,parkingPrice,paymentStatus " +
  46. // "from parkingrecords where numberPlate " + (license == "" ? "like '%" : "= '" + license) + "' and realParkTime >= '" + startTime + "' and realParkTime <= '" + endTime + "';";
  47. // }
  48. // if (localDBOper != null)
  49. // {
  50. // lock (localDBOper)
  51. // {
  52. // MySqlDataReader reader = localDBOper.Query(getParkingRecordsSql);
  53. // try
  54. // {
  55. // while (reader != null && reader.Read())
  56. // {
  57. // if (reader.HasRows)
  58. // {
  59. // object[] temp = new object[reader.FieldCount];
  60. // reader.GetValues(temp);
  61. // result.Add(temp);
  62. // }
  63. // }
  64. // }
  65. // catch (Exception e) { Console.WriteLine(e.Message); }
  66. // try
  67. // {
  68. // if (reader != null)
  69. // {
  70. // reader.Close();
  71. // reader.Dispose();
  72. // }
  73. // }
  74. // catch (Exception e) { Console.WriteLine(e.Message); }
  75. // }
  76. // }
  77. // result.Reverse();
  78. // return result;
  79. //}
  80. ///// <summary>
  81. ///// 返回预约记录信息
  82. ///// </summary>
  83. ///// <returns></returns>
  84. //public static List<object[]> GetOrderRecords(bool localDB, string license = "", string startTime = "", string endTime = "")
  85. //{
  86. // DateTime now = DateTime.Now;
  87. // List<object[]> result = new List<object[]>();
  88. // string getOrderRecordsSql = "";
  89. // if (startTime == "" || endTime == "")
  90. // {
  91. // DateTime yesterday = DateTime.Now - (new TimeSpan(1, 0, 0, 0));
  92. // DateTime twoDaysAgo = DateTime.Now - (new TimeSpan(2, 0, 0, 0));
  93. // getOrderRecordsSql = "select orderRecordsID,userID,numberPlate,bookParkTime,cancelBookTime,bookFetchTime,bookHour,bookPrice,bookState " +
  94. // "from orderrecords where numberPlate " + (license == "" ? "like '%" : "= '" + license) + "' and (bookParkTime like '" + now.ToString("yyyy-MM-dd") +
  95. // "%' or bookParkTime like '" + yesterday.ToString("yyyy-MM-dd") + "%' or bookFetchTime like '" + now.ToString("yyyy-MM-dd") + "%' or bookFetchTime like '" + yesterday.ToString("yyyy-MM-dd") + "%');";
  96. // }
  97. // else
  98. // {
  99. // getOrderRecordsSql = "select orderRecordsID,userID,numberPlate,bookParkTime,cancelBookTime,bookFetchTime,bookHour,bookPrice,bookState " +
  100. // "from orderrecords where numberPlate " + (license == "" ? "like '%" : "= '" + license) + "' and ((bookParkTime >= '" + startTime + "' and bookParkTime <= '" + endTime + "') or (bookFetchTime >= '" + startTime + "' and bookFetchTime <= '" + endTime + "'));";
  101. // }
  102. // if (localDBOper != null)
  103. // {
  104. // lock (localDBOper)
  105. // {
  106. // MySqlDataReader reader;
  107. // if (localDB)
  108. // reader = localDBOper.Query(getOrderRecordsSql);
  109. // else
  110. // reader = remoteDBOper.Query(getOrderRecordsSql);
  111. // try
  112. // {
  113. // while (reader != null && reader.Read())
  114. // {
  115. // if (reader.HasRows)
  116. // {
  117. // object[] temp = new object[reader.FieldCount];
  118. // reader.GetValues(temp);
  119. // result.Add(temp);
  120. // }
  121. // }
  122. // }
  123. // catch (Exception e) { Console.WriteLine(e.Message); }
  124. // try
  125. // {
  126. // if (reader != null)
  127. // {
  128. // reader.Close();
  129. // reader.Dispose();
  130. // }
  131. // }
  132. // catch (Exception e) { Console.WriteLine(e.Message); }
  133. // }
  134. // }
  135. // result.Reverse();
  136. // return result;
  137. //}
  138. ///// <summary>
  139. ///// 更新停车记录关于支付的信息
  140. ///// </summary>
  141. ///// <param name="license"></param>
  142. ///// <param name="receiptNum"></param>
  143. ///// <param name="parkingFee"></param>
  144. ///// <param name="paymentStatus"></param>
  145. ///// <returns></returns>
  146. //public static bool UpdateParkingRecords(string license, string receiptNum, string parkingFee, string paymentStatus, bool local)
  147. //{
  148. // bool result = false;
  149. // string updateRecordsSql = "update parkingrecords set parkingPrice = " + parkingFee + " ,paymentStatus = " + paymentStatus + " where numberPlate = '" + license + "' and receiptNum = " + receiptNum + ";";
  150. // List<string> updateList = new List<string>();
  151. // updateList.Add(updateRecordsSql);
  152. // if (local && localDBOper != null)
  153. // {
  154. // lock (localDBOper)
  155. // {
  156. // try
  157. // {
  158. // result = localDBOper.UpdateTransaction(updateList);
  159. // }
  160. // catch { Log.WriteLog(LogType.database, "更新本地停车记录中支付信息出现异常。\n" + updateRecordsSql); return false; }
  161. // }
  162. // }
  163. // else if (!local && remoteDBOper != null)
  164. // {
  165. // lock (remoteDBOper)
  166. // {
  167. // try
  168. // {
  169. // result = remoteDBOper.UpdateTransaction(updateList);
  170. // }
  171. // catch { Log.WriteLog(LogType.database, "更新云端记录中支付信息出现异常。\n" + updateRecordsSql); return false; }
  172. // }
  173. // }
  174. // return result;
  175. //}
  176. ///// <summary>
  177. ///// 更新所有车位信息
  178. ///// </summary>
  179. //private static void UpdateAllParkingSpace(bool remote)
  180. //{
  181. // string findParkingSpace = "select parkingSpaceID from parkingspace;";
  182. // HashSet<int> recordsIDSet = new HashSet<int>();
  183. // DBOperation dbHandle = null;
  184. // if (!remote)
  185. // {
  186. // dbHandle = localDBOper;
  187. // }
  188. // else
  189. // {
  190. // dbHandle = remoteDBOper;
  191. // }
  192. // lock (dbHandle)
  193. // {
  194. // MySqlDataReader reader = dbHandle.Query(findParkingSpace);
  195. // if (reader != null)
  196. // {
  197. // try
  198. // {
  199. // while (reader.Read())
  200. // {
  201. // if (reader.HasRows)
  202. // {
  203. // recordsIDSet.Add(reader.GetInt32("parkingSpaceID"));
  204. // }
  205. // }
  206. // }
  207. // catch { Log.WriteLog(LogType.process, LogFile.INFO, "数据库车位查询异常"); }
  208. // try
  209. // {
  210. // reader.Close();
  211. // reader.Dispose();
  212. // }
  213. // catch { }
  214. // }
  215. // }
  216. // List<string> updateSpaceList = new List<string>();
  217. // List<string> insertSpaceList = new List<string>();
  218. // string updateParkingSpace = "";
  219. // string insertParkingSpace = "";
  220. // for (int i = 0; i < parkingSpaceInfo.Count; i++)
  221. // {
  222. // if (recordsIDSet.Contains(parkingSpaceInfo[i].parkingSpace))
  223. // {
  224. // updateParkingSpace = "update parkingspace set parkingSpaceX = " + parkingSpaceInfo[i].coordX +
  225. // ",parkingSpaceY = " + parkingSpaceInfo[i].coordY + ",parkingSpaceZ = " + parkingSpaceInfo[i].floorNo + ",parkingSpaceState = " + parkingSpaceInfo[i].spaceStatus + " where (parkingSpaceID = " + parkingSpaceInfo[i].parkingSpace + ");";
  226. // updateSpaceList.Add(updateParkingSpace);
  227. // }
  228. // else
  229. // {
  230. // if (!remote)
  231. // {
  232. // insertParkingSpace = "insert into parkingspace (parkingSpaceID,parkingSpaceX,parkingSpaceY,parkingSpaceZ,parkingSpaceState) values (" + parkingSpaceInfo[i].parkingSpace + "," + parkingSpaceInfo[i].coordX +
  233. // "," + parkingSpaceInfo[i].coordY + "," + parkingSpaceInfo[i].floorNo + "," + parkingSpaceInfo[i].spaceStatus + ");";
  234. // insertSpaceList.Add(insertParkingSpace);
  235. // }
  236. // else
  237. // {
  238. // insertParkingSpace = "insert into parkingspace (parkingSpaceID,parkingSpaceX,parkingSpaceY,parkingSpaceZ,parkingSpaceState,garageID,parkingSpaceName) values (" + parkingSpaceInfo[i].parkingSpace + "," + parkingSpaceInfo[i].coordX +
  239. // "," + parkingSpaceInfo[i].coordY + "," + parkingSpaceInfo[i].floorNo + "," + parkingSpaceInfo[i].spaceStatus + "," + garageID + ",'默认');";
  240. // insertSpaceList.Add(insertParkingSpace);
  241. // }
  242. // }
  243. // }
  244. // try
  245. // {
  246. // lock (dbHandle)
  247. // {
  248. // int id = 0;
  249. // dbHandle.UpdateTransaction(updateSpaceList);
  250. // dbHandle.Insert(insertSpaceList, out id);
  251. // }
  252. // }
  253. // catch (Exception e) { Log.WriteLog(LogType.process, LogFile.ERROR, "更新本地所有车位异常"); Console.WriteLine("更新本地所有车位异常" + e.Message); }
  254. //}
  255. ///// <summary>
  256. ///// 更新车辆状态
  257. ///// </summary>
  258. ///// <param name="lic"></param>
  259. ///// <param name="state"></param>
  260. //private static void UpdateVehicle(string lic, int state, int parkingRecordsID, bool park, bool remote, int parkingSpaceID)
  261. //{
  262. // if (lic != "")
  263. // {
  264. // MySqlDataReader reader;
  265. // //查询车辆是否在车辆表中
  266. // string checkVehicleState = "select * from vehicle where numberPlate = '" + lic + "';";
  267. // if (!remote)
  268. // {
  269. // reader = localDBOper.Query(checkVehicleState);
  270. // }
  271. // else
  272. // {
  273. // //Log.WriteLog(LogType.database, "update, query: \n");
  274. // reader = remoteDBOper.Query(checkVehicleState);
  275. // //Log.WriteLog(LogType.database, "update, query: \n" + checkVehicleState);
  276. // }
  277. // if (reader != null)
  278. // {
  279. // if (reader.Read() && reader.HasRows)
  280. // {
  281. // //更新车辆状态
  282. // string updateVehicleState = "";
  283. // string updateRemoteVehicleState = "";
  284. // if (park)
  285. // {
  286. // if (parkingRecordsID > 0)
  287. // {
  288. // if (parkingSpaceID == 0)
  289. // {
  290. // updateVehicleState = "update vehicle set vehiclepParkState = " + state + " ,parkingRecordsID = " + parkingRecordsID + " where numberPlate = '" + lic + "';";
  291. // updateRemoteVehicleState = "update vehicle set vehiclepParkState = " + state + " ,parkingRecordsID = " + parkingRecordsID + ",garageID = " + garageID + " where numberPlate = '" + lic + "';";
  292. // }
  293. // else
  294. // {
  295. // updateVehicleState = "update vehicle set vehiclepParkState = " + state + " ,parkingRecordsID = " + parkingRecordsID + ",parkingSpaceID = " + parkingSpaceID + " where numberPlate = '" + lic + "';";
  296. // updateRemoteVehicleState = "update vehicle set vehiclepParkState = " + state + " ,parkingRecordsID = " + parkingRecordsID + ",parkingSpaceID = " + parkingSpaceID + ",garageID = " + garageID + " where numberPlate = '" + lic + "';";
  297. // }
  298. // }
  299. // else
  300. // {
  301. // updateVehicleState = "update vehicle set vehiclepParkState = " + state + " where numberPlate = '" + lic + "';";
  302. // updateRemoteVehicleState = updateVehicleState;
  303. // }
  304. // }
  305. // else
  306. // {
  307. // updateVehicleState = "update vehicle set vehiclepParkState = " + state + " where numberPlate = '" + lic + "';";
  308. // updateRemoteVehicleState = updateVehicleState;
  309. // }
  310. // List<string> list = new List<string>();
  311. // if (!remote)
  312. // {
  313. // list.Add(updateVehicleState);
  314. // localDBOper.UpdateTransaction(list);
  315. // }
  316. // else
  317. // {
  318. // //Log.WriteLog(LogType.database, "update, update: \n");
  319. // list.Add(updateRemoteVehicleState);
  320. // remoteDBOper.UpdateTransaction(list);
  321. // //Log.WriteLog(LogType.database, "update, update: \n" + updateRemoteVehicleState);
  322. // }
  323. // }
  324. // else
  325. // {
  326. // //插入车辆
  327. // string insertVehicleWithState = "";
  328. // if (park)
  329. // {
  330. // if (parkingRecordsID > 0)
  331. // insertVehicleWithState = "insert into vehicle (numberPlate,vehicleTypeID,vehiclepParkState,parkingRecordsID) values " +
  332. // "('" + lic + "',NULL,'" + state + "'," + parkingRecordsID + ");";
  333. // else
  334. // insertVehicleWithState = "insert into vehicle (numberPlate,vehicleTypeID,vehiclepParkState) values " +
  335. // "('" + lic + "',NULL,'" + state + "');";
  336. // }
  337. // else
  338. // {
  339. // Log.WriteLog(LogType.process, LogFile.ERROR, "取车无法获得车辆信息");
  340. // Console.WriteLine("明显异常,取车发现无车辆");
  341. // try
  342. // {
  343. // reader.Close();
  344. // reader.Dispose();
  345. // }
  346. // catch { }
  347. // return;
  348. // }
  349. // List<string> list = new List<string>();
  350. // list.Add(insertVehicleWithState);
  351. // int id = 0;
  352. // if (!remote)
  353. // {
  354. // localDBOper.Insert(list, out id);
  355. // }
  356. // else
  357. // {
  358. // remoteDBOper.Insert(list, out id);
  359. // }
  360. // }
  361. // try
  362. // {
  363. // reader.Close();
  364. // reader.Dispose();
  365. // }
  366. // catch { }
  367. // }
  368. // }
  369. //}
  370. ///// <summary>
  371. ///// 验证会员信息
  372. ///// </summary>
  373. ///// <param name="ts"></param>
  374. ///// <param name="userID"></param>
  375. ///// <param name="license"></param>
  376. ///// <param name="status"></param>
  377. //private static void ValidateUserInfo(TerminalStru ts, int userID, string license, out int status)
  378. //{
  379. // status = 0;
  380. // //与云端数据比对
  381. // string checkNetSql = "select * from user where userID = 1;";
  382. // MySqlDataReader readerTest = remoteDBOper.Query(checkNetSql);
  383. // if (readerTest != null)
  384. // {
  385. // if (readerTest.Read() && readerTest.HasRows)
  386. // {
  387. // try
  388. // {
  389. // readerTest.Close();
  390. // readerTest.Dispose();
  391. // }
  392. // catch { }
  393. // string userInfoCheckSql = "select * from usercarrelation where userID = '" + userID + "' and numberPlate = '" + license + "';";
  394. // MySqlDataReader reader = remoteDBOper.Query(userInfoCheckSql);
  395. // if (reader != null && reader.Read() && reader.HasRows && userID != 0 && license != "")
  396. // {
  397. // //ts.licVerification = 1;//验证成功
  398. // //PLC.WriteToPLC(ts, PLCDataType.central);
  399. // status = 1;
  400. // Log.WriteLog(LogType.process, LogFile.INFO, "号牌验证成功");
  401. // SetNotification("注册用户,号牌验证成功", parkMonitor.model.TextColor.Info);
  402. // }
  403. // else
  404. // {
  405. // //ts.licVerification = 1;//验证失败
  406. // //PLC.WriteToPLC(ts, PLCDataType.central);
  407. // status = 2;
  408. // Log.WriteLog(LogType.process, LogFile.WARNING, "号牌验证失败");
  409. // SetNotification("注册用户,号牌验证失败", parkMonitor.model.TextColor.Error);
  410. // }
  411. // try
  412. // {
  413. // reader.Close();
  414. // reader.Dispose();
  415. // }
  416. // catch { }
  417. // }
  418. // else
  419. // {
  420. // try
  421. // {
  422. // readerTest.Close();
  423. // readerTest.Dispose();
  424. // }
  425. // catch { }
  426. // //ts.licVerification = 1;//网络异常,跳过验证
  427. // //PLC.WriteToPLC(ts, PLCDataType.central);
  428. // status = 1;
  429. // Log.WriteLog(LogType.process, LogFile.ERROR, "网络异常,无法验证号牌");
  430. // }
  431. // }
  432. //}
  433. ///// <summary>
  434. ///// 查询停车记录id
  435. ///// </summary>
  436. ///// <param name="querySql"></param>
  437. ///// <param name="recordsID"></param>
  438. ///// <param name="remote"></param>
  439. //private static void QueryParkingRecordsID(string querySql, out int recordsID, bool remote)
  440. //{
  441. // recordsID = 0;
  442. // MySqlDataReader reader = null;
  443. // if (!remote)
  444. // {
  445. // reader = localDBOper.Query(querySql);
  446. // }
  447. // else
  448. // {
  449. // reader = remoteDBOper.Query(querySql);
  450. // }
  451. // if (reader != null)
  452. // {
  453. // try
  454. // {
  455. // while (reader.Read())
  456. // {
  457. // if (reader.HasRows)
  458. // recordsID = reader.GetInt32("parkingRecordsID");
  459. // }
  460. // }
  461. // catch (Exception e) { Log.WriteLog(LogType.process, LogFile.ERROR, "查询停车记录id失败"); Console.WriteLine(e.Message); };
  462. // try
  463. // {
  464. // reader.Close();
  465. // reader.Dispose();
  466. // }
  467. // catch { }
  468. // }
  469. //}
  470. }
  471. }