DBStand.cs 48 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050
  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, num_in_upper,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, @NumInUpper,@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("@NumInUpper",standDetail.NumInUpper),
  347. new SQLiteParameter("@LastValue", standDetail.LastValue),
  348. new SQLiteParameter("@LastTime", standDetail.LastTime)
  349. };
  350. SQLiteHelper.ExecuteNonQuery(detailSql, detailParams, transaction);
  351. }
  352. // 提交事务
  353. transaction.Commit();
  354. return true;
  355. }
  356. }
  357. }
  358. catch (Exception ex)
  359. {
  360. throw new Exception($"插入数据失败:{ex.Message}");
  361. }
  362. }
  363. public static Tuple<int,int, List<TStandDetail>> GetPagedStandDetails(int pageNumber, int pageSize,StationItem stationItem)
  364. {
  365. // 计算偏移量
  366. int offset = (pageNumber - 1) * pageSize;
  367. // 分页查询SQL
  368. //string sql = @"
  369. // SELECT stand_detail_id, create_time, stand_id, src_image, stand_value, station_id, device_sn, sample_time, num_count, last_unit
  370. // FROM t_stand_detail WHERE stand_id=@StandId AND station_id=@StationId
  371. // ORDER BY sample_time ASC -- 根据需要修改排序字段
  372. // LIMIT @PageSize OFFSET @Offset;";
  373. string sql = @"
  374. SELECT *
  375. FROM t_stand_detail WHERE stand_id=@StandId AND station_id=@StationId
  376. ORDER BY sample_time ASC -- 根据需要修改排序字段
  377. LIMIT @PageSize OFFSET @Offset;";
  378. // 定义参数
  379. SQLiteParameter[] parameters = new SQLiteParameter[]
  380. {
  381. new SQLiteParameter("@StandId",stationItem.StandId),
  382. new SQLiteParameter("@StationId", stationItem.StationId),
  383. new SQLiteParameter("@PageSize", pageSize),
  384. new SQLiteParameter("@Offset", offset)
  385. };
  386. // 执行查询并读取数据
  387. List<TStandDetail> standDetails = new List<TStandDetail>();
  388. using (SQLiteDataReader reader = SQLiteHelper.ExecuteReader(sql, parameters))
  389. {
  390. while (reader.Read())
  391. {
  392. // 将查询结果映射到 TStandDetail 对象
  393. TStandDetail standDetail = new TStandDetail
  394. {
  395. StandDetailId = reader.GetString(reader.GetOrdinal("stand_detail_id")),
  396. CreateTime = reader.GetString(reader.GetOrdinal("create_time")),
  397. StandId = reader.GetString(reader.GetOrdinal("stand_id")),
  398. SrcImage = reader.GetString(reader.GetOrdinal("src_image")),
  399. StandValue = reader.GetString(reader.GetOrdinal("stand_value")),
  400. StationId = reader.GetString(reader.GetOrdinal("station_id")),
  401. DeviceSn = reader.GetString(reader.GetOrdinal("device_sn")),
  402. SampleTime = reader.GetString(reader.GetOrdinal("sample_time")),
  403. ENumCount = reader.GetInt32(reader.GetOrdinal("e_num_count")),
  404. ELastUnit = reader.GetInt32(reader.GetOrdinal("e_last_unit")),
  405. //新加的项目
  406. MeterType = reader.GetInt32(reader.GetOrdinal("meter_type")),
  407. BrightVal = reader.GetDouble(reader.GetOrdinal("bright_val")),
  408. FlowRate = reader.GetInt32(reader.GetOrdinal("flow_rate")),
  409. DialRegion = reader.GetString(reader.GetOrdinal("dial_region")),
  410. NumCount = reader.GetInt32(reader.GetOrdinal("num_count")),
  411. IndCount = reader.GetInt32(reader.GetOrdinal("ind_count")),
  412. FeatureRegion = reader.GetString(reader.GetOrdinal("feature_region")),
  413. LastUnit = reader.GetDouble(reader.GetOrdinal("last_unit")),
  414. NumInUpper = reader.GetInt32(reader.GetOrdinal("num_in_upper")),
  415. LastValue = reader.GetDouble(reader.GetOrdinal("last_value")),
  416. LastTime = reader.GetString(reader.GetOrdinal("last_time"))
  417. };
  418. standDetails.Add(standDetail);
  419. }
  420. }
  421. // 获取总记录数,用于计算总页数
  422. //string countSql = "SELECT COUNT(*) FROM t_stand_detail";
  423. //int totalRecords = Convert.ToInt32(SQLiteHelper.GetSingle(countSql));
  424. string countSql = "SELECT COUNT(*) FROM t_stand_detail WHERE stand_id = @StandId AND station_id = @StationId";
  425. //int totalRecords = Convert.ToInt32(SQLiteHelper.GetSingle(countSql, new SQLiteParameter("@StandId", standId)));
  426. SQLiteParameter[] parameters2 = new SQLiteParameter[]{
  427. new SQLiteParameter("@StandId",stationItem.StandId),
  428. new SQLiteParameter("@StationId", stationItem.StationId),
  429. };
  430. int totalRecords = Convert.ToInt32(SQLiteHelper.GetSingle(countSql, parameters2));
  431. // 计算总页数
  432. int totalPages = (int)Math.Ceiling((double)totalRecords / pageSize);
  433. // 返回总页数和分页结果
  434. return Tuple.Create(totalRecords,totalPages, standDetails);
  435. }
  436. public static List<TStandDetail> GetAllStandDetails(string standId)
  437. {
  438. // 分页查询 SQL
  439. string sql = @"
  440. SELECT stand_detail_id, create_time, stand_id, src_image, stand_value, station_id, device_sn, sample_time, num_count, last_unit
  441. FROM t_stand_detail WHERE stand_id = @StandId
  442. ORDER BY create_time DESC";
  443. // 定义参数
  444. SQLiteParameter[] parameters = new SQLiteParameter[]
  445. {
  446. new SQLiteParameter("@StandId", standId)
  447. };
  448. // 执行查询并读取数据
  449. List<TStandDetail> standDetails = new List<TStandDetail>();
  450. try
  451. {
  452. using (SQLiteDataReader reader = SQLiteHelper.ExecuteReader(sql, parameters))
  453. {
  454. while (reader.Read())
  455. {
  456. // 将查询结果映射到 TStandDetail 对象
  457. var standDetail = new TStandDetail
  458. {
  459. StandDetailId = reader.GetString(reader.GetOrdinal("stand_detail_id")),
  460. CreateTime = reader.GetString(reader.GetOrdinal("create_time")),
  461. StandId = reader.GetString(reader.GetOrdinal("stand_id")),
  462. SrcImage = reader.GetString(reader.GetOrdinal("src_image")),
  463. StandValue = reader.GetString(reader.GetOrdinal("stand_value")),
  464. StationId = reader.GetString(reader.GetOrdinal("station_id")),
  465. DeviceSn = reader.GetString(reader.GetOrdinal("device_sn")),
  466. SampleTime = reader.GetString(reader.GetOrdinal("sample_time")),
  467. ENumCount = reader.GetInt32(reader.GetOrdinal("e_num_count")),
  468. ELastUnit = reader.GetInt32(reader.GetOrdinal("e_last_unit")),
  469. //新加的项目
  470. MeterType = reader.GetInt32(reader.GetOrdinal("meter_type")),
  471. BrightVal = reader.GetDouble(reader.GetOrdinal("bright_val")),
  472. FlowRate = reader.GetInt32(reader.GetOrdinal("flow_rate")),
  473. DialRegion = reader.GetString(reader.GetOrdinal("dial_region")),
  474. NumCount = reader.GetInt32(reader.GetOrdinal("num_count")),
  475. IndCount = reader.GetInt32(reader.GetOrdinal("ind_count")),
  476. FeatureRegion = reader.GetString(reader.GetOrdinal("feature_region")),
  477. LastUnit = reader.GetDouble(reader.GetOrdinal("last_unit")),
  478. LastValue = reader.GetDouble(reader.GetOrdinal("last_value")),
  479. LastTime = reader.GetString(reader.GetOrdinal("last_time"))
  480. };
  481. standDetails.Add(standDetail);
  482. }
  483. }
  484. }
  485. catch (Exception ex)
  486. {
  487. // 根据需要记录日志或抛出异常
  488. throw new Exception($"查询 StandDetails 时发生错误:{ex.Message}", ex);
  489. }
  490. return standDetails;
  491. }
  492. public static List<TStandDetail> GetAllStandDetails(string standId,string stationId)
  493. {
  494. // 分页查询 SQL
  495. //string sql = @"
  496. // SELECT stand_detail_id, create_time, stand_id, src_image, stand_value, station_id, device_sn, sample_time, num_count, last_unit
  497. // FROM t_stand_detail WHERE stand_id = @StandId AND station_id = @StationId AND sample_time <> ''
  498. // ORDER BY sample_time ASC";
  499. string sql = @"
  500. SELECT *
  501. FROM t_stand_detail WHERE stand_id = @StandId AND station_id = @StationId AND sample_time <> ''
  502. ORDER BY sample_time ASC";
  503. // 定义参数
  504. SQLiteParameter[] parameters = new SQLiteParameter[]
  505. {
  506. new SQLiteParameter("@StandId", standId),
  507. new SQLiteParameter("@StationId",stationId)
  508. };
  509. // 执行查询并读取数据
  510. List<TStandDetail> standDetails = new List<TStandDetail>();
  511. try
  512. {
  513. using (SQLiteDataReader reader = SQLiteHelper.ExecuteReader(sql, parameters))
  514. {
  515. while (reader.Read())
  516. {
  517. // 将查询结果映射到 TStandDetail 对象
  518. var standDetail = new TStandDetail
  519. {
  520. StandDetailId = reader.GetString(reader.GetOrdinal("stand_detail_id")),
  521. CreateTime = reader.GetString(reader.GetOrdinal("create_time")),
  522. StandId = reader.GetString(reader.GetOrdinal("stand_id")),
  523. SrcImage = reader.GetString(reader.GetOrdinal("src_image")),
  524. StandValue = reader.GetString(reader.GetOrdinal("stand_value")),
  525. StationId = reader.GetString(reader.GetOrdinal("station_id")),
  526. DeviceSn = reader.GetString(reader.GetOrdinal("device_sn")),
  527. SampleTime = reader.GetString(reader.GetOrdinal("sample_time")),
  528. ENumCount = reader.GetInt32(reader.GetOrdinal("e_num_count")),
  529. ELastUnit = reader.GetInt32(reader.GetOrdinal("e_last_unit")),
  530. //新加的项目
  531. MeterType = reader.GetInt32(reader.GetOrdinal("meter_type")),
  532. BrightVal = reader.GetDouble(reader.GetOrdinal("bright_val")),
  533. FlowRate = reader.GetInt32(reader.GetOrdinal("flow_rate")),
  534. DialRegion = reader.GetString(reader.GetOrdinal("dial_region")),
  535. NumCount = reader.GetInt32(reader.GetOrdinal("num_count")),
  536. IndCount = reader.GetInt32(reader.GetOrdinal("ind_count")),
  537. FeatureRegion = reader.GetString(reader.GetOrdinal("feature_region")),
  538. LastUnit = reader.GetDouble(reader.GetOrdinal("last_unit")),
  539. NumInUpper = reader.GetInt32(reader.GetOrdinal("num_in_upper")),
  540. LastValue = reader.GetDouble(reader.GetOrdinal("last_value")),
  541. LastTime = reader.GetString(reader.GetOrdinal("last_time"))
  542. };
  543. standDetails.Add(standDetail);
  544. }
  545. }
  546. }
  547. catch (Exception ex)
  548. {
  549. // 根据需要记录日志或抛出异常
  550. throw new Exception($"查询 StandDetails 时发生错误:{ex.Message}", ex);
  551. }
  552. return standDetails;
  553. }
  554. public static TStandDetail GetMinSampleTimeDetail(string standId, string stationId)
  555. {
  556. // 查询 sample_time 最小的符合条件的记录
  557. //string sql = @"
  558. // SELECT stand_detail_id, create_time, stand_id, src_image, stand_value, station_id, device_sn, sample_time, num_count, last_unit
  559. // FROM t_stand_detail
  560. // WHERE stand_id = @StandId AND station_id = @StationId
  561. // ORDER BY sample_time ASC
  562. // LIMIT 1";
  563. string sql = @"
  564. SELECT *
  565. FROM t_stand_detail
  566. WHERE stand_id = @StandId AND station_id = @StationId
  567. ORDER BY sample_time ASC
  568. LIMIT 1";
  569. // 定义参数
  570. SQLiteParameter[] parameters = new SQLiteParameter[]
  571. {
  572. new SQLiteParameter("@StandId", standId),
  573. new SQLiteParameter("@StationId", stationId)
  574. };
  575. // 执行查询并读取数据
  576. try
  577. {
  578. using (SQLiteDataReader reader = SQLiteHelper.ExecuteReader(sql, parameters))
  579. {
  580. if (reader.Read())
  581. {
  582. return new TStandDetail
  583. {
  584. StandDetailId = reader.GetString(reader.GetOrdinal("stand_detail_id")),
  585. CreateTime = reader.GetString(reader.GetOrdinal("create_time")),
  586. StandId = reader.GetString(reader.GetOrdinal("stand_id")),
  587. SrcImage = reader.GetString(reader.GetOrdinal("src_image")),
  588. StandValue = reader.GetString(reader.GetOrdinal("stand_value")),
  589. StationId = reader.GetString(reader.GetOrdinal("station_id")),
  590. DeviceSn = reader.GetString(reader.GetOrdinal("device_sn")),
  591. SampleTime = reader.GetString(reader.GetOrdinal("sample_time")),
  592. ENumCount = reader.GetInt32(reader.GetOrdinal("e_num_count")),
  593. ELastUnit = reader.GetInt32(reader.GetOrdinal("e_last_unit")),
  594. //新加的项目
  595. MeterType = reader.GetInt32(reader.GetOrdinal("meter_type")),
  596. BrightVal = reader.GetDouble(reader.GetOrdinal("bright_val")),
  597. FlowRate = reader.GetInt32(reader.GetOrdinal("flow_rate")),
  598. DialRegion = reader.GetString(reader.GetOrdinal("dial_region")),
  599. NumCount = reader.GetInt32(reader.GetOrdinal("num_count")),
  600. IndCount = reader.GetInt32(reader.GetOrdinal("ind_count")),
  601. FeatureRegion = reader.GetString(reader.GetOrdinal("feature_region")),
  602. LastUnit = reader.GetDouble(reader.GetOrdinal("last_unit")),
  603. NumInUpper = reader.GetInt32(reader.GetOrdinal("num_in_upper")),
  604. LastValue = reader.GetDouble(reader.GetOrdinal("last_value")),
  605. LastTime = reader.GetString(reader.GetOrdinal("last_time"))
  606. };
  607. }
  608. }
  609. }
  610. catch (Exception ex)
  611. {
  612. throw new Exception($"查询最小 SampleTime 记录时发生错误:{ex.Message}", ex);
  613. }
  614. return null; // 若未查询到结果,返回 null
  615. }
  616. public static TStandDetail GetPreConfigValidStandDetail(string standId, string stationId,string sampleTime)
  617. {
  618. string sql = @"
  619. SELECT *
  620. FROM t_stand_detail
  621. WHERE stand_id = @StandId AND station_id = @StationId AND sample_time < @SampleTime AND meter_type > 0
  622. ORDER BY sample_time DESC
  623. LIMIT 1";
  624. // 定义参数
  625. SQLiteParameter[] parameters = new SQLiteParameter[]
  626. {
  627. new SQLiteParameter("@StandId", standId),
  628. new SQLiteParameter("@StationId", stationId),
  629. new SQLiteParameter("@SampleTime", sampleTime)
  630. };
  631. // 执行查询并读取数据
  632. try
  633. {
  634. using (SQLiteDataReader reader = SQLiteHelper.ExecuteReader(sql, parameters))
  635. {
  636. if (reader.Read())
  637. {
  638. return new TStandDetail
  639. {
  640. StandDetailId = reader.GetString(reader.GetOrdinal("stand_detail_id")),
  641. CreateTime = reader.GetString(reader.GetOrdinal("create_time")),
  642. StandId = reader.GetString(reader.GetOrdinal("stand_id")),
  643. SrcImage = reader.GetString(reader.GetOrdinal("src_image")),
  644. StandValue = reader.GetString(reader.GetOrdinal("stand_value")),
  645. StationId = reader.GetString(reader.GetOrdinal("station_id")),
  646. DeviceSn = reader.GetString(reader.GetOrdinal("device_sn")),
  647. SampleTime = reader.GetString(reader.GetOrdinal("sample_time")),
  648. ENumCount = reader.GetInt32(reader.GetOrdinal("e_num_count")),
  649. ELastUnit = reader.GetInt32(reader.GetOrdinal("e_last_unit")),
  650. //新加的项目
  651. MeterType = reader.GetInt32(reader.GetOrdinal("meter_type")),
  652. BrightVal = reader.GetDouble(reader.GetOrdinal("bright_val")),
  653. FlowRate = reader.GetInt32(reader.GetOrdinal("flow_rate")),
  654. DialRegion = reader.GetString(reader.GetOrdinal("dial_region")),
  655. NumCount = reader.GetInt32(reader.GetOrdinal("num_count")),
  656. IndCount = reader.GetInt32(reader.GetOrdinal("ind_count")),
  657. FeatureRegion = reader.GetString(reader.GetOrdinal("feature_region")),
  658. LastUnit = reader.GetDouble(reader.GetOrdinal("last_unit")),
  659. NumInUpper = reader.GetInt32(reader.GetOrdinal("num_in_upper")),
  660. LastValue = reader.GetDouble(reader.GetOrdinal("last_value")),
  661. LastTime = reader.GetString(reader.GetOrdinal("last_time"))
  662. };
  663. }
  664. }
  665. }
  666. catch (Exception ex)
  667. {
  668. throw new Exception($"查询最小 SampleTime 记录时发生错误:{ex.Message}", ex);
  669. }
  670. return null; // 若未查询到结果,返回 null
  671. }
  672. //更新t_stand_detail中的参数
  673. public static bool UpdateTStandDetailByConfig(TStandDetail detail)
  674. {
  675. // 定义更新的 SQL 语句
  676. string sql = @"
  677. UPDATE t_stand_detail
  678. SET
  679. meter_type = @MeterType,
  680. bright_val = @BrightVal,
  681. flow_rate = @FlowRate,
  682. dial_region = @DialRegion,
  683. num_count = @NumCount,
  684. ind_count = @IndCount,
  685. feature_region = @FeatureRegion,
  686. last_unit = @LastUnit,
  687. num_in_upper = @NumInUpper,
  688. last_value = @LastValue,
  689. last_time = @LastTime
  690. WHERE stand_detail_id = @StandDetailId;";
  691. // 创建 SQL 参数
  692. SQLiteParameter[] parameters = new SQLiteParameter[]
  693. {
  694. new SQLiteParameter("@StandDetailId",detail.StandDetailId),
  695. new SQLiteParameter("@MeterType", detail.MeterType),
  696. new SQLiteParameter("@BrightVal", detail.BrightVal),
  697. new SQLiteParameter("@FlowRate", detail.FlowRate),
  698. new SQLiteParameter("@DialRegion", detail.DialRegion),
  699. new SQLiteParameter("@NumCount", detail.NumCount),
  700. new SQLiteParameter("@IndCount", detail.IndCount),
  701. new SQLiteParameter("@FeatureRegion", detail.FeatureRegion),
  702. new SQLiteParameter("@LastUnit", detail.LastUnit),
  703. new SQLiteParameter("@NumInUpper",detail.NumInUpper),
  704. new SQLiteParameter("@LastValue", detail.LastValue),
  705. new SQLiteParameter("@LastTime", detail.LastTime)
  706. };
  707. try
  708. {
  709. // 调用 SQLiteHelper 执行更新操作
  710. int rowsAffected = SQLiteHelper.ExecuteSql(sql, parameters);
  711. // 如果更新成功,返回 true,否则返回 false
  712. return rowsAffected > 0;
  713. }
  714. catch (Exception ex)
  715. {
  716. // 处理异常(如果有的话)
  717. Console.WriteLine("Error updating data: " + ex.Message);
  718. return false;
  719. }
  720. }
  721. public static async Task<List<TStandDetail>> GetAllStandDetailsAsync(string standId)
  722. {
  723. // 分页查询 SQL
  724. string sql = @"
  725. SELECT stand_detail_id, create_time, stand_id, src_image, stand_value, station_id, device_sn, sample_id, num_count, last_unit
  726. FROM t_stand_detail WHERE stand_id = @StandId
  727. ORDER BY create_time DESC";
  728. // 定义参数
  729. SQLiteParameter[] parameters = new SQLiteParameter[]
  730. {
  731. new SQLiteParameter("@StandId", standId)
  732. };
  733. // 执行查询并读取数据
  734. List<TStandDetail> standDetails = new List<TStandDetail>();
  735. try
  736. {
  737. using (SQLiteDataReader reader = await SQLiteHelper.ExecuteReaderAsync(sql, parameters))
  738. {
  739. while (await reader.ReadAsync())
  740. {
  741. // 将查询结果映射到 TStandDetail 对象
  742. var standDetail = new TStandDetail
  743. {
  744. StandDetailId = reader.GetString(reader.GetOrdinal("stand_detail_id")),
  745. CreateTime = reader.GetString(reader.GetOrdinal("create_time")),
  746. StandId = reader.GetString(reader.GetOrdinal("stand_id")),
  747. SrcImage = reader.GetString(reader.GetOrdinal("src_image")),
  748. StandValue = reader.GetString(reader.GetOrdinal("stand_value")),
  749. StationId = reader.GetString(reader.GetOrdinal("station_id")),
  750. DeviceSn = reader.GetString(reader.GetOrdinal("device_sn")),
  751. SampleTime = reader.GetString(reader.GetOrdinal("sample_time")),
  752. NumCount = reader.GetInt32(reader.GetOrdinal("num_count")),
  753. LastUnit = reader.GetInt32(reader.GetOrdinal("last_unit"))
  754. };
  755. standDetails.Add(standDetail);
  756. }
  757. }
  758. }
  759. catch (Exception ex)
  760. {
  761. // 根据需要记录日志或抛出异常
  762. throw new Exception($"查询 StandDetails 时发生错误:{ex.Message}", ex);
  763. }
  764. return standDetails;
  765. }
  766. // 使用 SQLiteHelper 从 v_stand 中根据 stand_id 查询记录
  767. public static VStand GetVStandById(string standId)
  768. {
  769. VStand vStand = null;
  770. // 查询 SQL
  771. string query = @"
  772. SELECT
  773. stand_id,
  774. create_time,
  775. stand_name,
  776. stand_type,
  777. stand_file,
  778. stand_count
  779. FROM v_stand
  780. WHERE stand_id = @StandId;";
  781. // 构造参数
  782. SQLiteParameter[] parameters = new SQLiteParameter[]
  783. {
  784. new SQLiteParameter("@StandId", standId)
  785. };
  786. // 执行查询
  787. using (SQLiteDataReader reader = SQLiteHelper.ExecuteReader(query, parameters))
  788. {
  789. if (reader.Read())
  790. {
  791. vStand = new VStand
  792. {
  793. StandId = reader["stand_id"].ToString(),
  794. CreateTime = reader["create_time"].ToString(),
  795. StandName = reader["stand_name"].ToString(),
  796. StandType = reader["stand_type"] == DBNull.Value ? 0 : Convert.ToInt32(reader["stand_type"]),
  797. StandFile = reader["stand_file"].ToString(),
  798. StandCount = reader["stand_count"] == DBNull.Value ? 0 : Convert.ToInt32(reader["stand_count"])
  799. };
  800. }
  801. }
  802. return vStand;
  803. }
  804. //t_stand_detail是否有重复数据
  805. public static bool IsSrcImageExitInStand(string filePath,string standId)
  806. {
  807. string query = "SELECT COUNT(*) FROM t_stand_detail WHERE src_image = @fileName";
  808. SQLiteParameter[] parameters = new SQLiteParameter[]
  809. {
  810. new SQLiteParameter("@fileName", filePath)
  811. };
  812. int result = Convert.ToInt32(SQLiteHelper.ExecuteSql(query, parameters));
  813. return result > 0;
  814. }
  815. public static bool UpdateStandDetailStandValue(string srcImage, string standValue)
  816. {
  817. string sql = @"
  818. UPDATE t_stand_detail
  819. SET stand_value = @StandValue
  820. WHERE src_image = @SrcImage;";
  821. // 创建 SQL 参数
  822. SQLiteParameter[] parameters = new SQLiteParameter[]
  823. {
  824. new SQLiteParameter("@SrcImage", srcImage),
  825. new SQLiteParameter("@StandValue", standValue)
  826. };
  827. // 执行更新操作并返回受影响的行数
  828. return SQLiteHelper.ExecuteNonQuery(sql, parameters) > 0;
  829. }
  830. public static bool UpdateStandName(string standId, string standName)
  831. {
  832. string sql = @"
  833. UPDATE t_stand
  834. SET stand_name = @StandName
  835. WHERE stand_id = @StandId;";
  836. // 创建 SQL 参数
  837. SQLiteParameter[] parameters = new SQLiteParameter[]
  838. {
  839. new SQLiteParameter("@StandName", standName),
  840. new SQLiteParameter("@StandId", standId)
  841. };
  842. // 执行更新操作并返回受影响的行数
  843. return SQLiteHelper.ExecuteNonQuery(sql, parameters) > 0;
  844. }
  845. /// <summary>
  846. /// 根据 stand_detail_id 删除指定的记录
  847. /// </summary>
  848. /// <param name="standDetailId">要删除的记录的 ID</param>
  849. /// <returns>删除成功返回 true,否则返回 false</returns>
  850. public static bool DeleteTStandDetailById(string standDetailId)
  851. {
  852. // 构建删除的 SQL 语句
  853. string sql = "DELETE FROM t_stand_detail WHERE stand_detail_id = @StandDetailId";
  854. // 创建参数数组
  855. SQLiteParameter[] parameters = new SQLiteParameter[]
  856. {
  857. new SQLiteParameter("@StandDetailId", standDetailId)
  858. };
  859. try
  860. {
  861. // 调用 SQLiteHelper 执行删除操作
  862. int rowsAffected = SQLiteHelper.ExecuteSql(sql, parameters);
  863. // 如果删除成功,返回 true,否则返回 false
  864. return rowsAffected > 0;
  865. }
  866. catch (Exception ex)
  867. {
  868. // 处理异常(如果有的话)
  869. Console.WriteLine("Error deleting data: " + ex.Message);
  870. return false;
  871. }
  872. }
  873. public static List<StationInfo> GetUniqueStationInfo(string standId)
  874. {
  875. try
  876. {
  877. //string sql = @"
  878. // SELECT
  879. // stand_id,
  880. // station_id,
  881. // device_sn,
  882. // MAX(e_num_count) AS num_count,
  883. // MAX(e_last_unit) AS last_unit
  884. // FROM
  885. // t_stand_detail
  886. // WHERE
  887. // stand_id = @StandId
  888. // GROUP BY
  889. // station_id,device_sn
  890. // ORDER BY
  891. // station_id ASC;";
  892. string sql = @"
  893. SELECT
  894. stand_id,
  895. station_id,
  896. device_sn,
  897. MAX(e_num_count) AS num_count,
  898. MAX(e_last_unit) AS last_unit
  899. FROM
  900. t_stand_detail
  901. WHERE
  902. stand_id = @StandId
  903. GROUP BY
  904. station_id
  905. ORDER BY
  906. station_id ASC;";
  907. SQLiteParameter[] parameters = new SQLiteParameter[]
  908. {
  909. new SQLiteParameter("@StandId", standId)
  910. };
  911. List<StationInfo> result = new List<StationInfo>();
  912. using (SQLiteDataReader reader = SQLiteHelper.ExecuteReader(sql, parameters))
  913. {
  914. while (reader.Read())
  915. {
  916. StationInfo station = new StationInfo
  917. {
  918. StandId = reader.GetString(reader.GetOrdinal("stand_id")),
  919. StationId = reader.GetString(reader.GetOrdinal("station_id")),
  920. DeviceSn = reader.GetString(reader.GetOrdinal("device_sn")),
  921. NumCount = reader.GetInt32(reader.GetOrdinal("num_count")),
  922. LastUnit = reader.GetInt32(reader.GetOrdinal("last_unit"))
  923. };
  924. result.Add(station);
  925. }
  926. }
  927. return result;
  928. }
  929. catch (Exception ex)
  930. {
  931. Console.WriteLine($"查询失败:{ex.Message}");
  932. return null;
  933. }
  934. }
  935. //----------------------------------------------------------------------
  936. }
  937. }