DBSingle.cs 16 KB

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