DBStand.cs 48 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043
  1. using MeterVision.model;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Data.SQLite;
  5. using System.Linq;
  6. using System.Text;
  7. using System.Threading.Tasks;
  8. namespace MeterVision.db
  9. {
  10. public class DBStand
  11. {
  12. public static bool FreeDatabase()
  13. {
  14. // 构建删除的 SQL 语句
  15. string sql = "VACUUM;";
  16. try
  17. {
  18. // 调用 SQLiteHelper 执行删除操作
  19. int rowsAffected = SQLiteHelper.ExecuteSql(sql);
  20. // 如果删除成功,返回 true,否则返回 false
  21. //return rowsAffected > 0;
  22. return true;
  23. }
  24. catch (Exception ex)
  25. {
  26. // 处理异常(如果有的话)
  27. Console.WriteLine("Error deleting data: " + ex.Message);
  28. return false;
  29. }
  30. }
  31. public static bool InsertTStand(TStand tStand)
  32. {
  33. // 构建插入的 SQL 语句
  34. string sql = "INSERT INTO t_stand (stand_id, create_time, stand_name, stand_type, stand_file) " +
  35. "VALUES (@StandId, @CreateTime, @StandName,@StandType,@StandFile)";
  36. // 创建参数数组
  37. SQLiteParameter[] parameters = new SQLiteParameter[]
  38. {
  39. new SQLiteParameter("@StandId", tStand.StandId),
  40. new SQLiteParameter("@CreateTime", tStand.CreateTime),
  41. new SQLiteParameter("@StandName", tStand.StandName),
  42. new SQLiteParameter("@StandType", tStand.StandType),
  43. new SQLiteParameter("@StandFile", tStand.StandFile)
  44. };
  45. try
  46. {
  47. // 调用 SQLiteHelper 执行插入操作
  48. int rowsAffected = SQLiteHelper.ExecuteSql(sql, parameters);
  49. // 如果插入成功,返回 true,否则返回 false
  50. return rowsAffected > 0;
  51. }
  52. catch (Exception ex)
  53. {
  54. // 处理异常(如果有的话)
  55. Console.WriteLine("Error inserting data: " + ex.Message);
  56. return false;
  57. }
  58. }
  59. public static bool DeleteStandAndDetails(string standId)
  60. {
  61. // 定义删除的 SQL 语句,使用事务来保证一致性
  62. string sql = @"
  63. BEGIN TRANSACTION;
  64. -- 删除 t_stand_detail 表中与 stand_id 相关的数据
  65. DELETE FROM t_stand_detail WHERE stand_id = @StandId;
  66. -- 删除 t_stand 表中与 stand_id 相关的数据
  67. DELETE FROM t_stand WHERE stand_id = @StandId;
  68. -- 删除 t_station 表中与 stand_id 相关的数据
  69. DELETE FROM t_station WHERE stand_id = @StandId;
  70. COMMIT;";
  71. // 创建参数
  72. SQLiteParameter[] parameters = new SQLiteParameter[]
  73. {
  74. new SQLiteParameter("@StandId", standId)
  75. };
  76. try
  77. {
  78. // 执行 SQL 删除操作
  79. int rowsAffected = SQLiteHelper.ExecuteSql(sql, parameters);
  80. // 返回是否成功删除
  81. return rowsAffected > 0;
  82. }
  83. catch (Exception ex)
  84. {
  85. // 处理异常(如果有的话)
  86. Console.WriteLine("Error deleting data: " + ex.Message);
  87. return false;
  88. }
  89. }
  90. public static Tuple<int,int, List<VStand>> GetPagedVStands(int pageNumber, int pageSize)
  91. {
  92. // 计算 OFFSET 值
  93. int offset = (pageNumber - 1) * pageSize;
  94. // 定义 SQL 查询语句,带有分页
  95. string sql = @"
  96. SELECT stand_id, create_time, stand_name,stand_type,stand_file,stand_count
  97. FROM v_stand ORDER BY create_time DESC
  98. LIMIT @PageSize OFFSET @Offset;";
  99. // 创建 SQL 参数
  100. SQLiteParameter[] parameters = new SQLiteParameter[]
  101. {
  102. new SQLiteParameter("@PageSize", pageSize),
  103. new SQLiteParameter("@Offset", offset)
  104. };
  105. // 执行查询并获取结果
  106. List<VStand> stands = new List<VStand>();
  107. using (SQLiteDataReader reader = SQLiteHelper.ExecuteReader(sql, parameters))
  108. {
  109. while (reader.Read())
  110. {
  111. // 将查询结果映射到 TStand 对象
  112. VStand stand = new VStand
  113. {
  114. StandId = reader.GetString(reader.GetOrdinal("stand_id")),
  115. CreateTime = reader.GetString(reader.GetOrdinal("create_time")),
  116. StandName = reader.GetString(reader.GetOrdinal("stand_name")),
  117. StandType = reader.GetInt32(reader.GetOrdinal("stand_type")),
  118. StandFile = reader.GetString(reader.GetOrdinal("stand_file")),
  119. StandCount = reader.GetInt32(reader.GetOrdinal("stand_count"))
  120. };
  121. stands.Add(stand);
  122. }
  123. }
  124. // 获取总记录数,用于计算总页数
  125. string countSql = "SELECT COUNT(*) FROM v_stand";
  126. int totalRecords = Convert.ToInt32(SQLiteHelper.GetSingle(countSql));
  127. // 计算总页数
  128. int totalPages = (int)Math.Ceiling((double)totalRecords / pageSize);
  129. // 返回元组,包含总页数和结果列表
  130. return Tuple.Create(totalRecords,totalPages, stands);
  131. }
  132. public static List<VStand> GetAllVStands()
  133. {
  134. // 定义 SQL 查询语句,带有分页
  135. string sql = @"
  136. SELECT stand_id, create_time, stand_name,stand_type,stand_file,stand_count
  137. FROM v_stand WHERE stand_count>0 ORDER BY create_time DESC";
  138. // 执行查询并获取结果
  139. List<VStand> stands = new List<VStand>();
  140. using (SQLiteDataReader reader = SQLiteHelper.ExecuteReader(sql))
  141. {
  142. while (reader.Read())
  143. {
  144. // 将查询结果映射到 TStand 对象
  145. VStand stand = new VStand
  146. {
  147. StandId = reader.GetString(reader.GetOrdinal("stand_id")),
  148. CreateTime = reader.GetString(reader.GetOrdinal("create_time")),
  149. StandName = reader.GetString(reader.GetOrdinal("stand_name")),
  150. StandType = reader.GetInt32(reader.GetOrdinal("stand_type")),
  151. StandFile = reader.GetString(reader.GetOrdinal("stand_file")),
  152. StandCount = reader.GetInt32(reader.GetOrdinal("stand_count")),
  153. };
  154. stands.Add(stand);
  155. }
  156. }
  157. return stands;
  158. }
  159. public static bool InsertStandDetail(TStandDetail standDetail)
  160. {
  161. // 插入SQL语句
  162. string sql = @"
  163. INSERT OR IGNORE INTO t_stand_detail (stand_detail_id, create_time, stand_id, src_image, stand_value,
  164. station_id, device_sn,sample_time, num_count, last_unit)
  165. VALUES (@StandDetailId, @CreateTime, @StandId, @SrcImage, @StandValue,
  166. @StationId, @DeviceSn, @SampleTime, @NumCount, @LastUnit);";
  167. // 定义参数
  168. SQLiteParameter[] parameters = new SQLiteParameter[]
  169. {
  170. new SQLiteParameter("@StandDetailId", standDetail.StandDetailId),
  171. new SQLiteParameter("@CreateTime", standDetail.CreateTime),
  172. new SQLiteParameter("@StandId", standDetail.StandId),
  173. new SQLiteParameter("@SrcImage", standDetail.SrcImage),
  174. new SQLiteParameter("@StandValue", standDetail.StandValue),
  175. new SQLiteParameter("@StationId", standDetail.StationId),
  176. new SQLiteParameter("@DeviceSn",standDetail.DeviceSn),
  177. new SQLiteParameter("@SampleTime",standDetail.SampleTime),
  178. new SQLiteParameter("@NumCount", standDetail.NumCount),
  179. new SQLiteParameter("@LastUnit", standDetail.LastUnit)
  180. };
  181. // 执行插入操作
  182. try
  183. {
  184. int rowsAffected = SQLiteHelper.ExecuteNonQuery(sql, parameters);
  185. return rowsAffected > 0; // 返回是否成功插入
  186. }
  187. catch (Exception ex)
  188. {
  189. // 处理异常
  190. Console.WriteLine(ex.Message);
  191. return false;
  192. }
  193. }
  194. //public static bool InsertStandDetails(List<TStandDetail> standDetails)
  195. //{
  196. // // 插入SQL语句
  197. // string sql = @"
  198. // INSERT OR IGNORE INTO t_stand_detail (stand_detail_id, create_time, stand_id, src_image, stand_value,
  199. // station_id, device_sn, sample_time, num_count, last_unit)
  200. // VALUES (@StandDetailId, @CreateTime, @StandId, @SrcImage, @StandValue,
  201. // @StationId, ,@DeviceSn, @SampleTime, @NumCount, @LastUnit);";
  202. // try
  203. // {
  204. // // 开始事务
  205. // using (SQLiteConnection connection = SQLiteHelper.GetConnection())
  206. // {
  207. // connection.Open();
  208. // using (SQLiteTransaction transaction = connection.BeginTransaction())
  209. // {
  210. // // 遍历列表插入每一条数据
  211. // foreach (var standDetail in standDetails)
  212. // {
  213. // SQLiteParameter[] parameters = new SQLiteParameter[]
  214. // {
  215. // new SQLiteParameter("@StandDetailId", standDetail.StandDetailId),
  216. // new SQLiteParameter("@CreateTime", standDetail.CreateTime),
  217. // new SQLiteParameter("@StandId", standDetail.StandId),
  218. // new SQLiteParameter("@SrcImage", standDetail.SrcImage),
  219. // new SQLiteParameter("@StandValue", standDetail.StandValue),
  220. // new SQLiteParameter("@StationId", standDetail.StationId),
  221. // new SQLiteParameter("@DeviceSn",standDetail.DeviceSn),
  222. // new SQLiteParameter("@SampleTime",standDetail.SampleTime),
  223. // new SQLiteParameter("@NumCount", standDetail.NumCount),
  224. // new SQLiteParameter("@LastUnit", standDetail.LastUnit)
  225. // };
  226. // // 执行插入操作
  227. // SQLiteHelper.ExecuteNonQuery(sql, parameters, transaction);
  228. // }
  229. // // 提交事务
  230. // transaction.Commit();
  231. // }
  232. // }
  233. // return true;
  234. // }
  235. // catch (Exception ex)
  236. // {
  237. // // 处理异常
  238. // Console.WriteLine(ex.Message);
  239. // return false;
  240. // }
  241. //}
  242. //同时插入t_stand与t_stand_detail表(在一个事务中)
  243. public static bool InsertStandAndDetails(TStand stand, List<TStandDetail> standDetails)
  244. {
  245. try
  246. {
  247. using (SQLiteConnection connection = SQLiteHelper.GetConnection())
  248. {
  249. connection.Open();
  250. using (SQLiteTransaction transaction = connection.BeginTransaction())
  251. {
  252. // 构建插入的 SQL 语句
  253. string standSql = "INSERT INTO t_stand (stand_id, create_time, stand_name, stand_type, stand_file) " +
  254. "VALUES (@StandId, @CreateTime, @StandName,@StandType,@StandFile)";
  255. SQLiteParameter[] standParams = new SQLiteParameter[]
  256. {
  257. new SQLiteParameter("@StandId", stand.StandId),
  258. new SQLiteParameter("@CreateTime", stand.CreateTime),
  259. new SQLiteParameter("@StandName", stand.StandName),
  260. new SQLiteParameter("@StandType", stand.StandType),
  261. new SQLiteParameter("@StandFile", stand.StandFile)
  262. };
  263. SQLiteHelper.ExecuteNonQuery(standSql, standParams, transaction);
  264. // 插入 t_patch_detail 表
  265. foreach (var standDetail in standDetails)
  266. {
  267. string detailSql = @"
  268. INSERT OR IGNORE INTO t_stand_detail (stand_detail_id, create_time, stand_id, src_image, stand_value,
  269. station_id, device_sn,sample_time, e_num_count, e_last_unit)
  270. VALUES (@StandDetailId, @CreateTime, @StandId, @SrcImage, @StandValue,
  271. @StationId, @DeviceSn ,@SampleTime, @ENumCount, @ELastUnit);";
  272. SQLiteParameter[] detailParams = new SQLiteParameter[]
  273. {
  274. new SQLiteParameter("@StandDetailId", standDetail.StandDetailId),
  275. new SQLiteParameter("@CreateTime", standDetail.CreateTime),
  276. new SQLiteParameter("@StandId", standDetail.StandId),
  277. new SQLiteParameter("@SrcImage", standDetail.SrcImage),
  278. new SQLiteParameter("@StandValue", standDetail.StandValue),
  279. new SQLiteParameter("@StationId", standDetail.StationId),
  280. new SQLiteParameter("@DeviceSn", standDetail.DeviceSn),
  281. new SQLiteParameter("@SampleTime",standDetail.SampleTime),
  282. new SQLiteParameter("@ENumCount", standDetail.ENumCount),
  283. new SQLiteParameter("@ELastUnit", standDetail.ELastUnit),
  284. };
  285. SQLiteHelper.ExecuteNonQuery(detailSql, detailParams, transaction);
  286. }
  287. // 提交事务
  288. transaction.Commit();
  289. return true;
  290. }
  291. }
  292. }
  293. catch (Exception ex)
  294. {
  295. //Console.WriteLine($"插入数据失败:{ex.Message}");
  296. throw new Exception($"插入数据失败:{ex.Message}");
  297. //return false;
  298. }
  299. }
  300. public static bool InsertStandDetails(List<TStandDetail> standDetails)
  301. {
  302. if (standDetails == null || standDetails.Count == 0)
  303. {
  304. return false; // 如果列表为空,直接返回
  305. }
  306. try
  307. {
  308. using (SQLiteConnection connection = SQLiteHelper.GetConnection())
  309. {
  310. connection.Open();
  311. using (SQLiteTransaction transaction = connection.BeginTransaction())
  312. {
  313. string detailSql = @"
  314. INSERT OR IGNORE INTO t_stand_detail
  315. (stand_detail_id, create_time, stand_id, src_image, stand_value,
  316. station_id, device_sn, sample_time, e_num_count, e_last_unit,
  317. meter_type, bright_val, flow_rate, dial_region, num_count,
  318. ind_count, feature_region, last_unit, last_value, last_time)
  319. VALUES
  320. (@StandDetailId, @CreateTime, @StandId, @SrcImage, @StandValue,
  321. @StationId, @DeviceSn, @SampleTime, @ENumCount, @ELastUnit,
  322. @MeterType, @BrightVal, @FlowRate, @DialRegion, @NumCount,
  323. @IndCount, @FeatureRegion, @LastUnit, @LastValue, @LastTime);";
  324. foreach (var standDetail in standDetails)
  325. {
  326. SQLiteParameter[] detailParams = new SQLiteParameter[]
  327. {
  328. new SQLiteParameter("@StandDetailId", standDetail.StandDetailId),
  329. new SQLiteParameter("@CreateTime", standDetail.CreateTime),
  330. new SQLiteParameter("@StandId", standDetail.StandId),
  331. new SQLiteParameter("@SrcImage", standDetail.SrcImage),
  332. new SQLiteParameter("@StandValue", standDetail.StandValue),
  333. new SQLiteParameter("@StationId", standDetail.StationId),
  334. new SQLiteParameter("@DeviceSn", standDetail.DeviceSn),
  335. new SQLiteParameter("@SampleTime", standDetail.SampleTime),
  336. new SQLiteParameter("@ENumCount", standDetail.ENumCount),
  337. new SQLiteParameter("@ELastUnit", standDetail.ELastUnit),
  338. new SQLiteParameter("@MeterType", standDetail.MeterType),
  339. new SQLiteParameter("@BrightVal", standDetail.BrightVal),
  340. new SQLiteParameter("@FlowRate", standDetail.FlowRate),
  341. new SQLiteParameter("@DialRegion", standDetail.DialRegion),
  342. new SQLiteParameter("@NumCount", standDetail.NumCount),
  343. new SQLiteParameter("@IndCount", standDetail.IndCount),
  344. new SQLiteParameter("@FeatureRegion", standDetail.FeatureRegion),
  345. new SQLiteParameter("@LastUnit", standDetail.LastUnit),
  346. new SQLiteParameter("@LastValue", standDetail.LastValue),
  347. new SQLiteParameter("@LastTime", standDetail.LastTime)
  348. };
  349. SQLiteHelper.ExecuteNonQuery(detailSql, detailParams, transaction);
  350. }
  351. // 提交事务
  352. transaction.Commit();
  353. return true;
  354. }
  355. }
  356. }
  357. catch (Exception ex)
  358. {
  359. throw new Exception($"插入数据失败:{ex.Message}");
  360. }
  361. }
  362. public static Tuple<int,int, List<TStandDetail>> GetPagedStandDetails(int pageNumber, int pageSize,StationItem stationItem)
  363. {
  364. // 计算偏移量
  365. int offset = (pageNumber - 1) * pageSize;
  366. // 分页查询SQL
  367. //string sql = @"
  368. // SELECT stand_detail_id, create_time, stand_id, src_image, stand_value, station_id, device_sn, sample_time, num_count, last_unit
  369. // FROM t_stand_detail WHERE stand_id=@StandId AND station_id=@StationId
  370. // ORDER BY sample_time ASC -- 根据需要修改排序字段
  371. // LIMIT @PageSize OFFSET @Offset;";
  372. string sql = @"
  373. SELECT *
  374. FROM t_stand_detail WHERE stand_id=@StandId AND station_id=@StationId
  375. ORDER BY sample_time ASC -- 根据需要修改排序字段
  376. LIMIT @PageSize OFFSET @Offset;";
  377. // 定义参数
  378. SQLiteParameter[] parameters = new SQLiteParameter[]
  379. {
  380. new SQLiteParameter("@StandId",stationItem.StandId),
  381. new SQLiteParameter("@StationId", stationItem.StationId),
  382. new SQLiteParameter("@PageSize", pageSize),
  383. new SQLiteParameter("@Offset", offset)
  384. };
  385. // 执行查询并读取数据
  386. List<TStandDetail> standDetails = new List<TStandDetail>();
  387. using (SQLiteDataReader reader = SQLiteHelper.ExecuteReader(sql, parameters))
  388. {
  389. while (reader.Read())
  390. {
  391. // 将查询结果映射到 TStandDetail 对象
  392. TStandDetail standDetail = new TStandDetail
  393. {
  394. StandDetailId = reader.GetString(reader.GetOrdinal("stand_detail_id")),
  395. CreateTime = reader.GetString(reader.GetOrdinal("create_time")),
  396. StandId = reader.GetString(reader.GetOrdinal("stand_id")),
  397. SrcImage = reader.GetString(reader.GetOrdinal("src_image")),
  398. StandValue = reader.GetString(reader.GetOrdinal("stand_value")),
  399. StationId = reader.GetString(reader.GetOrdinal("station_id")),
  400. DeviceSn = reader.GetString(reader.GetOrdinal("device_sn")),
  401. SampleTime = reader.GetString(reader.GetOrdinal("sample_time")),
  402. ENumCount = reader.GetInt32(reader.GetOrdinal("e_num_count")),
  403. ELastUnit = reader.GetInt32(reader.GetOrdinal("e_last_unit")),
  404. //新加的项目
  405. MeterType = reader.GetInt32(reader.GetOrdinal("meter_type")),
  406. BrightVal = reader.GetDouble(reader.GetOrdinal("bright_val")),
  407. FlowRate = reader.GetInt32(reader.GetOrdinal("flow_rate")),
  408. DialRegion = reader.GetString(reader.GetOrdinal("dial_region")),
  409. NumCount = reader.GetInt32(reader.GetOrdinal("num_count")),
  410. IndCount = reader.GetInt32(reader.GetOrdinal("ind_count")),
  411. FeatureRegion = reader.GetString(reader.GetOrdinal("feature_region")),
  412. LastUnit = reader.GetDouble(reader.GetOrdinal("last_unit")),
  413. LastValue = reader.GetDouble(reader.GetOrdinal("last_value")),
  414. LastTime = reader.GetString(reader.GetOrdinal("last_time"))
  415. };
  416. standDetails.Add(standDetail);
  417. }
  418. }
  419. // 获取总记录数,用于计算总页数
  420. //string countSql = "SELECT COUNT(*) FROM t_stand_detail";
  421. //int totalRecords = Convert.ToInt32(SQLiteHelper.GetSingle(countSql));
  422. string countSql = "SELECT COUNT(*) FROM t_stand_detail WHERE stand_id = @StandId AND station_id = @StationId";
  423. //int totalRecords = Convert.ToInt32(SQLiteHelper.GetSingle(countSql, new SQLiteParameter("@StandId", standId)));
  424. SQLiteParameter[] parameters2 = new SQLiteParameter[]{
  425. new SQLiteParameter("@StandId",stationItem.StandId),
  426. new SQLiteParameter("@StationId", stationItem.StationId),
  427. };
  428. int totalRecords = Convert.ToInt32(SQLiteHelper.GetSingle(countSql, parameters2));
  429. // 计算总页数
  430. int totalPages = (int)Math.Ceiling((double)totalRecords / pageSize);
  431. // 返回总页数和分页结果
  432. return Tuple.Create(totalRecords,totalPages, standDetails);
  433. }
  434. public static List<TStandDetail> GetAllStandDetails(string standId)
  435. {
  436. // 分页查询 SQL
  437. string sql = @"
  438. SELECT stand_detail_id, create_time, stand_id, src_image, stand_value, station_id, device_sn, sample_time, num_count, last_unit
  439. FROM t_stand_detail WHERE stand_id = @StandId
  440. ORDER BY create_time DESC";
  441. // 定义参数
  442. SQLiteParameter[] parameters = new SQLiteParameter[]
  443. {
  444. new SQLiteParameter("@StandId", standId)
  445. };
  446. // 执行查询并读取数据
  447. List<TStandDetail> standDetails = new List<TStandDetail>();
  448. try
  449. {
  450. using (SQLiteDataReader reader = SQLiteHelper.ExecuteReader(sql, parameters))
  451. {
  452. while (reader.Read())
  453. {
  454. // 将查询结果映射到 TStandDetail 对象
  455. var standDetail = new TStandDetail
  456. {
  457. StandDetailId = reader.GetString(reader.GetOrdinal("stand_detail_id")),
  458. CreateTime = reader.GetString(reader.GetOrdinal("create_time")),
  459. StandId = reader.GetString(reader.GetOrdinal("stand_id")),
  460. SrcImage = reader.GetString(reader.GetOrdinal("src_image")),
  461. StandValue = reader.GetString(reader.GetOrdinal("stand_value")),
  462. StationId = reader.GetString(reader.GetOrdinal("station_id")),
  463. DeviceSn = reader.GetString(reader.GetOrdinal("device_sn")),
  464. SampleTime = reader.GetString(reader.GetOrdinal("sample_time")),
  465. ENumCount = reader.GetInt32(reader.GetOrdinal("e_num_count")),
  466. ELastUnit = reader.GetInt32(reader.GetOrdinal("e_last_unit")),
  467. //新加的项目
  468. MeterType = reader.GetInt32(reader.GetOrdinal("meter_type")),
  469. BrightVal = reader.GetDouble(reader.GetOrdinal("bright_val")),
  470. FlowRate = reader.GetInt32(reader.GetOrdinal("flow_rate")),
  471. DialRegion = reader.GetString(reader.GetOrdinal("dial_region")),
  472. NumCount = reader.GetInt32(reader.GetOrdinal("num_count")),
  473. IndCount = reader.GetInt32(reader.GetOrdinal("ind_count")),
  474. FeatureRegion = reader.GetString(reader.GetOrdinal("feature_region")),
  475. LastUnit = reader.GetDouble(reader.GetOrdinal("last_unit")),
  476. LastValue = reader.GetDouble(reader.GetOrdinal("last_value")),
  477. LastTime = reader.GetString(reader.GetOrdinal("last_time"))
  478. };
  479. standDetails.Add(standDetail);
  480. }
  481. }
  482. }
  483. catch (Exception ex)
  484. {
  485. // 根据需要记录日志或抛出异常
  486. throw new Exception($"查询 StandDetails 时发生错误:{ex.Message}", ex);
  487. }
  488. return standDetails;
  489. }
  490. public static List<TStandDetail> GetAllStandDetails(string standId,string stationId)
  491. {
  492. // 分页查询 SQL
  493. //string sql = @"
  494. // SELECT stand_detail_id, create_time, stand_id, src_image, stand_value, station_id, device_sn, sample_time, num_count, last_unit
  495. // FROM t_stand_detail WHERE stand_id = @StandId AND station_id = @StationId AND sample_time <> ''
  496. // ORDER BY sample_time ASC";
  497. string sql = @"
  498. SELECT *
  499. FROM t_stand_detail WHERE stand_id = @StandId AND station_id = @StationId AND sample_time <> ''
  500. ORDER BY sample_time ASC";
  501. // 定义参数
  502. SQLiteParameter[] parameters = new SQLiteParameter[]
  503. {
  504. new SQLiteParameter("@StandId", standId),
  505. new SQLiteParameter("@StationId",stationId)
  506. };
  507. // 执行查询并读取数据
  508. List<TStandDetail> standDetails = new List<TStandDetail>();
  509. try
  510. {
  511. using (SQLiteDataReader reader = SQLiteHelper.ExecuteReader(sql, parameters))
  512. {
  513. while (reader.Read())
  514. {
  515. // 将查询结果映射到 TStandDetail 对象
  516. var standDetail = new TStandDetail
  517. {
  518. StandDetailId = reader.GetString(reader.GetOrdinal("stand_detail_id")),
  519. CreateTime = reader.GetString(reader.GetOrdinal("create_time")),
  520. StandId = reader.GetString(reader.GetOrdinal("stand_id")),
  521. SrcImage = reader.GetString(reader.GetOrdinal("src_image")),
  522. StandValue = reader.GetString(reader.GetOrdinal("stand_value")),
  523. StationId = reader.GetString(reader.GetOrdinal("station_id")),
  524. DeviceSn = reader.GetString(reader.GetOrdinal("device_sn")),
  525. SampleTime = reader.GetString(reader.GetOrdinal("sample_time")),
  526. ENumCount = reader.GetInt32(reader.GetOrdinal("e_num_count")),
  527. ELastUnit = reader.GetInt32(reader.GetOrdinal("e_last_unit")),
  528. //新加的项目
  529. MeterType = reader.GetInt32(reader.GetOrdinal("meter_type")),
  530. BrightVal = reader.GetDouble(reader.GetOrdinal("bright_val")),
  531. FlowRate = reader.GetInt32(reader.GetOrdinal("flow_rate")),
  532. DialRegion = reader.GetString(reader.GetOrdinal("dial_region")),
  533. NumCount = reader.GetInt32(reader.GetOrdinal("num_count")),
  534. IndCount = reader.GetInt32(reader.GetOrdinal("ind_count")),
  535. FeatureRegion = reader.GetString(reader.GetOrdinal("feature_region")),
  536. LastUnit = reader.GetDouble(reader.GetOrdinal("last_unit")),
  537. LastValue = reader.GetDouble(reader.GetOrdinal("last_value")),
  538. LastTime = reader.GetString(reader.GetOrdinal("last_time"))
  539. };
  540. standDetails.Add(standDetail);
  541. }
  542. }
  543. }
  544. catch (Exception ex)
  545. {
  546. // 根据需要记录日志或抛出异常
  547. throw new Exception($"查询 StandDetails 时发生错误:{ex.Message}", ex);
  548. }
  549. return standDetails;
  550. }
  551. public static TStandDetail GetMinSampleTimeDetail(string standId, string stationId)
  552. {
  553. // 查询 sample_time 最小的符合条件的记录
  554. //string sql = @"
  555. // SELECT stand_detail_id, create_time, stand_id, src_image, stand_value, station_id, device_sn, sample_time, num_count, last_unit
  556. // FROM t_stand_detail
  557. // WHERE stand_id = @StandId AND station_id = @StationId
  558. // ORDER BY sample_time ASC
  559. // LIMIT 1";
  560. string sql = @"
  561. SELECT *
  562. FROM t_stand_detail
  563. WHERE stand_id = @StandId AND station_id = @StationId
  564. ORDER BY sample_time ASC
  565. LIMIT 1";
  566. // 定义参数
  567. SQLiteParameter[] parameters = new SQLiteParameter[]
  568. {
  569. new SQLiteParameter("@StandId", standId),
  570. new SQLiteParameter("@StationId", stationId)
  571. };
  572. // 执行查询并读取数据
  573. try
  574. {
  575. using (SQLiteDataReader reader = SQLiteHelper.ExecuteReader(sql, parameters))
  576. {
  577. if (reader.Read())
  578. {
  579. return new TStandDetail
  580. {
  581. StandDetailId = reader.GetString(reader.GetOrdinal("stand_detail_id")),
  582. CreateTime = reader.GetString(reader.GetOrdinal("create_time")),
  583. StandId = reader.GetString(reader.GetOrdinal("stand_id")),
  584. SrcImage = reader.GetString(reader.GetOrdinal("src_image")),
  585. StandValue = reader.GetString(reader.GetOrdinal("stand_value")),
  586. StationId = reader.GetString(reader.GetOrdinal("station_id")),
  587. DeviceSn = reader.GetString(reader.GetOrdinal("device_sn")),
  588. SampleTime = reader.GetString(reader.GetOrdinal("sample_time")),
  589. ENumCount = reader.GetInt32(reader.GetOrdinal("e_num_count")),
  590. ELastUnit = reader.GetInt32(reader.GetOrdinal("e_last_unit")),
  591. //新加的项目
  592. MeterType = reader.GetInt32(reader.GetOrdinal("meter_type")),
  593. BrightVal = reader.GetDouble(reader.GetOrdinal("bright_val")),
  594. FlowRate = reader.GetInt32(reader.GetOrdinal("flow_rate")),
  595. DialRegion = reader.GetString(reader.GetOrdinal("dial_region")),
  596. NumCount = reader.GetInt32(reader.GetOrdinal("num_count")),
  597. IndCount = reader.GetInt32(reader.GetOrdinal("ind_count")),
  598. FeatureRegion = reader.GetString(reader.GetOrdinal("feature_region")),
  599. LastUnit = reader.GetDouble(reader.GetOrdinal("last_unit")),
  600. LastValue = reader.GetDouble(reader.GetOrdinal("last_value")),
  601. LastTime = reader.GetString(reader.GetOrdinal("last_time"))
  602. };
  603. }
  604. }
  605. }
  606. catch (Exception ex)
  607. {
  608. throw new Exception($"查询最小 SampleTime 记录时发生错误:{ex.Message}", ex);
  609. }
  610. return null; // 若未查询到结果,返回 null
  611. }
  612. public static TStandDetail GetPreConfigValidStandDetail(string standId, string stationId,string sampleTime)
  613. {
  614. string sql = @"
  615. SELECT *
  616. FROM t_stand_detail
  617. WHERE stand_id = @StandId AND station_id = @StationId AND sample_time < @SampleTime AND meter_type > 0
  618. ORDER BY sample_time DESC
  619. LIMIT 1";
  620. // 定义参数
  621. SQLiteParameter[] parameters = new SQLiteParameter[]
  622. {
  623. new SQLiteParameter("@StandId", standId),
  624. new SQLiteParameter("@StationId", stationId),
  625. new SQLiteParameter("@SampleTime", sampleTime)
  626. };
  627. // 执行查询并读取数据
  628. try
  629. {
  630. using (SQLiteDataReader reader = SQLiteHelper.ExecuteReader(sql, parameters))
  631. {
  632. if (reader.Read())
  633. {
  634. return new TStandDetail
  635. {
  636. StandDetailId = reader.GetString(reader.GetOrdinal("stand_detail_id")),
  637. CreateTime = reader.GetString(reader.GetOrdinal("create_time")),
  638. StandId = reader.GetString(reader.GetOrdinal("stand_id")),
  639. SrcImage = reader.GetString(reader.GetOrdinal("src_image")),
  640. StandValue = reader.GetString(reader.GetOrdinal("stand_value")),
  641. StationId = reader.GetString(reader.GetOrdinal("station_id")),
  642. DeviceSn = reader.GetString(reader.GetOrdinal("device_sn")),
  643. SampleTime = reader.GetString(reader.GetOrdinal("sample_time")),
  644. ENumCount = reader.GetInt32(reader.GetOrdinal("e_num_count")),
  645. ELastUnit = reader.GetInt32(reader.GetOrdinal("e_last_unit")),
  646. //新加的项目
  647. MeterType = reader.GetInt32(reader.GetOrdinal("meter_type")),
  648. BrightVal = reader.GetDouble(reader.GetOrdinal("bright_val")),
  649. FlowRate = reader.GetInt32(reader.GetOrdinal("flow_rate")),
  650. DialRegion = reader.GetString(reader.GetOrdinal("dial_region")),
  651. NumCount = reader.GetInt32(reader.GetOrdinal("num_count")),
  652. IndCount = reader.GetInt32(reader.GetOrdinal("ind_count")),
  653. FeatureRegion = reader.GetString(reader.GetOrdinal("feature_region")),
  654. LastUnit = reader.GetDouble(reader.GetOrdinal("last_unit")),
  655. LastValue = reader.GetDouble(reader.GetOrdinal("last_value")),
  656. LastTime = reader.GetString(reader.GetOrdinal("last_time"))
  657. };
  658. }
  659. }
  660. }
  661. catch (Exception ex)
  662. {
  663. throw new Exception($"查询最小 SampleTime 记录时发生错误:{ex.Message}", ex);
  664. }
  665. return null; // 若未查询到结果,返回 null
  666. }
  667. //更新t_stand_detail中的参数
  668. public static bool UpdateTStandDetailByConfig(TStandDetail detail)
  669. {
  670. // 定义更新的 SQL 语句
  671. string sql = @"
  672. UPDATE t_stand_detail
  673. SET
  674. meter_type = @MeterType,
  675. bright_val = @BrightVal,
  676. flow_rate = @FlowRate,
  677. dial_region = @DialRegion,
  678. num_count = @NumCount,
  679. ind_count = @IndCount,
  680. feature_region = @FeatureRegion,
  681. last_unit = @LastUnit,
  682. last_value = @LastValue,
  683. last_time = @LastTime
  684. WHERE stand_detail_id = @StandDetailId;";
  685. // 创建 SQL 参数
  686. SQLiteParameter[] parameters = new SQLiteParameter[]
  687. {
  688. new SQLiteParameter("@StandDetailId",detail.StandDetailId),
  689. new SQLiteParameter("@MeterType", detail.MeterType),
  690. new SQLiteParameter("@BrightVal", detail.BrightVal),
  691. new SQLiteParameter("@FlowRate", detail.FlowRate),
  692. new SQLiteParameter("@DialRegion", detail.DialRegion),
  693. new SQLiteParameter("@NumCount", detail.NumCount),
  694. new SQLiteParameter("@IndCount", detail.IndCount),
  695. new SQLiteParameter("@FeatureRegion", detail.FeatureRegion),
  696. new SQLiteParameter("@LastUnit", detail.LastUnit),
  697. new SQLiteParameter("@LastValue", detail.LastValue),
  698. new SQLiteParameter("@LastTime", detail.LastTime)
  699. };
  700. try
  701. {
  702. // 调用 SQLiteHelper 执行更新操作
  703. int rowsAffected = SQLiteHelper.ExecuteSql(sql, parameters);
  704. // 如果更新成功,返回 true,否则返回 false
  705. return rowsAffected > 0;
  706. }
  707. catch (Exception ex)
  708. {
  709. // 处理异常(如果有的话)
  710. Console.WriteLine("Error updating data: " + ex.Message);
  711. return false;
  712. }
  713. }
  714. public static async Task<List<TStandDetail>> GetAllStandDetailsAsync(string standId)
  715. {
  716. // 分页查询 SQL
  717. string sql = @"
  718. SELECT stand_detail_id, create_time, stand_id, src_image, stand_value, station_id, device_sn, sample_id, num_count, last_unit
  719. FROM t_stand_detail WHERE stand_id = @StandId
  720. ORDER BY create_time DESC";
  721. // 定义参数
  722. SQLiteParameter[] parameters = new SQLiteParameter[]
  723. {
  724. new SQLiteParameter("@StandId", standId)
  725. };
  726. // 执行查询并读取数据
  727. List<TStandDetail> standDetails = new List<TStandDetail>();
  728. try
  729. {
  730. using (SQLiteDataReader reader = await SQLiteHelper.ExecuteReaderAsync(sql, parameters))
  731. {
  732. while (await reader.ReadAsync())
  733. {
  734. // 将查询结果映射到 TStandDetail 对象
  735. var standDetail = new TStandDetail
  736. {
  737. StandDetailId = reader.GetString(reader.GetOrdinal("stand_detail_id")),
  738. CreateTime = reader.GetString(reader.GetOrdinal("create_time")),
  739. StandId = reader.GetString(reader.GetOrdinal("stand_id")),
  740. SrcImage = reader.GetString(reader.GetOrdinal("src_image")),
  741. StandValue = reader.GetString(reader.GetOrdinal("stand_value")),
  742. StationId = reader.GetString(reader.GetOrdinal("station_id")),
  743. DeviceSn = reader.GetString(reader.GetOrdinal("device_sn")),
  744. SampleTime = reader.GetString(reader.GetOrdinal("sample_time")),
  745. NumCount = reader.GetInt32(reader.GetOrdinal("num_count")),
  746. LastUnit = reader.GetInt32(reader.GetOrdinal("last_unit"))
  747. };
  748. standDetails.Add(standDetail);
  749. }
  750. }
  751. }
  752. catch (Exception ex)
  753. {
  754. // 根据需要记录日志或抛出异常
  755. throw new Exception($"查询 StandDetails 时发生错误:{ex.Message}", ex);
  756. }
  757. return standDetails;
  758. }
  759. // 使用 SQLiteHelper 从 v_stand 中根据 stand_id 查询记录
  760. public static VStand GetVStandById(string standId)
  761. {
  762. VStand vStand = null;
  763. // 查询 SQL
  764. string query = @"
  765. SELECT
  766. stand_id,
  767. create_time,
  768. stand_name,
  769. stand_type,
  770. stand_file,
  771. stand_count
  772. FROM v_stand
  773. WHERE stand_id = @StandId;";
  774. // 构造参数
  775. SQLiteParameter[] parameters = new SQLiteParameter[]
  776. {
  777. new SQLiteParameter("@StandId", standId)
  778. };
  779. // 执行查询
  780. using (SQLiteDataReader reader = SQLiteHelper.ExecuteReader(query, parameters))
  781. {
  782. if (reader.Read())
  783. {
  784. vStand = new VStand
  785. {
  786. StandId = reader["stand_id"].ToString(),
  787. CreateTime = reader["create_time"].ToString(),
  788. StandName = reader["stand_name"].ToString(),
  789. StandType = reader["stand_type"] == DBNull.Value ? 0 : Convert.ToInt32(reader["stand_type"]),
  790. StandFile = reader["stand_file"].ToString(),
  791. StandCount = reader["stand_count"] == DBNull.Value ? 0 : Convert.ToInt32(reader["stand_count"])
  792. };
  793. }
  794. }
  795. return vStand;
  796. }
  797. //t_stand_detail是否有重复数据
  798. public static bool IsSrcImageExitInStand(string filePath,string standId)
  799. {
  800. string query = "SELECT COUNT(*) FROM t_stand_detail WHERE src_image = @fileName";
  801. SQLiteParameter[] parameters = new SQLiteParameter[]
  802. {
  803. new SQLiteParameter("@fileName", filePath)
  804. };
  805. int result = Convert.ToInt32(SQLiteHelper.ExecuteSql(query, parameters));
  806. return result > 0;
  807. }
  808. public static bool UpdateStandDetailStandValue(string srcImage, string standValue)
  809. {
  810. string sql = @"
  811. UPDATE t_stand_detail
  812. SET stand_value = @StandValue
  813. WHERE src_image = @SrcImage;";
  814. // 创建 SQL 参数
  815. SQLiteParameter[] parameters = new SQLiteParameter[]
  816. {
  817. new SQLiteParameter("@SrcImage", srcImage),
  818. new SQLiteParameter("@StandValue", standValue)
  819. };
  820. // 执行更新操作并返回受影响的行数
  821. return SQLiteHelper.ExecuteNonQuery(sql, parameters) > 0;
  822. }
  823. public static bool UpdateStandName(string standId, string standName)
  824. {
  825. string sql = @"
  826. UPDATE t_stand
  827. SET stand_name = @StandName
  828. WHERE stand_id = @StandId;";
  829. // 创建 SQL 参数
  830. SQLiteParameter[] parameters = new SQLiteParameter[]
  831. {
  832. new SQLiteParameter("@StandName", standName),
  833. new SQLiteParameter("@StandId", standId)
  834. };
  835. // 执行更新操作并返回受影响的行数
  836. return SQLiteHelper.ExecuteNonQuery(sql, parameters) > 0;
  837. }
  838. /// <summary>
  839. /// 根据 stand_detail_id 删除指定的记录
  840. /// </summary>
  841. /// <param name="standDetailId">要删除的记录的 ID</param>
  842. /// <returns>删除成功返回 true,否则返回 false</returns>
  843. public static bool DeleteTStandDetailById(string standDetailId)
  844. {
  845. // 构建删除的 SQL 语句
  846. string sql = "DELETE FROM t_stand_detail WHERE stand_detail_id = @StandDetailId";
  847. // 创建参数数组
  848. SQLiteParameter[] parameters = new SQLiteParameter[]
  849. {
  850. new SQLiteParameter("@StandDetailId", standDetailId)
  851. };
  852. try
  853. {
  854. // 调用 SQLiteHelper 执行删除操作
  855. int rowsAffected = SQLiteHelper.ExecuteSql(sql, parameters);
  856. // 如果删除成功,返回 true,否则返回 false
  857. return rowsAffected > 0;
  858. }
  859. catch (Exception ex)
  860. {
  861. // 处理异常(如果有的话)
  862. Console.WriteLine("Error deleting data: " + ex.Message);
  863. return false;
  864. }
  865. }
  866. public static List<StationInfo> GetUniqueStationInfo(string standId)
  867. {
  868. try
  869. {
  870. //string sql = @"
  871. // SELECT
  872. // stand_id,
  873. // station_id,
  874. // device_sn,
  875. // MAX(e_num_count) AS num_count,
  876. // MAX(e_last_unit) AS last_unit
  877. // FROM
  878. // t_stand_detail
  879. // WHERE
  880. // stand_id = @StandId
  881. // GROUP BY
  882. // station_id,device_sn
  883. // ORDER BY
  884. // station_id ASC;";
  885. string sql = @"
  886. SELECT
  887. stand_id,
  888. station_id,
  889. device_sn,
  890. MAX(e_num_count) AS num_count,
  891. MAX(e_last_unit) AS last_unit
  892. FROM
  893. t_stand_detail
  894. WHERE
  895. stand_id = @StandId
  896. GROUP BY
  897. station_id
  898. ORDER BY
  899. station_id ASC;";
  900. SQLiteParameter[] parameters = new SQLiteParameter[]
  901. {
  902. new SQLiteParameter("@StandId", standId)
  903. };
  904. List<StationInfo> result = new List<StationInfo>();
  905. using (SQLiteDataReader reader = SQLiteHelper.ExecuteReader(sql, parameters))
  906. {
  907. while (reader.Read())
  908. {
  909. StationInfo station = new StationInfo
  910. {
  911. StandId = reader.GetString(reader.GetOrdinal("stand_id")),
  912. StationId = reader.GetString(reader.GetOrdinal("station_id")),
  913. DeviceSn = reader.GetString(reader.GetOrdinal("device_sn")),
  914. NumCount = reader.GetInt32(reader.GetOrdinal("num_count")),
  915. LastUnit = reader.GetInt32(reader.GetOrdinal("last_unit"))
  916. };
  917. result.Add(station);
  918. }
  919. }
  920. return result;
  921. }
  922. catch (Exception ex)
  923. {
  924. Console.WriteLine($"查询失败:{ex.Message}");
  925. return null;
  926. }
  927. }
  928. //----------------------------------------------------------------------
  929. }
  930. }