DBSingle.cs 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Data.SQLite;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Threading.Tasks;
  7. namespace MeterVision.db
  8. {
  9. public class DBSingle
  10. {
  11. public static bool InsertTSingleDetail0(TSingleDetail singlDetail)
  12. {
  13. // 构建插入的 SQL 语句
  14. string sql = "INSERT INTO t_single_detail (single_detail_id, create_time, src_image, device_sn, sample_time) " +
  15. "VALUES (@SingleDetailId, @CreateTime, @SrcImage, @DeviceSn, @SampleTime)";
  16. // 创建参数数组
  17. SQLiteParameter[] parameters = new SQLiteParameter[]
  18. {
  19. new SQLiteParameter("@SingleDetailId", singlDetail.SingleDetailId),
  20. new SQLiteParameter("@CreateTime", singlDetail.CreateTime),
  21. new SQLiteParameter("@SrcImage", singlDetail.SrcImage),
  22. new SQLiteParameter("@DeviceSn", singlDetail.DeviceSn),
  23. new SQLiteParameter("@SampleTime", singlDetail.SampleTime)
  24. };
  25. try
  26. {
  27. // 调用 SQLiteHelper 执行插入操作
  28. int rowsAffected = SQLiteHelper.ExecuteSql(sql, parameters);
  29. // 如果插入成功,返回 true,否则返回 false
  30. return rowsAffected > 0;
  31. }
  32. catch (Exception ex)
  33. {
  34. // 处理异常(如果有的话)
  35. Console.WriteLine("Error inserting data: " + ex.Message);
  36. return false;
  37. }
  38. }
  39. public static bool InsertSingleDetail(TSingleDetail detail)
  40. {
  41. // 定义 SQL 插入语句
  42. string sql = @"
  43. INSERT INTO t_single_detail (
  44. single_detail_id, create_time, src_image, run_flag, run_time,
  45. dst_image, meter_type, digit_count, pointer_count, last_unit,
  46. result_type, raw_value, final_value, ai_ver, debug_info, log_path, memo
  47. )
  48. VALUES (
  49. @SingleDetailId, @CreateTime, @SrcImage, @RunFlag, @RunTime,
  50. @DstImage, @MeterType, @DigitCount, @PointerCount, @LastUnit,
  51. @ResultType, @RawValue, @FinalValue, @AiVer, @DebugInfo, @LogPath, @Memo
  52. );
  53. ";
  54. // 创建 SQL 参数
  55. SQLiteParameter[] parameters = new SQLiteParameter[]
  56. {
  57. new SQLiteParameter("@SingleDetailId", detail.SingleDetailId),
  58. new SQLiteParameter("@CreateTime", detail.CreateTime),
  59. new SQLiteParameter("@SrcImage", detail.SrcImage),
  60. new SQLiteParameter("@RunFlag", detail.RunFlag),
  61. new SQLiteParameter("@RunTime", detail.RunTime),
  62. new SQLiteParameter("@DstImage", detail.DstImage),
  63. new SQLiteParameter("@MeterType", detail.MeterType),
  64. new SQLiteParameter("@DigitCount", detail.DigitCount),
  65. new SQLiteParameter("@PointerCount", detail.PointerCount),
  66. new SQLiteParameter("@LastUnit", detail.LastUnit),
  67. new SQLiteParameter("@ResultType", detail.ResultType),
  68. new SQLiteParameter("@RawValue", detail.RawValue),
  69. new SQLiteParameter("@FinalValue", detail.FinalValue),
  70. new SQLiteParameter("@AiVer", detail.AiVer),
  71. new SQLiteParameter("@DebugInfo", detail.DebugInfo),
  72. new SQLiteParameter("@LogPath", detail.LogPath),
  73. new SQLiteParameter("@Memo",detail.Memo)
  74. };
  75. // 执行插入操作并返回受影响的行数
  76. return SQLiteHelper.ExecuteNonQuery(sql, parameters) > 0;
  77. }
  78. public static bool UpdateSingleDetailByConfig(TSingleDetail detail)
  79. {
  80. // 定义 SQL 更新语句
  81. string sql = @"
  82. UPDATE t_single_detail
  83. SET meter_type = @MeterType,
  84. digit_count = @DigitCount,
  85. pointer_count = @PointerCount,
  86. last_unit = @LastUnit,
  87. num_in_upper = @NumInUpper,
  88. bright_val = @BrightVal,
  89. flow_rate = @FlowRate,
  90. meter_region = @MeterRegion,
  91. feature_region = @FeatureRegion,
  92. last_value = @LastValue,
  93. last_time = @LastTime
  94. WHERE single_detail_id = @SingleDetailId;";
  95. // 创建 SQL 参数
  96. SQLiteParameter[] parameters = new SQLiteParameter[]
  97. {
  98. new SQLiteParameter("@SingleDetailId", detail.SingleDetailId),
  99. new SQLiteParameter("@MeterType", detail.MeterType),
  100. new SQLiteParameter("@DigitCount", detail.DigitCount),
  101. new SQLiteParameter("@PointerCount", detail.PointerCount),
  102. new SQLiteParameter("@LastUnit", detail.LastUnit),
  103. new SQLiteParameter("@NumInUpper",detail.NumInUpper),
  104. new SQLiteParameter("@BrightVal", detail.BrightVal),
  105. new SQLiteParameter("@FlowRate", detail.FlowRate),
  106. new SQLiteParameter("@MeterRegion", detail.MeterRegion),
  107. new SQLiteParameter("@FeatureRegion", detail.FeatureRegion),
  108. new SQLiteParameter("@LastValue", detail.LastValue),
  109. new SQLiteParameter("@LastTime", detail.LastTime)
  110. };
  111. // 执行更新操作并返回受影响的行数
  112. return SQLiteHelper.ExecuteNonQuery(sql, parameters) > 0;
  113. }
  114. //识别结果引发的更改
  115. public static bool UpdateSingleDetailByResult(TSingleDetail detail)
  116. {
  117. // 定义 SQL 更新语句
  118. string sql = @"
  119. UPDATE t_single_detail
  120. SET run_flag = @RunFlag,
  121. run_time = @RunTime,
  122. dst_image = @DstImage,
  123. result_type = @ResultType,
  124. raw_value = @RawValue,
  125. final_value = @FinalValue,
  126. complete_value = @CompleteValue,
  127. result_meter = @ResultMeter,
  128. ai_ver = @AiVer,
  129. debug_info = @DebugInfo,
  130. log_path = @LogPath,
  131. memo = @Memo,
  132. meter_type = @MeterType,
  133. last_unit = @LastUnit
  134. WHERE single_detail_id = @SingleDetailId;";
  135. // 创建 SQL 参数
  136. SQLiteParameter[] parameters = new SQLiteParameter[]
  137. {
  138. new SQLiteParameter("@SingleDetailId", detail.SingleDetailId),
  139. new SQLiteParameter("@RunFlag", detail.RunFlag),
  140. new SQLiteParameter("@RunTime", detail.RunTime),
  141. new SQLiteParameter("@DstImage", detail.DstImage),
  142. new SQLiteParameter("@LastUnit", detail.LastUnit),
  143. new SQLiteParameter("@ResultType", detail.ResultType),
  144. new SQLiteParameter("@RawValue", detail.RawValue),
  145. new SQLiteParameter("@FinalValue", detail.FinalValue),
  146. new SQLiteParameter("@CompleteValue",detail.CompleteValue),
  147. new SQLiteParameter("@ResultMeter", detail.ResultMeter),
  148. new SQLiteParameter("@AiVer", detail.AiVer),
  149. new SQLiteParameter("@DebugInfo", detail.DebugInfo),
  150. new SQLiteParameter("@LogPath", detail.LogPath),
  151. new SQLiteParameter("@Memo",detail.Memo),
  152. new SQLiteParameter("@MeterType",detail.MeterType),
  153. new SQLiteParameter("@LastUnit",detail.LastUnit)
  154. };
  155. // 执行更新操作并返回受影响的行数
  156. return SQLiteHelper.ExecuteNonQuery(sql, parameters) > 0;
  157. }
  158. //更改备注信息
  159. public static bool UpdateSingleDetailMemo(string detailId,string memo)
  160. {
  161. // 定义 SQL 更新语句
  162. string sql = @"
  163. UPDATE t_single_detail
  164. SET memo = @Memo
  165. WHERE single_detail_id = @SingleDetailId;";
  166. // 创建 SQL 参数
  167. SQLiteParameter[] parameters = new SQLiteParameter[]
  168. {
  169. new SQLiteParameter("@SingleDetailId", detailId),
  170. new SQLiteParameter("@Memo", memo)
  171. };
  172. // 执行更新操作并返回受影响的行数
  173. return SQLiteHelper.ExecuteNonQuery(sql, parameters) > 0;
  174. }
  175. public static Tuple<int,int, List<TSingleDetail>> GetPagedSingleDetails(int pageNumber, int pageSize)
  176. {
  177. // 计算 OFFSET 值
  178. int offset = (pageNumber - 1) * pageSize;
  179. // 定义 SQL 查询语句,带有分页
  180. string sql = @"
  181. SELECT single_detail_id, create_time, src_image, run_flag, run_time,
  182. dst_image, meter_type, digit_count, pointer_count, last_unit,num_in_upper,
  183. result_type, raw_value, final_value, complete_value, result_meter,ai_ver,
  184. debug_info, log_path, memo,device_sn, sample_time,
  185. bright_val,flow_rate,meter_region,feature_region,last_value,last_time
  186. FROM t_single_detail
  187. ORDER BY create_time DESC
  188. LIMIT @PageSize OFFSET @Offset;";
  189. // 创建 SQL 参数
  190. SQLiteParameter[] parameters = new SQLiteParameter[]
  191. {
  192. new SQLiteParameter("@PageSize", pageSize),
  193. new SQLiteParameter("@Offset", offset)
  194. };
  195. // 执行查询并获取结果
  196. List<TSingleDetail> details = new List<TSingleDetail>();
  197. using (SQLiteDataReader reader = SQLiteHelper.ExecuteReader(sql, parameters))
  198. {
  199. while (reader.Read())
  200. {
  201. // 将查询结果映射到 TSingleDetail 对象
  202. TSingleDetail detail = new TSingleDetail
  203. {
  204. SingleDetailId = reader.GetString(reader.GetOrdinal("single_detail_id")),
  205. CreateTime = reader.GetString(reader.GetOrdinal("create_time")),
  206. SrcImage = reader.GetString(reader.GetOrdinal("src_image")),
  207. RunFlag = reader.GetInt32(reader.GetOrdinal("run_flag")),
  208. RunTime = reader.GetString(reader.GetOrdinal("run_time")),
  209. DstImage = reader.GetString(reader.GetOrdinal("dst_image")),
  210. MeterType = reader.GetInt32(reader.GetOrdinal("meter_type")),
  211. DigitCount = reader.GetInt32(reader.GetOrdinal("digit_count")),
  212. PointerCount = reader.GetInt32(reader.GetOrdinal("pointer_count")),
  213. LastUnit = reader.GetDouble(reader.GetOrdinal("last_unit")),
  214. NumInUpper = reader.GetInt32(reader.GetOrdinal("num_in_upper")),
  215. ResultType = reader.GetInt32(reader.GetOrdinal("result_type")),
  216. RawValue = reader.GetInt64(reader.GetOrdinal("raw_value")),
  217. FinalValue = reader.GetInt64(reader.GetOrdinal("final_value")),
  218. CompleteValue = reader.GetInt64(reader.GetOrdinal("complete_value")),
  219. ResultMeter = reader.GetInt32(reader.GetOrdinal("result_meter")),
  220. AiVer = reader.GetString(reader.GetOrdinal("ai_ver")),
  221. DebugInfo = reader.GetString(reader.GetOrdinal("debug_info")),
  222. LogPath = reader.GetString(reader.GetOrdinal("log_path")),
  223. Memo = reader.GetString(reader.GetOrdinal("memo")),
  224. DeviceSn = reader.GetString(reader.GetOrdinal("device_sn")),
  225. SampleTime = reader.GetString(reader.GetOrdinal("sample_time")),
  226. BrightVal = reader.GetDouble(reader.GetOrdinal("bright_val")),
  227. FlowRate = reader.GetInt32(reader.GetOrdinal("flow_rate")),
  228. MeterRegion = reader.GetString(reader.GetOrdinal("meter_region")),
  229. FeatureRegion = reader.GetString(reader.GetOrdinal("feature_region")),
  230. LastValue = reader.GetDouble(reader.GetOrdinal("last_value")),
  231. LastTime = reader.GetString(reader.GetOrdinal("last_time"))
  232. };
  233. details.Add(detail);
  234. }
  235. }
  236. // 获取总记录数,用于计算总页数
  237. string countSql = "SELECT COUNT(*) FROM t_single_detail";
  238. int totalRecords = Convert.ToInt32(SQLiteHelper.GetSingle(countSql));
  239. // 计算总页数
  240. int totalPages = (int)Math.Ceiling((double)totalRecords / pageSize);
  241. // 返回元组,包含总页数和结果列表
  242. return Tuple.Create(totalRecords,totalPages, details);
  243. }
  244. /// <summary>
  245. /// 根据 single_detail_id 删除指定的记录
  246. /// </summary>
  247. /// <param name="singleDetailId">要删除的记录的 ID</param>
  248. /// <returns>删除成功返回 true,否则返回 false</returns>
  249. public static bool DeleteTSingleDetailById(string singleDetailId)
  250. {
  251. // 构建删除的 SQL 语句
  252. string sql = "DELETE FROM t_single_detail WHERE single_detail_id = @SingleDetailId";
  253. // 创建参数数组
  254. SQLiteParameter[] parameters = new SQLiteParameter[]
  255. {
  256. new SQLiteParameter("@SingleDetailId", singleDetailId)
  257. };
  258. try
  259. {
  260. // 调用 SQLiteHelper 执行删除操作
  261. int rowsAffected = SQLiteHelper.ExecuteSql(sql, parameters);
  262. // 如果删除成功,返回 true,否则返回 false
  263. return rowsAffected > 0;
  264. }
  265. catch (Exception ex)
  266. {
  267. // 处理异常(如果有的话)
  268. Console.WriteLine("Error deleting data: " + ex.Message);
  269. return false;
  270. }
  271. }
  272. /// <summary>
  273. /// 清空 t_single_detail 表中的所有记录
  274. /// </summary>
  275. /// <returns>操作成功返回 true,否则返回 false</returns>
  276. public static bool ClearTSingleDetailTable()
  277. {
  278. // 构建清空表的 SQL 语句
  279. string sql = "DELETE FROM t_single_detail";
  280. try
  281. {
  282. // 调用 SQLiteHelper 执行清空操作
  283. SQLiteHelper.ExecuteSql(sql, null);
  284. // 返回 true 表示操作成功
  285. return true;
  286. }
  287. catch (Exception ex)
  288. {
  289. // 处理异常(如果有的话)
  290. Console.WriteLine("Error clearing table: " + ex.Message);
  291. return false;
  292. }
  293. }
  294. //升级数据库(t_patch_detail添加memo字段)
  295. public static void UpdateTSingleDetailSchema()
  296. {
  297. string sql = "PRAGMA table_info(t_single_detail)";
  298. // 查询表结构,判断是否存在memo字段
  299. using (SQLiteDataReader reader = SQLiteHelper.ExecuteReader(sql))
  300. {
  301. bool memoExists = false;
  302. while (reader.Read())
  303. {
  304. if (reader["name"].ToString().ToLower() == "memo")
  305. {
  306. memoExists = true;
  307. break;
  308. }
  309. }
  310. reader.Close();
  311. //如果不存在memo字段,则添加该字段
  312. if (!memoExists)
  313. {
  314. sql = "ALTER TABLE t_single_detail ADD COLUMN memo TEXT NOT NULL DEFAULT ''";
  315. SQLiteHelper.ExecuteNonQuery(sql, null);
  316. }
  317. }//using
  318. }
  319. //-----------------------------------------------------------------------------------------
  320. }
  321. }