DBStand.cs 43 KB

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