DBPatch.cs 36 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810
  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 DBPatch
  11. {
  12. public static bool InsertTPatch(TPatch tPatch)
  13. {
  14. // 构建插入的 SQL 语句
  15. string sql = "INSERT INTO t_patch (patch_id, create_time, patch_name,stand_id,stand_name) " +
  16. "VALUES (@PatchId, @CreateTime, @PatchName, @StandId, @StandName)";
  17. // 创建参数数组
  18. SQLiteParameter[] parameters = new SQLiteParameter[]
  19. {
  20. new SQLiteParameter("@PatchId", tPatch.PatchId),
  21. new SQLiteParameter("@CreateTime", tPatch.CreateTime),
  22. new SQLiteParameter("@PatchName", tPatch.PatchName),
  23. new SQLiteParameter("@StandId", tPatch.StandId),
  24. new SQLiteParameter("@StandName", tPatch.StandName),
  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 DeletePatchAndDetails(string patchId)
  41. {
  42. // 定义删除的 SQL 语句,使用事务来保证一致性
  43. string sql = @"
  44. BEGIN TRANSACTION;
  45. -- 删除 t_patch_detail 表中与 stand_id 相关的数据
  46. DELETE FROM t_patch_detail WHERE patch_id = @PatchId;
  47. -- 删除 t_patch 表中与 patch_id 相关的数据
  48. DELETE FROM t_patch WHERE patch_id = @PatchId;
  49. COMMIT;";
  50. // 创建参数
  51. SQLiteParameter[] parameters = new SQLiteParameter[]
  52. {
  53. new SQLiteParameter("@PatchId", patchId)
  54. };
  55. try
  56. {
  57. // 执行 SQL 删除操作
  58. int rowsAffected = SQLiteHelper.ExecuteSql(sql, parameters);
  59. // 返回是否成功删除
  60. return rowsAffected > 0;
  61. }
  62. catch (Exception ex)
  63. {
  64. // 处理异常(如果有的话)
  65. Console.WriteLine("Error deleting data: " + ex.Message);
  66. return false;
  67. }
  68. }
  69. public static Tuple<int,int, List<VPatch>> GetPagedVPatchs(int pageNumber, int pageSize)
  70. {
  71. // 计算 OFFSET 值
  72. int offset = (pageNumber - 1) * pageSize;
  73. // 定义 SQL 查询语句,带有分页
  74. string sql = @"
  75. SELECT patch_id, create_time, patch_name, stand_id, stand_name, detail_count,run_count,equal_count
  76. FROM v_patch ORDER BY create_time DESC
  77. LIMIT @PageSize OFFSET @Offset;";
  78. // 创建 SQL 参数
  79. SQLiteParameter[] parameters = new SQLiteParameter[]
  80. {
  81. new SQLiteParameter("@PageSize", pageSize),
  82. new SQLiteParameter("@Offset", offset)
  83. };
  84. // 执行查询并获取结果
  85. List<VPatch> patchs = new List<VPatch>();
  86. using (SQLiteDataReader reader = SQLiteHelper.ExecuteReader(sql, parameters))
  87. {
  88. while (reader.Read())
  89. {
  90. // 将查询结果映射到 TStand 对象
  91. VPatch patch = new VPatch
  92. {
  93. PatchId = reader.GetString(reader.GetOrdinal("patch_id")),
  94. CreateTime = reader.GetString(reader.GetOrdinal("create_time")),
  95. PatchName = reader.GetString(reader.GetOrdinal("patch_name")),
  96. StandId = reader.GetString(reader.GetOrdinal("stand_id")),
  97. StandName = reader.GetString(reader.GetOrdinal("stand_name")),
  98. DetailCount = reader.GetInt32(reader.GetOrdinal("detail_count")),
  99. RunCount = reader.GetInt32(reader.GetOrdinal("run_count")),
  100. EqualCount = reader.GetInt32(reader.GetOrdinal("equal_count"))
  101. };
  102. patchs.Add(patch);
  103. }
  104. }
  105. // 获取总记录数,用于计算总页数
  106. string countSql = "SELECT COUNT(*) FROM v_patch";
  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, patchs);
  112. }
  113. public static bool InsertPatchDetail(TPatchDetail patchDetail)
  114. {
  115. // 插入SQL语句
  116. string sql = @"
  117. INSERT INTO t_patch_detail (patch_detail_id, patch_id, create_time, stand_detail_id, stand_value, src_image)
  118. VALUES (@PatchDetailId, @PatchId, @CreateTime, @StandDetailId, @StandValue, @SrcImage);";
  119. // 定义参数
  120. SQLiteParameter[] parameters = new SQLiteParameter[]
  121. {
  122. new SQLiteParameter("@PatchDetailId", patchDetail.PatchDetailId),
  123. new SQLiteParameter("@PatchId", patchDetail.PatchId),
  124. new SQLiteParameter("@CreateTime", patchDetail.CreateTime),
  125. new SQLiteParameter("@StandDetailId", patchDetail.StandDetailId),
  126. new SQLiteParameter("@StandValue", patchDetail.StandValue),
  127. new SQLiteParameter("@SrcImage", patchDetail.SrcImage)
  128. };
  129. // 执行插入操作
  130. try
  131. {
  132. int rowsAffected = SQLiteHelper.ExecuteNonQuery(sql, parameters);
  133. return rowsAffected > 0; // 返回是否成功插入
  134. }
  135. catch (Exception ex)
  136. {
  137. // 处理异常
  138. Console.WriteLine(ex.Message);
  139. return false;
  140. }
  141. }
  142. public static bool InsertPatchDetails(List<TPatchDetail> patchDetails)
  143. {
  144. // 插入SQL语句
  145. string sql = @"
  146. INSERT INTO t_patch_detail (patch_detail_id, patch_id, create_time, stand_detail_id, stand_value, src_image)
  147. VALUES (@PatchDetailId, @PatchId, @CreateTime, @StandDetailId, @StandValue, @SrcImage);";
  148. try
  149. {
  150. // 开始事务
  151. using (SQLiteConnection connection = SQLiteHelper.GetConnection())
  152. {
  153. connection.Open();
  154. using (SQLiteTransaction transaction = connection.BeginTransaction())
  155. {
  156. // 遍历列表插入每一条数据
  157. foreach (var patchDetail in patchDetails)
  158. {
  159. SQLiteParameter[] parameters = new SQLiteParameter[]
  160. {
  161. new SQLiteParameter("@PatchDetailId", patchDetail.PatchDetailId),
  162. new SQLiteParameter("@PatchId", patchDetail.PatchId),
  163. new SQLiteParameter("@CreateTime", patchDetail.CreateTime),
  164. new SQLiteParameter("@StandDetailId", patchDetail.StandDetailId),
  165. new SQLiteParameter("@StandValue", patchDetail.StandValue),
  166. new SQLiteParameter("@SrcImage", patchDetail.SrcImage)
  167. };
  168. // 执行插入操作
  169. SQLiteHelper.ExecuteNonQuery(sql, parameters, transaction);
  170. }
  171. // 提交事务
  172. transaction.Commit();
  173. }
  174. }
  175. return true;
  176. }
  177. catch (Exception ex)
  178. {
  179. // 处理异常
  180. Console.WriteLine(ex.Message);
  181. return false;
  182. }
  183. }
  184. //根据识别结果修改表内容
  185. public static bool UpdatePatchDetailWithResult(TPatchDetail detail)
  186. {
  187. string sql = @"
  188. UPDATE t_patch_detail
  189. SET run_flag = @RunFlag,
  190. run_time = @RunTime,
  191. dst_image = @DstImage,
  192. meter_type = @MeterType,
  193. digit_count = @DigitCount,
  194. pointer_count = @PointerCount,
  195. last_unit = @LastUnit,
  196. result_type = @ResultType,
  197. raw_value = @RawValue,
  198. final_value = @FinalValue,
  199. equal_flag = @EqualFlag,
  200. ai_ver = @AiVer,
  201. debug_info = @DebugInfo,
  202. log_path = @LogPath
  203. WHERE patch_detail_id = @PatchDetailId;";
  204. // 创建 SQL 参数
  205. SQLiteParameter[] parameters = new SQLiteParameter[]
  206. {
  207. new SQLiteParameter("@PatchDetailId", detail.PatchDetailId),
  208. new SQLiteParameter("@RunFlag", detail.RunFlag),
  209. new SQLiteParameter("@RunTime", detail.RunTime),
  210. new SQLiteParameter("@DstImage", detail.DstImage),
  211. new SQLiteParameter("@MeterType", detail.MeterType),
  212. new SQLiteParameter("@DigitCount", detail.DigitCount),
  213. new SQLiteParameter("@PointerCount", detail.PointerCount),
  214. new SQLiteParameter("@LastUnit", detail.LastUnit),
  215. new SQLiteParameter("@ResultType", detail.ResultType),
  216. new SQLiteParameter("@RawValue", detail.RawValue),
  217. new SQLiteParameter("@FinalValue", detail.FinalValue),
  218. new SQLiteParameter("@EqualFlag", detail.EqualFlag),
  219. new SQLiteParameter("@AiVer", detail.AiVer),
  220. new SQLiteParameter("@DebugInfo", detail.DebugInfo),
  221. new SQLiteParameter("@LogPath", detail.LogPath)
  222. };
  223. // 执行更新操作并返回受影响的行数
  224. return SQLiteHelper.ExecuteNonQuery(sql, parameters) > 0;
  225. }
  226. public static bool UpdatePatchDetailStandValue(string patchDetailId,string standValue,int equalFlag)
  227. {
  228. string sql = @"
  229. UPDATE t_patch_detail
  230. SET stand_value = @StandValue,
  231. equal_flag = @EqualFlag
  232. WHERE patch_detail_id = @PatchDetailId;";
  233. // 创建 SQL 参数
  234. SQLiteParameter[] parameters = new SQLiteParameter[]
  235. {
  236. new SQLiteParameter("@PatchDetailId", patchDetailId),
  237. new SQLiteParameter("@EqualFlag", equalFlag),
  238. new SQLiteParameter("@StandValue", standValue)
  239. };
  240. // 执行更新操作并返回受影响的行数
  241. return SQLiteHelper.ExecuteNonQuery(sql, parameters) > 0;
  242. }
  243. //同时插入t_patch与t_patch_detail(在一个事务中)
  244. public static bool InsertPatchAndDetails(TPatch patch, List<TPatchDetail> patchDetails)
  245. {
  246. try
  247. {
  248. using (SQLiteConnection connection = SQLiteHelper.GetConnection())
  249. {
  250. connection.Open();
  251. using (SQLiteTransaction transaction = connection.BeginTransaction())
  252. {
  253. // 插入 t_patch 表
  254. string patchSql = "INSERT INTO t_patch (patch_id, create_time, patch_name, stand_id, stand_name) VALUES (@PatchId, @CreateTime, @PatchName, @StandId, @StandName)";
  255. SQLiteParameter[] patchParams = new SQLiteParameter[]
  256. {
  257. new SQLiteParameter("@PatchId", patch.PatchId),
  258. new SQLiteParameter("@CreateTime", patch.CreateTime),
  259. new SQLiteParameter("@PatchName", patch.PatchName),
  260. new SQLiteParameter("@StandId", patch.StandId),
  261. new SQLiteParameter("@StandName", patch.StandName)
  262. };
  263. SQLiteHelper.ExecuteNonQuery(patchSql, patchParams, transaction);
  264. // 插入 t_patch_detail 表
  265. foreach (var patchDetail in patchDetails)
  266. {
  267. string detailSql = "INSERT INTO t_patch_detail (patch_detail_id, patch_id, create_time, stand_detail_id, stand_value, src_image) VALUES (@PatchDetailId, @PatchId, @CreateTime, @StandDetailId, @StandValue, @SrcImage)";
  268. SQLiteParameter[] detailParams = new SQLiteParameter[]
  269. {
  270. new SQLiteParameter("@PatchDetailId", patchDetail.PatchDetailId),
  271. new SQLiteParameter("@PatchId", patchDetail.PatchId),
  272. new SQLiteParameter("@CreateTime", patchDetail.CreateTime),
  273. new SQLiteParameter("@StandDetailId", patchDetail.StandDetailId),
  274. new SQLiteParameter("@StandValue", patchDetail.StandValue),
  275. new SQLiteParameter("@SrcImage", patchDetail.SrcImage)
  276. };
  277. SQLiteHelper.ExecuteNonQuery(detailSql, detailParams, transaction);
  278. }
  279. // 提交事务
  280. transaction.Commit();
  281. return true;
  282. }
  283. }
  284. }
  285. catch (Exception ex)
  286. {
  287. Console.WriteLine($"插入数据失败:{ex.Message}");
  288. return false;
  289. }
  290. }
  291. public static Tuple<int, int, List<TPatchDetail>> GetPagedPatchDetails(int pageNumber, int pageSize, string patchId)
  292. {
  293. // 计算偏移量
  294. int offset = (pageNumber - 1) * pageSize;
  295. // 分页查询SQL
  296. //string sql = @"
  297. // SELECT patch_detail_id, patch_id, create_time, stand_detail_id, stand_value, src_image,
  298. // run_flag, run_time, dst_image, meter_type, digit_count, pointer_count,
  299. // last_unit, result_type, raw_value, final_value, equal_flag, ai_ver, debug_info, log_path
  300. // FROM t_patch_detail WHERE patch_id = @PatchId
  301. // ORDER BY create_time DESC -- 根据需要修改排序字段
  302. // LIMIT @PageSize OFFSET @Offset;";
  303. string sql = @"
  304. SELECT patch_detail_id, patch_id, create_time, stand_detail_id, stand_value, src_image,
  305. run_flag, run_time, dst_image, meter_type, digit_count, pointer_count,
  306. last_unit, result_type, raw_value, final_value, equal_flag, ai_ver, debug_info, log_path, memo
  307. FROM t_patch_detail WHERE patch_id = @PatchId
  308. ORDER BY create_time ASC -- 根据需要修改排序字段
  309. LIMIT @PageSize OFFSET @Offset;";
  310. // 定义参数
  311. SQLiteParameter[] parameters = new SQLiteParameter[]
  312. {
  313. new SQLiteParameter("@PatchId", patchId),
  314. new SQLiteParameter("@PageSize", pageSize),
  315. new SQLiteParameter("@Offset", offset)
  316. };
  317. // 执行查询并读取数据
  318. List<TPatchDetail> patchDetails = new List<TPatchDetail>();
  319. using (SQLiteDataReader reader = SQLiteHelper.ExecuteReader(sql, parameters))
  320. {
  321. while (reader.Read())
  322. {
  323. // 将查询结果映射到 TPatchDetail 对象
  324. TPatchDetail patchDetail = new TPatchDetail
  325. {
  326. PatchDetailId = reader.GetString(reader.GetOrdinal("patch_detail_id")),
  327. PatchId = reader.GetString(reader.GetOrdinal("patch_id")),
  328. CreateTime = reader.GetString(reader.GetOrdinal("create_time")),
  329. StandDetailId = reader.GetString(reader.GetOrdinal("stand_detail_id")),
  330. StandValue = reader.GetString(reader.GetOrdinal("stand_value")),
  331. SrcImage = reader.GetString(reader.GetOrdinal("src_image")),
  332. RunFlag = reader.GetInt32(reader.GetOrdinal("run_flag")),
  333. RunTime = reader.GetString(reader.GetOrdinal("run_time")),
  334. DstImage = reader.GetString(reader.GetOrdinal("dst_image")),
  335. MeterType = reader.GetInt32(reader.GetOrdinal("meter_type")),
  336. DigitCount = reader.GetInt32(reader.GetOrdinal("digit_count")),
  337. PointerCount = reader.GetInt32(reader.GetOrdinal("pointer_count")),
  338. LastUnit = reader.GetString(reader.GetOrdinal("last_unit")),
  339. ResultType = reader.GetInt32(reader.GetOrdinal("result_type")),
  340. RawValue = reader.GetString(reader.GetOrdinal("raw_value")),
  341. FinalValue = reader.GetString(reader.GetOrdinal("final_value")),
  342. EqualFlag = reader.GetInt32(reader.GetOrdinal("equal_flag")),
  343. AiVer = reader.GetString(reader.GetOrdinal("ai_ver")),
  344. DebugInfo = reader.GetString(reader.GetOrdinal("debug_info")),
  345. LogPath = reader.GetString(reader.GetOrdinal("log_path")),
  346. Memo = reader.GetString(reader.GetOrdinal("memo"))
  347. };
  348. patchDetails.Add(patchDetail);
  349. }
  350. }
  351. // 获取总记录数,用于计算总页数
  352. string countSql = "SELECT COUNT(*) FROM t_patch_detail WHERE patch_id = @PatchId";
  353. int totalRecords = Convert.ToInt32(SQLiteHelper.GetSingle(countSql, new SQLiteParameter("@PatchId", patchId)));
  354. // 计算总页数
  355. int totalPages = (int)Math.Ceiling((double)totalRecords / pageSize);
  356. // 返回总记录数、总页数和分页结果
  357. return Tuple.Create(totalRecords, totalPages, patchDetails);
  358. }
  359. public static Tuple<int, int, List<TPatchDetail>> GetPagedPatchDetails(PatchFindModel findModel)
  360. {
  361. // 计算偏移量
  362. int offset = (findModel.PageNumber - 1) * findModel.PageSize;
  363. // 动态构造 WHERE 子句
  364. StringBuilder whereClause = new StringBuilder("WHERE patch_id = @PatchId");
  365. List<SQLiteParameter> parameters = new List<SQLiteParameter>
  366. {
  367. new SQLiteParameter("@PatchId", findModel.PatchId),
  368. new SQLiteParameter("@PageSize", findModel.PageSize),
  369. new SQLiteParameter("@Offset", offset)
  370. };
  371. if (findModel.RunFlag >= 0)
  372. {
  373. whereClause.Append(" AND run_flag = @RunFlag");
  374. parameters.Add(new SQLiteParameter("@RunFlag", findModel.RunFlag));
  375. }
  376. if (findModel.EqualFlag >= 0)
  377. {
  378. whereClause.Append(" AND equal_flag = @EqualFlag");
  379. parameters.Add(new SQLiteParameter("@EqualFlag", findModel.EqualFlag));
  380. }
  381. if(findModel.PatchFindType == Patch.PatchFindType.HAVE_MEMO)
  382. {
  383. whereClause.Append(" AND memo != ''");
  384. //parameters.Add(new SQLiteParameter("@EqualFlag", findModel.EqualFlag));
  385. }
  386. //if (findModel.EqualFlag == 2) // 针对无标准值的查询条件
  387. //{
  388. // whereClause.Append(" AND stand_value = ''");
  389. //}
  390. // 分页查询SQL
  391. string sql = $@"
  392. SELECT patch_detail_id, patch_id, create_time, stand_detail_id, stand_value, src_image,
  393. run_flag, run_time, dst_image, meter_type, digit_count, pointer_count,
  394. last_unit, result_type, raw_value, final_value, equal_flag, ai_ver, debug_info, log_path, memo
  395. FROM t_patch_detail
  396. {whereClause}
  397. ORDER BY create_time ASC -- 根据需要修改排序字段
  398. LIMIT @PageSize OFFSET @Offset;";
  399. // 执行查询并读取数据
  400. List<TPatchDetail> patchDetails = new List<TPatchDetail>();
  401. using (SQLiteDataReader reader = SQLiteHelper.ExecuteReader(sql, parameters.ToArray()))
  402. {
  403. while (reader.Read())
  404. {
  405. TPatchDetail patchDetail = new TPatchDetail
  406. {
  407. PatchDetailId = reader.GetString(reader.GetOrdinal("patch_detail_id")),
  408. PatchId = reader.GetString(reader.GetOrdinal("patch_id")),
  409. CreateTime = reader.GetString(reader.GetOrdinal("create_time")),
  410. StandDetailId = reader.GetString(reader.GetOrdinal("stand_detail_id")),
  411. StandValue = reader.GetString(reader.GetOrdinal("stand_value")),
  412. SrcImage = reader.GetString(reader.GetOrdinal("src_image")),
  413. RunFlag = reader.GetInt32(reader.GetOrdinal("run_flag")),
  414. RunTime = reader.GetString(reader.GetOrdinal("run_time")),
  415. DstImage = reader.GetString(reader.GetOrdinal("dst_image")),
  416. MeterType = reader.GetInt32(reader.GetOrdinal("meter_type")),
  417. DigitCount = reader.GetInt32(reader.GetOrdinal("digit_count")),
  418. PointerCount = reader.GetInt32(reader.GetOrdinal("pointer_count")),
  419. LastUnit = reader.GetString(reader.GetOrdinal("last_unit")),
  420. ResultType = reader.GetInt32(reader.GetOrdinal("result_type")),
  421. RawValue = reader.GetString(reader.GetOrdinal("raw_value")),
  422. FinalValue = reader.GetString(reader.GetOrdinal("final_value")),
  423. EqualFlag = reader.GetInt32(reader.GetOrdinal("equal_flag")),
  424. AiVer = reader.GetString(reader.GetOrdinal("ai_ver")),
  425. DebugInfo = reader.GetString(reader.GetOrdinal("debug_info")),
  426. LogPath = reader.GetString(reader.GetOrdinal("log_path")),
  427. Memo = reader.GetString(reader.GetOrdinal("memo"))
  428. };
  429. patchDetails.Add(patchDetail);
  430. }
  431. }
  432. // 获取总记录数,用于计算总页数
  433. string countSql = "SELECT COUNT(*) FROM t_patch_detail " + whereClause;
  434. int totalRecords = Convert.ToInt32(SQLiteHelper.GetSingle(countSql, parameters.ToArray()));
  435. // 计算总页数
  436. int totalPages = (int)Math.Ceiling((double)totalRecords / findModel.PageSize);
  437. // 返回总记录数、总页数和分页结果
  438. return Tuple.Create(totalRecords, totalPages, patchDetails);
  439. }
  440. public static VPatch GetVPatchById(string patchId)
  441. {
  442. VPatch vPatch = null;
  443. // 查询 SQL,从 v_patch 视图中获取数据
  444. string query = @"
  445. SELECT
  446. patch_id,
  447. create_time,
  448. patch_name,
  449. stand_id,
  450. stand_name,
  451. detail_count,
  452. run_count,
  453. equal_count
  454. FROM v_patch
  455. WHERE patch_id = @PatchId;";
  456. // 构造参数
  457. SQLiteParameter[] parameters = new SQLiteParameter[]
  458. {
  459. new SQLiteParameter("@PatchId", patchId)
  460. };
  461. // 执行查询
  462. using (SQLiteDataReader reader = SQLiteHelper.ExecuteReader(query, parameters))
  463. {
  464. if (reader.Read())
  465. {
  466. vPatch = new VPatch
  467. {
  468. PatchId = reader["patch_id"].ToString(),
  469. CreateTime = reader["create_time"].ToString(),
  470. PatchName = reader["patch_name"].ToString(),
  471. StandId = reader["stand_id"].ToString(),
  472. StandName = reader["stand_name"].ToString(),
  473. DetailCount = reader["detail_count"] == DBNull.Value ? 0 : Convert.ToInt32(reader["detail_count"]),
  474. RunCount = reader["run_count"] == DBNull.Value ? 0 : Convert.ToInt32(reader["run_count"]),
  475. EqualCount = reader["equal_count"] == DBNull.Value ? 0 : Convert.ToInt32(reader["equal_count"])
  476. };
  477. }
  478. }
  479. return vPatch;
  480. }
  481. //获取所有的识别任务
  482. public static List<VPatch> GetAllVPatchs()
  483. {
  484. // 定义 SQL 查询语句,带有分页
  485. string sql = @"
  486. SELECT
  487. patch_id,
  488. create_time,
  489. patch_name,
  490. stand_id,
  491. stand_name,
  492. detail_count,
  493. run_count,
  494. equal_count
  495. FROM v_patch WHERE detail_count = run_count
  496. ORDER BY create_time DESC";
  497. // 执行查询并获取结果
  498. List<VPatch> patchs = new List<VPatch>();
  499. using (SQLiteDataReader reader = SQLiteHelper.ExecuteReader(sql))
  500. {
  501. while (reader.Read())
  502. {
  503. // 将查询结果映射到 TStand 对象
  504. VPatch patch = new VPatch
  505. {
  506. PatchId = reader["patch_id"].ToString(),
  507. CreateTime = reader["create_time"].ToString(),
  508. PatchName = reader["patch_name"].ToString(),
  509. StandId = reader["stand_id"].ToString(),
  510. StandName = reader["stand_name"].ToString(),
  511. DetailCount = reader["detail_count"] == DBNull.Value ? 0 : Convert.ToInt32(reader["detail_count"]),
  512. RunCount = reader["run_count"] == DBNull.Value ? 0 : Convert.ToInt32(reader["run_count"]),
  513. EqualCount = reader["equal_count"] == DBNull.Value ? 0 : Convert.ToInt32(reader["equal_count"])
  514. };
  515. patchs.Add(patch);
  516. }
  517. }
  518. return patchs;
  519. }
  520. public static List<TPatchDetail> GetPatchDetailsWithRunFlagZero(string patchId)
  521. {
  522. // 查询 SQL
  523. //string sql = @"
  524. // SELECT patch_detail_id, patch_id, create_time, stand_detail_id, stand_value, src_image,
  525. // run_flag, run_time, dst_image, meter_type, digit_count, pointer_count,
  526. // last_unit, result_type, raw_value, final_value, equal_flag, ai_ver, debug_info, log_path
  527. // FROM t_patch_detail
  528. // WHERE patch_id = @PatchId AND run_flag = 0
  529. // ORDER BY create_time AESC;"; // 可以根据需要修改排序字段
  530. string sql = @"
  531. SELECT patch_detail_id, patch_id, create_time, stand_detail_id, stand_value, src_image
  532. FROM t_patch_detail
  533. WHERE patch_id = @PatchId AND run_flag = 0
  534. ORDER BY create_time ASC;"; // 可以根据需要修改排序字段
  535. // 定义参数
  536. SQLiteParameter[] parameters = new SQLiteParameter[]
  537. {
  538. new SQLiteParameter("@PatchId", patchId)
  539. };
  540. // 执行查询并读取数据
  541. List<TPatchDetail> patchDetails = new List<TPatchDetail>();
  542. using (SQLiteDataReader reader = SQLiteHelper.ExecuteReader(sql, parameters))
  543. {
  544. while (reader.Read())
  545. {
  546. // 将查询结果映射到 TPatchDetail 对象
  547. TPatchDetail patchDetail = new TPatchDetail
  548. {
  549. PatchDetailId = reader.GetString(reader.GetOrdinal("patch_detail_id")),
  550. PatchId = reader.GetString(reader.GetOrdinal("patch_id")),
  551. CreateTime = reader.GetString(reader.GetOrdinal("create_time")),
  552. StandDetailId = reader.GetString(reader.GetOrdinal("stand_detail_id")),
  553. StandValue = reader.GetString(reader.GetOrdinal("stand_value")),
  554. SrcImage = reader.GetString(reader.GetOrdinal("src_image")),
  555. //RunFlag = reader.GetInt32(reader.GetOrdinal("run_flag")),
  556. //RunTime = reader.GetString(reader.GetOrdinal("run_time")),
  557. //DstImage = reader.GetString(reader.GetOrdinal("dst_image")),
  558. //MeterType = reader.GetInt32(reader.GetOrdinal("meter_type")),
  559. //DigitCount = reader.GetInt32(reader.GetOrdinal("digit_count")),
  560. //PointerCount = reader.GetInt32(reader.GetOrdinal("pointer_count")),
  561. //LastUnit = reader.GetString(reader.GetOrdinal("last_unit")),
  562. //ResultType = reader.GetInt32(reader.GetOrdinal("result_type")),
  563. //RawValue = reader.GetString(reader.GetOrdinal("raw_value")),
  564. //FinalValue = reader.GetString(reader.GetOrdinal("final_value")),
  565. //EqualFlag = reader.GetInt32(reader.GetOrdinal("equal_flag")),
  566. //AiVer = reader.GetString(reader.GetOrdinal("ai_ver")),
  567. //DebugInfo = reader.GetString(reader.GetOrdinal("debug_info")),
  568. //LogPath = reader.GetString(reader.GetOrdinal("log_path"))
  569. };
  570. patchDetails.Add(patchDetail);
  571. }
  572. }
  573. return patchDetails;
  574. }
  575. public static int GetPatchDetailsCountWithRunFlagZero(string patchId)
  576. {
  577. // 查询数据数量的 SQL
  578. string sql = "SELECT COUNT(*) FROM t_patch_detail WHERE patch_id = @PatchId AND run_flag = 0";
  579. // 定义参数
  580. SQLiteParameter[] parameters = new SQLiteParameter[]
  581. {
  582. new SQLiteParameter("@PatchId", patchId)
  583. };
  584. // 执行查询并返回数据数量
  585. return Convert.ToInt32(SQLiteHelper.GetSingle(sql, parameters));
  586. }
  587. /// <summary>
  588. /// 根据 patch_detail_id 删除指定的记录
  589. /// </summary>
  590. /// <param name="patchDetailId">要删除的记录的 ID</param>
  591. /// <returns>删除成功返回 true,否则返回 false</returns>
  592. public static bool DeleteTPatchDetailById(string patchDetailId)
  593. {
  594. // 构建删除的 SQL 语句
  595. string sql = "DELETE FROM t_patch_detail WHERE patch_detail_id = @PatchDetailId";
  596. // 创建参数数组
  597. SQLiteParameter[] parameters = new SQLiteParameter[]
  598. {
  599. new SQLiteParameter("@PatchDetailId", patchDetailId)
  600. };
  601. try
  602. {
  603. // 调用 SQLiteHelper 执行删除操作
  604. int rowsAffected = SQLiteHelper.ExecuteSql(sql, parameters);
  605. // 如果删除成功,返回 true,否则返回 false
  606. return rowsAffected > 0;
  607. }
  608. catch (Exception ex)
  609. {
  610. // 处理异常(如果有的话)
  611. Console.WriteLine("Error deleting data: " + ex.Message);
  612. return false;
  613. }
  614. }
  615. /// <summary>
  616. /// 根据 standDetailId 删除t_patch_detail与t_stand_detail中相关的数据
  617. /// </summary>
  618. /// <param name="standDetailId">要删除的记录的 模板详情ID</param>
  619. /// <returns>删除成功返回 true,否则返回 false</returns>
  620. public static bool Delete_TPatchDetail_TStandDetail_ByStand(string standDetailId)
  621. {
  622. // 构建删除的 SQL 语句
  623. //string sql = "DELETE FROM t_patch_detail WHERE patch_detail_id = @PatchDetailId";
  624. // 定义删除的 SQL 语句,使用事务来保证一致性
  625. string sql = @"
  626. BEGIN TRANSACTION;
  627. -- 删除 t_patch_detail 表中与 stand_id 相关的数据
  628. DELETE FROM t_patch_detail WHERE stand_detail_id = @StandDetailId;
  629. -- 删除 t_patch 表中与 patch_id 相关的数据
  630. DELETE FROM t_stand_detail WHERE stand_detail_id = @StandDetailId;
  631. COMMIT;";
  632. // 创建参数数组
  633. SQLiteParameter[] parameters = new SQLiteParameter[]
  634. {
  635. new SQLiteParameter("@StandDetailId", standDetailId)
  636. };
  637. try
  638. {
  639. // 调用 SQLiteHelper 执行删除操作
  640. int rowsAffected = SQLiteHelper.ExecuteSql(sql, parameters);
  641. // 如果删除成功,返回 true,否则返回 false
  642. return rowsAffected > 0;
  643. }
  644. catch (Exception ex)
  645. {
  646. // 处理异常(如果有的话)
  647. Console.WriteLine("Error deleting data: " + ex.Message);
  648. return false;
  649. }
  650. }
  651. public static bool UpdatePatchName(string patchId, string patchName)
  652. {
  653. string sql = @"
  654. UPDATE t_patch
  655. SET patch_name = @PatchName
  656. WHERE patch_id = @PatchId;";
  657. // 创建 SQL 参数
  658. SQLiteParameter[] parameters = new SQLiteParameter[]
  659. {
  660. new SQLiteParameter("@PatchName", patchName),
  661. new SQLiteParameter("@PatchId", patchId)
  662. };
  663. // 执行更新操作并返回受影响的行数
  664. return SQLiteHelper.ExecuteNonQuery(sql, parameters) > 0;
  665. }
  666. public static bool UpdatePatchDetailMemo(string detailId,string memo)
  667. {
  668. // 定义 SQL 更新语句
  669. string sql = @"
  670. UPDATE t_patch_detail
  671. SET memo = @Memo
  672. WHERE patch_detail_id = @PatchDetailId;";
  673. // 创建 SQL 参数
  674. SQLiteParameter[] parameters = new SQLiteParameter[]
  675. {
  676. new SQLiteParameter("@PatchDetailId", detailId),
  677. new SQLiteParameter("@Memo", memo)
  678. };
  679. // 执行更新操作并返回受影响的行数
  680. return SQLiteHelper.ExecuteNonQuery(sql, parameters) > 0;
  681. }
  682. //升级数据库(t_patch_detail添加memo字段)
  683. public static void UpdateTPatchDetailSchema()
  684. {
  685. string sql = "PRAGMA table_info(t_patch_detail)";
  686. // 查询表结构,判断是否存在memo字段
  687. using (SQLiteDataReader reader = SQLiteHelper.ExecuteReader(sql))
  688. {
  689. bool memoExists = false;
  690. while (reader.Read())
  691. {
  692. if(reader["name"].ToString().ToLower() == "memo")
  693. {
  694. memoExists = true;
  695. break;
  696. }
  697. }
  698. reader.Close();
  699. //如果不存在memo字段,则添加该字段
  700. if (!memoExists)
  701. {
  702. sql = "ALTER TABLE t_patch_detail ADD COLUMN memo TEXT NOT NULL DEFAULT ''";
  703. SQLiteHelper.ExecuteNonQuery(sql, null);
  704. }
  705. }//using
  706. }
  707. //////////////////////////////////////////////////////////
  708. }
  709. }