DBPatch.cs 67 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404
  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,@JudgeLastnumFlag)";
  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. new SQLiteParameter("JudgeLastnumFlag",tPatch.JudgeLastnumFlag),
  26. };
  27. try
  28. {
  29. // 调用 SQLiteHelper 执行插入操作
  30. int rowsAffected = SQLiteHelper.ExecuteSql(sql, parameters);
  31. // 如果插入成功,返回 true,否则返回 false
  32. return rowsAffected > 0;
  33. }
  34. catch (Exception ex)
  35. {
  36. // 处理异常(如果有的话)
  37. Console.WriteLine("Error inserting data: " + ex.Message);
  38. return false;
  39. }
  40. }
  41. public static bool DeletePatchAndDetails(string patchId)
  42. {
  43. // 定义删除的 SQL 语句,使用事务来保证一致性
  44. string sql = @"
  45. BEGIN TRANSACTION;
  46. -- 删除 t_patch_detail 表中与 stand_id 相关的数据
  47. DELETE FROM t_patch_detail WHERE patch_id = @PatchId;
  48. -- 删除 t_patch 表中与 patch_id 相关的数据
  49. DELETE FROM t_patch WHERE patch_id = @PatchId;
  50. COMMIT;";
  51. // 创建参数
  52. SQLiteParameter[] parameters = new SQLiteParameter[]
  53. {
  54. new SQLiteParameter("@PatchId", patchId)
  55. };
  56. try
  57. {
  58. // 执行 SQL 删除操作
  59. int rowsAffected = SQLiteHelper.ExecuteSql(sql, parameters);
  60. // 返回是否成功删除
  61. return rowsAffected > 0;
  62. }
  63. catch (Exception ex)
  64. {
  65. // 处理异常(如果有的话)
  66. Console.WriteLine("Error deleting data: " + ex.Message);
  67. return false;
  68. }
  69. }
  70. public static Tuple<int,int, List<VPatch>> GetPagedVPatchs(int pageNumber, int pageSize)
  71. {
  72. // 计算 OFFSET 值
  73. int offset = (pageNumber - 1) * pageSize;
  74. // 定义 SQL 查询语句,带有分页
  75. string sql = @"
  76. SELECT patch_id, create_time, patch_name, stand_id, stand_name, judge_lastnum_flag,
  77. detail_count,run_count,equal_count,invalid_count,error_count
  78. FROM v_patch 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<VPatch> patchs = new List<VPatch>();
  88. using (SQLiteDataReader reader = SQLiteHelper.ExecuteReader(sql, parameters))
  89. {
  90. while (reader.Read())
  91. {
  92. // 将查询结果映射到 TStand 对象
  93. VPatch patch = new VPatch
  94. {
  95. PatchId = reader.GetString(reader.GetOrdinal("patch_id")),
  96. CreateTime = reader.GetString(reader.GetOrdinal("create_time")),
  97. PatchName = reader.GetString(reader.GetOrdinal("patch_name")),
  98. StandId = reader.GetString(reader.GetOrdinal("stand_id")),
  99. StandName = reader.GetString(reader.GetOrdinal("stand_name")),
  100. JudgeLastnumFlag = reader.GetInt32(reader.GetOrdinal("judge_lastnum_flag")),
  101. DetailCount = reader.GetInt32(reader.GetOrdinal("detail_count")),
  102. RunCount = reader.GetInt32(reader.GetOrdinal("run_count")),
  103. EqualCount = reader.GetInt32(reader.GetOrdinal("equal_count")),
  104. InvalidCount = reader.GetInt32(reader.GetOrdinal("invalid_count")),
  105. ErrorCount = reader.GetInt32(reader.GetOrdinal("error_count"))
  106. };
  107. patchs.Add(patch);
  108. }
  109. }
  110. // 获取总记录数,用于计算总页数
  111. string countSql = "SELECT COUNT(*) FROM v_patch";
  112. int totalRecords = Convert.ToInt32(SQLiteHelper.GetSingle(countSql));
  113. // 计算总页数
  114. int totalPages = (int)Math.Ceiling((double)totalRecords / pageSize);
  115. // 返回元组,包含总页数和结果列表
  116. return Tuple.Create(totalRecords,totalPages, patchs);
  117. }
  118. public static bool InsertPatchDetail(TPatchDetail patchDetail)
  119. {
  120. // 插入SQL语句
  121. string sql = @"
  122. INSERT INTO t_patch_detail (patch_detail_id, patch_id, create_time, stand_detail_id, stand_value, src_image, judge_lastnum_flag)
  123. VALUES (@PatchDetailId, @PatchId, @CreateTime, @StandDetailId, @StandValue, @SrcImage, @JudgeLastnumFlag);";
  124. // 定义参数
  125. SQLiteParameter[] parameters = new SQLiteParameter[]
  126. {
  127. new SQLiteParameter("@PatchDetailId", patchDetail.PatchDetailId),
  128. new SQLiteParameter("@PatchId", patchDetail.PatchId),
  129. new SQLiteParameter("@CreateTime", patchDetail.CreateTime),
  130. new SQLiteParameter("@StandDetailId", patchDetail.StandDetailId),
  131. new SQLiteParameter("@StandValue", patchDetail.StandValue),
  132. new SQLiteParameter("@SrcImage", patchDetail.SrcImage),
  133. new SQLiteParameter("@JudgeLastnumFlag",patchDetail.JudgeLastnumFlag),
  134. };
  135. // 执行插入操作
  136. try
  137. {
  138. int rowsAffected = SQLiteHelper.ExecuteNonQuery(sql, parameters);
  139. return rowsAffected > 0; // 返回是否成功插入
  140. }
  141. catch (Exception ex)
  142. {
  143. // 处理异常
  144. Console.WriteLine(ex.Message);
  145. return false;
  146. }
  147. }
  148. public static bool InsertPatchDetails(List<TPatchDetail> patchDetails)
  149. {
  150. // 插入SQL语句
  151. string sql = @"
  152. INSERT INTO t_patch_detail (patch_detail_id, patch_id, create_time, stand_detail_id, stand_value, src_image)
  153. VALUES (@PatchDetailId, @PatchId, @CreateTime, @StandDetailId, @StandValue, @SrcImage);";
  154. try
  155. {
  156. // 开始事务
  157. using (SQLiteConnection connection = SQLiteHelper.GetConnection())
  158. {
  159. connection.Open();
  160. using (SQLiteTransaction transaction = connection.BeginTransaction())
  161. {
  162. // 遍历列表插入每一条数据
  163. foreach (var patchDetail in patchDetails)
  164. {
  165. SQLiteParameter[] parameters = new SQLiteParameter[]
  166. {
  167. new SQLiteParameter("@PatchDetailId", patchDetail.PatchDetailId),
  168. new SQLiteParameter("@PatchId", patchDetail.PatchId),
  169. new SQLiteParameter("@CreateTime", patchDetail.CreateTime),
  170. new SQLiteParameter("@StandDetailId", patchDetail.StandDetailId),
  171. new SQLiteParameter("@StandValue", patchDetail.StandValue),
  172. new SQLiteParameter("@SrcImage", patchDetail.SrcImage)
  173. };
  174. // 执行插入操作
  175. SQLiteHelper.ExecuteNonQuery(sql, parameters, transaction);
  176. }
  177. // 提交事务
  178. transaction.Commit();
  179. }
  180. }
  181. return true;
  182. }
  183. catch (Exception ex)
  184. {
  185. // 处理异常
  186. Console.WriteLine(ex.Message);
  187. return false;
  188. }
  189. }
  190. public static bool UpdatePatchDetails(List<TPatchDetail> patchDetails)
  191. {
  192. // 更新 SQL 语句
  193. string sql = @"
  194. UPDATE t_patch_detail
  195. SET
  196. run_flag = @RunFlag,
  197. run_time = @RunTime,
  198. dst_image = @DstImage,
  199. result_meter = @ResultMeter,
  200. result_type = @ResultType,
  201. raw_value = @RawValue,
  202. final_value = @FinalValue,
  203. complete_value = @CompleteValue,
  204. value_changed = @ValueChanged,
  205. equal_flag = @EqualFlag,
  206. ai_ver = @AiVer,
  207. debug_info = @DebugInfo,
  208. log_path = @LogPath,
  209. memo = @Memo,
  210. meter_region = @MeterRegion,
  211. feature_region = @FeatureRegion,
  212. latest_complete = @LatestComplete,
  213. last_compress = @LastCompress,
  214. latest_value = @LatestValue,
  215. latest_time = @LatestTime
  216. WHERE patch_detail_id = @PatchDetailId;";
  217. try
  218. {
  219. using (SQLiteConnection connection = SQLiteHelper.GetConnection())
  220. {
  221. connection.Open();
  222. using (SQLiteTransaction transaction = connection.BeginTransaction())
  223. {
  224. foreach (var patchDetail in patchDetails)
  225. {
  226. SQLiteParameter[] parameters = new SQLiteParameter[]
  227. {
  228. new SQLiteParameter("@RunFlag", patchDetail.RunFlag),
  229. new SQLiteParameter("@RunTime", patchDetail.RunTime),
  230. new SQLiteParameter("@DstImage", patchDetail.DstImage),
  231. new SQLiteParameter("@ResultMeter", patchDetail.ResultMeter),
  232. new SQLiteParameter("@ResultType", patchDetail.ResultType),
  233. new SQLiteParameter("@RawValue", patchDetail.RawValue),
  234. new SQLiteParameter("@FinalValue", patchDetail.FinalValue),
  235. new SQLiteParameter("@CompleteValue", patchDetail.CompleteValue),
  236. new SQLiteParameter("@ValueChanged", patchDetail.ValueChanged),
  237. new SQLiteParameter("@EqualFlag", patchDetail.EqualFlag),
  238. new SQLiteParameter("@AiVer", patchDetail.AiVer),
  239. new SQLiteParameter("@DebugInfo", patchDetail.DebugInfo),
  240. new SQLiteParameter("@LogPath", patchDetail.LogPath),
  241. new SQLiteParameter("@Memo", patchDetail.Memo),
  242. new SQLiteParameter("@MeterRegion", patchDetail.MeterRegion),
  243. new SQLiteParameter("@FeatureRegion", patchDetail.FeatureRegion),
  244. new SQLiteParameter("@LatestComplete", patchDetail.LatestComplete),
  245. new SQLiteParameter("@LastCompress", patchDetail.LastCompress),
  246. new SQLiteParameter("@LatestValue", patchDetail.LatestValue),
  247. new SQLiteParameter("@LatestTime", patchDetail.LatestTime),
  248. new SQLiteParameter("@PatchDetailId", patchDetail.PatchDetailId) // 条件字段
  249. };
  250. SQLiteHelper.ExecuteNonQuery(sql, parameters, transaction);
  251. }
  252. // 提交事务
  253. transaction.Commit();
  254. }
  255. }
  256. return true;
  257. }
  258. catch (Exception ex)
  259. {
  260. Console.WriteLine("更新数据时出错: " + ex.Message);
  261. return false;
  262. }
  263. }
  264. //根据识别结果修改表内容
  265. public static bool UpdatePatchDetailWithResult(TPatchDetail detail)
  266. {
  267. string sql = @"
  268. UPDATE t_patch_detail
  269. SET run_flag = @RunFlag,
  270. run_time = @RunTime,
  271. dst_image = @DstImage,
  272. result_meter = @ResultMeter,
  273. result_type = @ResultType,
  274. raw_value = @RawValue,
  275. final_value = @FinalValue,
  276. complete_value = @CompleteValue,
  277. value_changed = @ValueChanged,
  278. equal_flag = @EqualFlag,
  279. ai_ver = @AiVer,
  280. debug_info = @DebugInfo,
  281. log_path = @LogPath,
  282. memo = @Memo,
  283. meter_type = @MeterType,
  284. last_unit = @LastUnit
  285. WHERE patch_detail_id = @PatchDetailId;";
  286. // 创建 SQL 参数
  287. SQLiteParameter[] parameters = new SQLiteParameter[]
  288. {
  289. new SQLiteParameter("@PatchDetailId", detail.PatchDetailId),
  290. new SQLiteParameter("@RunFlag", detail.RunFlag),
  291. new SQLiteParameter("@RunTime", detail.RunTime),
  292. new SQLiteParameter("@DstImage", detail.DstImage),
  293. new SQLiteParameter("@ResultMeter", detail.ResultMeter),
  294. new SQLiteParameter("@ResultType", detail.ResultType),
  295. new SQLiteParameter("@RawValue", detail.RawValue),
  296. new SQLiteParameter("@FinalValue", detail.FinalValue),
  297. new SQLiteParameter("@CompleteValue",detail.CompleteValue),
  298. new SQLiteParameter("@ValueChanged",detail.ValueChanged),
  299. new SQLiteParameter("@EqualFlag", detail.EqualFlag),
  300. new SQLiteParameter("@AiVer", detail.AiVer),
  301. new SQLiteParameter("@DebugInfo", detail.DebugInfo),
  302. new SQLiteParameter("@LogPath", detail.LogPath),
  303. new SQLiteParameter("@Memo",detail.Memo),
  304. new SQLiteParameter("@MeterType",detail.MeterType),
  305. new SQLiteParameter("@LastUnit",detail.LastUnit)
  306. };
  307. // 执行更新操作并返回受影响的行数
  308. return SQLiteHelper.ExecuteNonQuery(sql, parameters) > 0;
  309. }
  310. public static bool UpdatePatchDetailStandValue(string patchDetailId,string standValue,int equalFlag)
  311. {
  312. string sql = @"
  313. UPDATE t_patch_detail
  314. SET stand_value = @StandValue,
  315. equal_flag = @EqualFlag
  316. WHERE patch_detail_id = @PatchDetailId;";
  317. // 创建 SQL 参数
  318. SQLiteParameter[] parameters = new SQLiteParameter[]
  319. {
  320. new SQLiteParameter("@PatchDetailId", patchDetailId),
  321. new SQLiteParameter("@EqualFlag", equalFlag),
  322. new SQLiteParameter("@StandValue", standValue)
  323. };
  324. // 执行更新操作并返回受影响的行数
  325. return SQLiteHelper.ExecuteNonQuery(sql, parameters) > 0;
  326. }
  327. //同时插入t_patch与t_patch_detail(在一个事务中)
  328. public static bool InsertPatchAndDetails(TPatch patch, List<TPatchDetail> patchDetails)
  329. {
  330. try
  331. {
  332. using (SQLiteConnection connection = SQLiteHelper.GetConnection())
  333. {
  334. connection.Open();
  335. using (SQLiteTransaction transaction = connection.BeginTransaction())
  336. {
  337. // 插入 t_patch 表
  338. string patchSql = "INSERT INTO t_patch (patch_id, create_time, patch_name, stand_id, stand_name, judge_lastnum_flag) VALUES (@PatchId, @CreateTime, @PatchName, @StandId, @StandName, @JudgeLastnumFlag)";
  339. SQLiteParameter[] patchParams = new SQLiteParameter[]
  340. {
  341. new SQLiteParameter("@PatchId", patch.PatchId),
  342. new SQLiteParameter("@CreateTime", patch.CreateTime),
  343. new SQLiteParameter("@PatchName", patch.PatchName),
  344. new SQLiteParameter("@StandId", patch.StandId),
  345. new SQLiteParameter("@StandName", patch.StandName),
  346. new SQLiteParameter("@JudgeLastnumFlag",patch.JudgeLastnumFlag),
  347. };
  348. SQLiteHelper.ExecuteNonQuery(patchSql, patchParams, transaction);
  349. // 插入 t_patch_detail 表
  350. foreach (var patchDetail in patchDetails)
  351. {
  352. //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)";
  353. string detailSql = @"
  354. INSERT INTO t_patch_detail (
  355. patch_detail_id, patch_id, create_time,
  356. stand_detail_id, stand_value, src_image,
  357. sample_time, station_key, station_id,
  358. meter_type, bright_val, flow_rate,
  359. digit_count, pointer_count, last_unit, num_in_upper,
  360. meter_region, feature_region, last_compress,
  361. latest_value, latest_time, latest_complete,judge_lastnum_flag
  362. ) VALUES (
  363. @PatchDetailId, @PatchId, @CreateTime,
  364. @StandDetailId, @StandValue, @SrcImage,
  365. @SampleTime, @StationKey, @StationId,
  366. @MeterType, @BrightVal, @FlowRate,
  367. @DigitCount, @PointerCount, @LastUnit, @NumInUpper,
  368. @MeterRegion, @FeatureRegion, @LastCompress,
  369. @LatestValue, @LatestTime, @LatestComplete, @JudgeLastnumFlag
  370. )";
  371. SQLiteParameter[] detailParams = new SQLiteParameter[]
  372. {
  373. new SQLiteParameter("@PatchDetailId", patchDetail.PatchDetailId),
  374. new SQLiteParameter("@PatchId", patchDetail.PatchId),
  375. new SQLiteParameter("@CreateTime", patchDetail.CreateTime),
  376. new SQLiteParameter("@StandDetailId", patchDetail.StandDetailId),
  377. new SQLiteParameter("@StandValue", patchDetail.StandValue),
  378. new SQLiteParameter("@SrcImage", patchDetail.SrcImage),
  379. new SQLiteParameter("@SampleTime", patchDetail.SampleTime),
  380. new SQLiteParameter("@StationKey", patchDetail.StationKey),
  381. new SQLiteParameter("@StationId", patchDetail.StationId),
  382. new SQLiteParameter("@MeterType", patchDetail.MeterType),
  383. new SQLiteParameter("@BrightVal", patchDetail.BrightVal),
  384. new SQLiteParameter("@FlowRate", patchDetail.FlowRate),
  385. new SQLiteParameter("@DigitCount", patchDetail.DigitCount),
  386. new SQLiteParameter("@PointerCount", patchDetail.PointerCount),
  387. new SQLiteParameter("@LastUnit", patchDetail.LastUnit),
  388. new SQLiteParameter("@NumInUpper", patchDetail.NumInUpper),
  389. new SQLiteParameter("@MeterRegion", patchDetail.MeterRegion),
  390. new SQLiteParameter("@FeatureRegion", patchDetail.FeatureRegion),
  391. new SQLiteParameter("@LastCompress", patchDetail.LastCompress),
  392. new SQLiteParameter("@LatestValue", patchDetail.LatestValue),
  393. new SQLiteParameter("@LatestTime", patchDetail.LatestTime),
  394. new SQLiteParameter("@LatestComplete", patchDetail.LatestComplete),
  395. new SQLiteParameter("@JudgeLastnumFlag", patchDetail.JudgeLastnumFlag),
  396. };
  397. SQLiteHelper.ExecuteNonQuery(detailSql, detailParams, transaction);
  398. }
  399. // 提交事务
  400. transaction.Commit();
  401. return true;
  402. }
  403. }
  404. }
  405. catch (Exception ex)
  406. {
  407. Console.WriteLine($"插入数据失败:{ex.Message}");
  408. return false;
  409. }
  410. }
  411. public static bool UpdatePatchDetails_Latest(List<TPatchDetail> patchDetails)
  412. {
  413. try
  414. {
  415. using (SQLiteConnection connection = SQLiteHelper.GetConnection())
  416. {
  417. connection.Open();
  418. using (SQLiteTransaction transaction = connection.BeginTransaction())
  419. {
  420. // 插入 t_patch_detail 表
  421. foreach (var patchDetail in patchDetails)
  422. {
  423. // 更新 t_patch_detail 表(仅涉及的字段)
  424. string detailSql = @"
  425. UPDATE t_patch_detail
  426. SET latest_value = @LatestValue,
  427. latest_time = @LatestTime,
  428. latest_complete = @LatestComplete,
  429. last_compress = @LastCompress
  430. WHERE patch_detail_id = @PatchDetailId;";
  431. SQLiteParameter[] detailParams = new SQLiteParameter[]
  432. {
  433. new SQLiteParameter("@PatchDetailId", patchDetail.PatchDetailId),
  434. new SQLiteParameter("@LastCompress", patchDetail.LastCompress),
  435. new SQLiteParameter("@LatestValue", patchDetail.LatestValue),
  436. new SQLiteParameter("@LatestTime", patchDetail.LatestTime),
  437. new SQLiteParameter("@LatestComplete", patchDetail.LatestComplete),
  438. };
  439. SQLiteHelper.ExecuteNonQuery(detailSql, detailParams, transaction);
  440. }
  441. // 提交事务
  442. transaction.Commit();
  443. return true;
  444. }
  445. }
  446. }
  447. catch (Exception ex)
  448. {
  449. Console.WriteLine($"插入数据失败:{ex.Message}");
  450. return false;
  451. }
  452. }
  453. public static bool UpdatePatchDetails_Latest(TPatchDetail patchDetail)
  454. {
  455. try
  456. {
  457. using (SQLiteConnection connection = SQLiteHelper.GetConnection())
  458. {
  459. connection.Open();
  460. // 更新 t_patch_detail 表(仅涉及的字段)
  461. string detailSql = @"
  462. UPDATE t_patch_detail
  463. SET latest_value = @LatestValue,
  464. latest_time = @LatestTime,
  465. latest_complete = @LatestComplete,
  466. last_compress = @LastCompress,
  467. meter_region = @MeterRegion,
  468. feature_region = @FeatureRegion
  469. WHERE patch_detail_id = @PatchDetailId;";
  470. SQLiteParameter[] detailParams = new SQLiteParameter[]
  471. {
  472. new SQLiteParameter("@PatchDetailId", patchDetail.PatchDetailId),
  473. new SQLiteParameter("@LastCompress", patchDetail.LastCompress),
  474. new SQLiteParameter("@LatestValue", patchDetail.LatestValue),
  475. new SQLiteParameter("@LatestTime", patchDetail.LatestTime),
  476. new SQLiteParameter("@LatestComplete", patchDetail.LatestComplete),
  477. new SQLiteParameter("@MeterRegion", patchDetail.MeterRegion),
  478. new SQLiteParameter("@FeatureRegion", patchDetail.FeatureRegion),
  479. };
  480. SQLiteHelper.ExecuteNonQuery(detailSql, detailParams);
  481. return true;
  482. }
  483. }
  484. catch (Exception ex)
  485. {
  486. Console.WriteLine($"插入数据失败:{ex.Message}");
  487. return false;
  488. }
  489. }
  490. public static Tuple<int, int, List<TPatchDetail>> GetPagedPatchDetails(int pageNumber, int pageSize, string patchId)
  491. {
  492. // 计算偏移量
  493. int offset = (pageNumber - 1) * pageSize;
  494. // 分页查询SQL
  495. //string sql = @"
  496. // SELECT patch_detail_id, patch_id, create_time, stand_detail_id, stand_value, src_image,
  497. // run_flag, run_time, dst_image, meter_type, digit_count, pointer_count,
  498. // last_unit, result_type, raw_value, final_value, equal_flag, ai_ver, debug_info, log_path
  499. // FROM t_patch_detail WHERE patch_id = @PatchId
  500. // ORDER BY create_time DESC -- 根据需要修改排序字段
  501. // LIMIT @PageSize OFFSET @Offset;";
  502. string sql = @"
  503. SELECT patch_detail_id, patch_id, create_time, stand_detail_id, stand_value, src_image,
  504. run_flag, run_time, dst_image, meter_type, digit_count, pointer_count,
  505. last_unit, result_type, raw_value, final_value, equal_flag, ai_ver, debug_info, log_path, memo
  506. FROM t_patch_detail WHERE patch_id = @PatchId
  507. ORDER BY create_time ASC -- 根据需要修改排序字段
  508. LIMIT @PageSize OFFSET @Offset;";
  509. // 定义参数
  510. SQLiteParameter[] parameters = new SQLiteParameter[]
  511. {
  512. new SQLiteParameter("@PatchId", patchId),
  513. new SQLiteParameter("@PageSize", pageSize),
  514. new SQLiteParameter("@Offset", offset)
  515. };
  516. // 执行查询并读取数据
  517. List<TPatchDetail> patchDetails = new List<TPatchDetail>();
  518. using (SQLiteDataReader reader = SQLiteHelper.ExecuteReader(sql, parameters))
  519. {
  520. while (reader.Read())
  521. {
  522. // 将查询结果映射到 TPatchDetail 对象
  523. TPatchDetail patchDetail = new TPatchDetail
  524. {
  525. PatchDetailId = reader.GetString(reader.GetOrdinal("patch_detail_id")),
  526. PatchId = reader.GetString(reader.GetOrdinal("patch_id")),
  527. CreateTime = reader.GetString(reader.GetOrdinal("create_time")),
  528. StandDetailId = reader.GetString(reader.GetOrdinal("stand_detail_id")),
  529. StandValue = reader.GetString(reader.GetOrdinal("stand_value")),
  530. SrcImage = reader.GetString(reader.GetOrdinal("src_image")),
  531. RunFlag = reader.GetInt32(reader.GetOrdinal("run_flag")),
  532. RunTime = reader.GetString(reader.GetOrdinal("run_time")),
  533. DstImage = reader.GetString(reader.GetOrdinal("dst_image")),
  534. MeterType = reader.GetInt32(reader.GetOrdinal("meter_type")),
  535. DigitCount = reader.GetInt32(reader.GetOrdinal("digit_count")),
  536. PointerCount = reader.GetInt32(reader.GetOrdinal("pointer_count")),
  537. LastUnit = reader.GetDouble(reader.GetOrdinal("last_unit")),
  538. ResultType = reader.GetInt32(reader.GetOrdinal("result_type")),
  539. RawValue = reader.GetInt64(reader.GetOrdinal("raw_value")),
  540. FinalValue = reader.GetInt64(reader.GetOrdinal("final_value")),
  541. EqualFlag = reader.GetInt32(reader.GetOrdinal("equal_flag")),
  542. AiVer = reader.GetString(reader.GetOrdinal("ai_ver")),
  543. DebugInfo = reader.GetString(reader.GetOrdinal("debug_info")),
  544. LogPath = reader.GetString(reader.GetOrdinal("log_path")),
  545. Memo = reader.GetString(reader.GetOrdinal("memo"))
  546. };
  547. patchDetails.Add(patchDetail);
  548. }
  549. }
  550. // 获取总记录数,用于计算总页数
  551. string countSql = "SELECT COUNT(*) FROM t_patch_detail WHERE patch_id = @PatchId";
  552. int totalRecords = Convert.ToInt32(SQLiteHelper.GetSingle(countSql, new SQLiteParameter("@PatchId", patchId)));
  553. // 计算总页数
  554. int totalPages = (int)Math.Ceiling((double)totalRecords / pageSize);
  555. // 返回总记录数、总页数和分页结果
  556. return Tuple.Create(totalRecords, totalPages, patchDetails);
  557. }
  558. public static Tuple<int, int, List<TPatchDetail>> GetPagedPatchDetails(PatchFindModel findModel)
  559. {
  560. // 计算偏移量
  561. int offset = (findModel.PageNumber - 1) * findModel.PageSize;
  562. // 动态构造 WHERE 子句
  563. StringBuilder whereClause = new StringBuilder("WHERE patch_id = @PatchId");
  564. List<SQLiteParameter> parameters = new List<SQLiteParameter>
  565. {
  566. new SQLiteParameter("@PatchId", findModel.PatchId),
  567. new SQLiteParameter("@PageSize", findModel.PageSize),
  568. new SQLiteParameter("@Offset", offset)
  569. };
  570. if (findModel.RunFlag >= 0)
  571. {
  572. whereClause.Append(" AND run_flag = @RunFlag");
  573. parameters.Add(new SQLiteParameter("@RunFlag", findModel.RunFlag));
  574. }
  575. if (findModel.EqualFlag >= 0)
  576. {
  577. whereClause.Append(" AND equal_flag = @EqualFlag");
  578. parameters.Add(new SQLiteParameter("@EqualFlag", findModel.EqualFlag));
  579. }
  580. if (!string.IsNullOrEmpty(findModel.StationId))
  581. {
  582. whereClause.Append(" AND station_id = @StationId");
  583. parameters.Add(new SQLiteParameter("StationId", findModel.StationId));
  584. }
  585. if(findModel.PatchFindType == Patch.PatchFindType.HAVE_MEMO)
  586. {
  587. whereClause.Append(" AND memo != ''");
  588. //parameters.Add(new SQLiteParameter("@EqualFlag", findModel.EqualFlag));
  589. }
  590. //if (findModel.EqualFlag == 2) // 针对无标准值的查询条件
  591. //{
  592. // whereClause.Append(" AND stand_value = ''");
  593. //}
  594. // 分页查询SQL
  595. //string sql = $@"
  596. // SELECT patch_detail_id, patch_id, create_time, stand_detail_id, stand_value, src_image,
  597. // run_flag, run_time, dst_image, meter_type, digit_count, pointer_count,
  598. // last_unit, result_type, raw_value, final_value, equal_flag, ai_ver, debug_info, log_path, memo
  599. // FROM t_patch_detail
  600. // {whereClause}
  601. // ORDER BY create_time ASC -- 根据需要修改排序字段
  602. // LIMIT @PageSize OFFSET @Offset;";
  603. string sql = $@"
  604. SELECT * FROM t_patch_detail
  605. {whereClause}
  606. ORDER BY station_id,sample_time ASC
  607. LIMIT @PageSize OFFSET @Offset;";
  608. // 执行查询并读取数据
  609. List<TPatchDetail> patchDetails = new List<TPatchDetail>();
  610. using (SQLiteDataReader reader = SQLiteHelper.ExecuteReader(sql, parameters.ToArray()))
  611. {
  612. while (reader.Read())
  613. {
  614. TPatchDetail patchDetail = new TPatchDetail
  615. {
  616. PatchDetailId = reader.GetString(reader.GetOrdinal("patch_detail_id")),
  617. PatchId = reader.GetString(reader.GetOrdinal("patch_id")),
  618. CreateTime = reader.GetString(reader.GetOrdinal("create_time")),
  619. StandDetailId = reader.GetString(reader.GetOrdinal("stand_detail_id")),
  620. StandValue = reader.GetString(reader.GetOrdinal("stand_value")),
  621. SrcImage = reader.GetString(reader.GetOrdinal("src_image")),
  622. SampleTime = reader.GetString(reader.GetOrdinal("sample_time")),
  623. RunFlag = reader.GetInt32(reader.GetOrdinal("run_flag")),
  624. RunTime = reader.GetString(reader.GetOrdinal("run_time")),
  625. DstImage = reader.GetString(reader.GetOrdinal("dst_image")),
  626. ResultType = reader.GetInt32(reader.GetOrdinal("result_type")),
  627. RawValue = reader.GetInt64(reader.GetOrdinal("raw_value")),
  628. FinalValue = reader.GetInt64(reader.GetOrdinal("final_value")),
  629. CompleteValue = reader.GetInt64(reader.GetOrdinal("complete_value")),
  630. ValueChanged = reader.GetInt32(reader.GetOrdinal("value_changed")),
  631. ResultMeter = reader.GetInt32(reader.GetOrdinal("result_meter")),
  632. EqualFlag = reader.GetInt32(reader.GetOrdinal("equal_flag")),
  633. AiVer = reader.GetString(reader.GetOrdinal("ai_ver")),
  634. DebugInfo = reader.GetString(reader.GetOrdinal("debug_info")),
  635. LogPath = reader.GetString(reader.GetOrdinal("log_path")),
  636. Memo = reader.GetString(reader.GetOrdinal("memo")),
  637. StationKey = reader.GetString(reader.GetOrdinal("station_key")),
  638. StationId = reader.GetString(reader.GetOrdinal("station_id")),
  639. MeterType = reader.GetInt32(reader.GetOrdinal("meter_type")),
  640. BrightVal = reader.GetDouble(reader.GetOrdinal("bright_val")),
  641. FlowRate = reader.GetInt32(reader.GetOrdinal("flow_rate")),
  642. DigitCount = reader.GetInt32(reader.GetOrdinal("digit_count")),
  643. PointerCount = reader.GetInt32(reader.GetOrdinal("pointer_count")),
  644. LastUnit = reader.GetDouble(reader.GetOrdinal("last_unit")),
  645. NumInUpper = reader.GetInt32(reader.GetOrdinal("num_in_upper")),
  646. MeterRegion = reader.GetString(reader.GetOrdinal("meter_region")),
  647. FeatureRegion = reader.GetString(reader.GetOrdinal("feature_region")),
  648. LastCompress = reader.GetInt32(reader.GetOrdinal("last_compress")),
  649. LatestValue = reader.GetInt64(reader.GetOrdinal("latest_value")),
  650. LatestTime = reader.GetString(reader.GetOrdinal("latest_time")),
  651. LatestComplete = reader.GetInt64(reader.GetOrdinal("latest_complete")),
  652. JudgeLastnumFlag = reader.GetInt32(reader.GetOrdinal("judge_lastnum_flag")),
  653. };
  654. patchDetails.Add(patchDetail);
  655. }
  656. }
  657. // 获取总记录数,用于计算总页数
  658. string countSql = "SELECT COUNT(*) FROM t_patch_detail " + whereClause;
  659. int totalRecords = Convert.ToInt32(SQLiteHelper.GetSingle(countSql, parameters.ToArray()));
  660. // 计算总页数
  661. int totalPages = (int)Math.Ceiling((double)totalRecords / findModel.PageSize);
  662. // 返回总记录数、总页数和分页结果
  663. return Tuple.Create(totalRecords, totalPages, patchDetails);
  664. }
  665. public static VPatch GetVPatchById(string patchId)
  666. {
  667. VPatch vPatch = null;
  668. // 查询 SQL,从 v_patch 视图中获取数据
  669. string query = @"
  670. SELECT
  671. patch_id,
  672. create_time,
  673. patch_name,
  674. stand_id,
  675. stand_name,
  676. judge_lastnum_flag,
  677. detail_count,
  678. run_count,
  679. equal_count,
  680. invalid_count,
  681. error_count
  682. FROM v_patch
  683. WHERE patch_id = @PatchId;";
  684. // 构造参数
  685. SQLiteParameter[] parameters = new SQLiteParameter[]
  686. {
  687. new SQLiteParameter("@PatchId", patchId)
  688. };
  689. // 执行查询
  690. using (SQLiteDataReader reader = SQLiteHelper.ExecuteReader(query, parameters))
  691. {
  692. if (reader.Read())
  693. {
  694. vPatch = new VPatch
  695. {
  696. PatchId = reader["patch_id"].ToString(),
  697. CreateTime = reader["create_time"].ToString(),
  698. PatchName = reader["patch_name"].ToString(),
  699. StandId = reader["stand_id"].ToString(),
  700. StandName = reader["stand_name"].ToString(),
  701. JudgeLastnumFlag = Convert.ToInt32(reader["judge_lastnum_flag"]),
  702. DetailCount = reader["detail_count"] == DBNull.Value ? 0 : Convert.ToInt32(reader["detail_count"]),
  703. RunCount = reader["run_count"] == DBNull.Value ? 0 : Convert.ToInt32(reader["run_count"]),
  704. EqualCount = reader["equal_count"] == DBNull.Value ? 0 : Convert.ToInt32(reader["equal_count"]),
  705. InvalidCount = reader["invalid_count"] == DBNull.Value ? 0 : Convert.ToInt32(reader["invalid_count"]),
  706. ErrorCount = reader["error_count"] == DBNull.Value ? 0 : Convert.ToInt32(reader["error_count"]),
  707. };
  708. }
  709. }
  710. return vPatch;
  711. }
  712. public static Tuple<int, int, List<VPatchStation>> GetPagedPatchStations(int pageNumber, int pageSize, string findStationId,string patchId)
  713. {
  714. // 计算偏移量
  715. int offset = (pageNumber - 1) * pageSize;
  716. //动态构造 WHERE 子句
  717. StringBuilder whereClause = new StringBuilder("WHERE (patch_id = @PatchId");
  718. if (!string.IsNullOrEmpty(findStationId))
  719. {
  720. whereClause.Append(" AND station_id like @FindStationId");
  721. }
  722. whereClause.Append(") OR patch_id = ''");
  723. //string sql = @"
  724. // SELECT patch_id, station_id, total_count, error_count,equal_count, invalid_count
  725. // FROM v_patch_detail_station
  726. // WHERE patch_id = @PatchId OR patch_id = ''
  727. // ORDER BY station_id ASC -- 根据需要修改排序字段
  728. // LIMIT @PageSize OFFSET @Offset;";
  729. string sql = $@"
  730. SELECT patch_id, station_id, total_count, error_count,equal_count, invalid_count
  731. FROM v_patch_detail_station
  732. {whereClause}
  733. ORDER BY station_id ASC -- 根据需要修改排序字段
  734. LIMIT @PageSize OFFSET @Offset;";
  735. // 定义参数
  736. //SQLiteParameter[] parameters = new SQLiteParameter[]
  737. List<SQLiteParameter> parameters = new List<SQLiteParameter>
  738. {
  739. new SQLiteParameter("@PatchId", patchId),
  740. new SQLiteParameter("@PageSize", pageSize),
  741. new SQLiteParameter("@Offset", offset)
  742. };
  743. if (!string.IsNullOrEmpty(findStationId))
  744. {
  745. parameters.Add(new SQLiteParameter("FindStationId", "%" + findStationId + "%"));
  746. }
  747. // 执行查询并读取数据
  748. List<VPatchStation> vpsDetails = new List<VPatchStation>();
  749. using (SQLiteDataReader reader = SQLiteHelper.ExecuteReader(sql, parameters.ToArray()))
  750. {
  751. while (reader.Read())
  752. {
  753. VPatchStation patchDetail = new VPatchStation
  754. {
  755. PatchId = reader.GetString(reader.GetOrdinal("patch_id")),
  756. StationId = reader.GetString(reader.GetOrdinal("station_id")),
  757. TotalCount = reader.GetInt32(reader.GetOrdinal("total_count")),
  758. ErrorCount = reader.GetInt32(reader.GetOrdinal("error_count")),
  759. EqualCount = reader.GetInt32(reader.GetOrdinal("equal_count")),
  760. InvalidCount = reader.GetInt32(reader.GetOrdinal("invalid_count"))
  761. };
  762. vpsDetails.Add(patchDetail);
  763. }
  764. }
  765. // 获取总记录数,用于计算总页数
  766. string countSql = "SELECT COUNT(*) FROM v_patch_detail_station " + whereClause;
  767. //WHERE patch_id = @PatchId OR patch_id = ''";
  768. int totalRecords = Convert.ToInt32(SQLiteHelper.GetSingle(countSql, parameters.ToArray()));
  769. // 计算总页数
  770. int totalPages = (int)Math.Ceiling((double)totalRecords / pageSize);
  771. // 返回总记录数、总页数和分页结果
  772. return Tuple.Create(totalRecords, totalPages, vpsDetails);
  773. }
  774. public static VPatchStation GetPatchStation(string patchId,string stationId)
  775. {
  776. VPatchStation vps = null;
  777. // 查询 SQL,从 v_patch 视图中获取数据
  778. string query = @"
  779. SELECT patch_id, station_id, total_count, error_count,equal_count, invalid_count
  780. FROM v_patch_detail_station
  781. WHERE patch_id = @PatchId AND station_id=@StationId;";
  782. // 构造参数
  783. SQLiteParameter[] parameters = new SQLiteParameter[]
  784. {
  785. new SQLiteParameter("@PatchId", patchId),
  786. new SQLiteParameter("@StationId", stationId),
  787. };
  788. // 执行查询
  789. using (SQLiteDataReader reader = SQLiteHelper.ExecuteReader(query, parameters))
  790. {
  791. if (reader.Read())
  792. {
  793. vps = new VPatchStation
  794. {
  795. PatchId = reader["patch_id"].ToString(),
  796. StationId = reader["station_id"].ToString(),
  797. TotalCount = reader["total_count"] == DBNull.Value ? 0 : Convert.ToInt32(reader["total_count"]),
  798. EqualCount = reader["equal_count"] == DBNull.Value ? 0 : Convert.ToInt32(reader["equal_count"]),
  799. ErrorCount = reader["error_count"] == DBNull.Value ? 0 : Convert.ToInt32(reader["error_count"]),
  800. InvalidCount = reader["invalid_count"] == DBNull.Value ? 0 : Convert.ToInt32(reader["invalid_count"])
  801. };
  802. }
  803. }
  804. return vps;
  805. }
  806. //获取所有的识别任务
  807. public static List<VPatch> GetAllVPatchs()
  808. {
  809. // 定义 SQL 查询语句,带有分页
  810. string sql = @"
  811. SELECT
  812. patch_id,
  813. create_time,
  814. patch_name,
  815. stand_id,
  816. stand_name,
  817. detail_count,
  818. judge_lastnum_flag,
  819. run_count,
  820. equal_count
  821. FROM v_patch WHERE detail_count = run_count
  822. ORDER BY create_time DESC";
  823. // 执行查询并获取结果
  824. List<VPatch> patchs = new List<VPatch>();
  825. using (SQLiteDataReader reader = SQLiteHelper.ExecuteReader(sql))
  826. {
  827. while (reader.Read())
  828. {
  829. // 将查询结果映射到 TStand 对象
  830. VPatch patch = new VPatch
  831. {
  832. PatchId = reader["patch_id"].ToString(),
  833. CreateTime = reader["create_time"].ToString(),
  834. PatchName = reader["patch_name"].ToString(),
  835. StandId = reader["stand_id"].ToString(),
  836. StandName = reader["stand_name"].ToString(),
  837. JudgeLastnumFlag = Convert.ToInt32(reader["judge_lastnum_flag"]),
  838. DetailCount = reader["detail_count"] == DBNull.Value ? 0 : Convert.ToInt32(reader["detail_count"]),
  839. RunCount = reader["run_count"] == DBNull.Value ? 0 : Convert.ToInt32(reader["run_count"]),
  840. EqualCount = reader["equal_count"] == DBNull.Value ? 0 : Convert.ToInt32(reader["equal_count"])
  841. };
  842. patchs.Add(patch);
  843. }
  844. }
  845. return patchs;
  846. }
  847. public static List<TPatchDetail> GetPatchDetailsWithRunFlag(string patchId,string stationId,int runFlag)
  848. {
  849. // 查询 SQL
  850. //string sql = @"
  851. // SELECT patch_detail_id, patch_id, create_time, stand_detail_id, stand_value, src_image,
  852. // run_flag, run_time, dst_image, meter_type, digit_count, pointer_count,
  853. // last_unit, result_type, raw_value, final_value, equal_flag, ai_ver, debug_info, log_path
  854. // FROM t_patch_detail
  855. // WHERE patch_id = @PatchId AND run_flag = 0
  856. // ORDER BY create_time AESC;"; // 可以根据需要修改排序字段
  857. //string sql = @"
  858. // SELECT patch_detail_id, patch_id, create_time, stand_detail_id, stand_value, src_image
  859. // FROM t_patch_detail
  860. // WHERE patch_id = @PatchId AND run_flag = 0
  861. // ORDER BY create_time ASC;"; // 可以根据需要修改排序字段
  862. string whereStation = " AND run_flag = @RunFlag";
  863. if (!string.IsNullOrEmpty(stationId))
  864. {
  865. whereStation = " AND station_id = @StationId";
  866. }
  867. //string sql = $@"
  868. // SELECT * FROM t_patch_detail
  869. // WHERE patch_id = @PatchId AND run_flag = 0{whereStation}
  870. // ORDER BY station_id,sample_time ASC";
  871. string sql = $@"
  872. SELECT * FROM t_patch_detail
  873. WHERE patch_id = @PatchId{whereStation}
  874. ORDER BY station_id,sample_time ASC";
  875. // 定义参数
  876. SQLiteParameter[] parameters = new SQLiteParameter[]
  877. {
  878. new SQLiteParameter("@PatchId", patchId),
  879. new SQLiteParameter("@StationId",stationId),
  880. new SQLiteParameter("@RunFlag",runFlag)
  881. };
  882. // 执行查询并读取数据
  883. List<TPatchDetail> patchDetails = new List<TPatchDetail>();
  884. using (SQLiteDataReader reader = SQLiteHelper.ExecuteReader(sql, parameters))
  885. {
  886. while (reader.Read())
  887. {
  888. // 将查询结果映射到 TPatchDetail 对象
  889. TPatchDetail patchDetail = new TPatchDetail
  890. {
  891. PatchDetailId = reader.GetString(reader.GetOrdinal("patch_detail_id")),
  892. PatchId = reader.GetString(reader.GetOrdinal("patch_id")),
  893. CreateTime = reader.GetString(reader.GetOrdinal("create_time")),
  894. StandDetailId = reader.GetString(reader.GetOrdinal("stand_detail_id")),
  895. StandValue = reader.GetString(reader.GetOrdinal("stand_value")),
  896. SrcImage = reader.GetString(reader.GetOrdinal("src_image")),
  897. SampleTime = reader.GetString(reader.GetOrdinal("sample_time")),
  898. RunFlag = reader.GetInt32(reader.GetOrdinal("run_flag")),
  899. RunTime = reader.GetString(reader.GetOrdinal("run_time")),
  900. DstImage = reader.GetString(reader.GetOrdinal("dst_image")),
  901. ResultType = reader.GetInt32(reader.GetOrdinal("result_type")),
  902. RawValue = reader.GetInt64(reader.GetOrdinal("raw_value")),
  903. FinalValue = reader.GetInt64(reader.GetOrdinal("final_value")),
  904. CompleteValue = reader.GetInt64(reader.GetOrdinal("complete_value")),
  905. ValueChanged = reader.GetInt32(reader.GetOrdinal("value_changed")),
  906. ResultMeter = reader.GetInt32(reader.GetOrdinal("result_meter")),
  907. EqualFlag = reader.GetInt32(reader.GetOrdinal("equal_flag")),
  908. AiVer = reader.GetString(reader.GetOrdinal("ai_ver")),
  909. DebugInfo = reader.GetString(reader.GetOrdinal("debug_info")),
  910. LogPath = reader.GetString(reader.GetOrdinal("log_path")),
  911. Memo = reader.GetString(reader.GetOrdinal("memo")),
  912. StationKey = reader.GetString(reader.GetOrdinal("station_key")),
  913. StationId = reader.GetString(reader.GetOrdinal("station_id")),
  914. MeterType = reader.GetInt32(reader.GetOrdinal("meter_type")),
  915. BrightVal = reader.GetDouble(reader.GetOrdinal("bright_val")),
  916. FlowRate = reader.GetInt32(reader.GetOrdinal("flow_rate")),
  917. DigitCount = reader.GetInt32(reader.GetOrdinal("digit_count")),
  918. PointerCount = reader.GetInt32(reader.GetOrdinal("pointer_count")),
  919. LastUnit = reader.GetDouble(reader.GetOrdinal("last_unit")),
  920. NumInUpper = reader.GetInt32(reader.GetOrdinal("num_in_upper")),
  921. MeterRegion = reader.GetString(reader.GetOrdinal("meter_region")),
  922. FeatureRegion = reader.GetString(reader.GetOrdinal("feature_region")),
  923. LastCompress = reader.GetInt32(reader.GetOrdinal("last_compress")),
  924. LatestValue = reader.GetInt64(reader.GetOrdinal("latest_value")),
  925. LatestTime = reader.GetString(reader.GetOrdinal("latest_time")),
  926. LatestComplete = reader.GetInt64(reader.GetOrdinal("latest_complete")),
  927. JudgeLastnumFlag = reader.GetInt32(reader.GetOrdinal("judge_lastnum_flag")),
  928. };
  929. patchDetails.Add(patchDetail);
  930. }
  931. }
  932. return patchDetails;
  933. }
  934. public static List<TPatchDetail> GetPatchDetailsWithRunFlag_StandDetal(string patchId, string stationId, int runFlag)
  935. {
  936. // 查询 SQL
  937. //string sql = @"
  938. // SELECT patch_detail_id, patch_id, create_time, stand_detail_id, stand_value, src_image,
  939. // run_flag, run_time, dst_image, meter_type, digit_count, pointer_count,
  940. // last_unit, result_type, raw_value, final_value, equal_flag, ai_ver, debug_info, log_path
  941. // FROM t_patch_detail
  942. // WHERE patch_id = @PatchId AND run_flag = 0
  943. // ORDER BY create_time AESC;"; // 可以根据需要修改排序字段
  944. //string sql = @"
  945. // SELECT patch_detail_id, patch_id, create_time, stand_detail_id, stand_value, src_image
  946. // FROM t_patch_detail
  947. // WHERE patch_id = @PatchId AND run_flag = 0
  948. // ORDER BY create_time ASC;"; // 可以根据需要修改排序字段
  949. string whereStation = " AND a.run_flag = @RunFlag";
  950. if (!string.IsNullOrEmpty(stationId))
  951. {
  952. whereStation = " AND a.station_id = @StationId";
  953. }
  954. //string sql = $@"
  955. // SELECT * FROM t_patch_detail
  956. // WHERE patch_id = @PatchId AND run_flag = 0{whereStation}
  957. // ORDER BY station_id,sample_time ASC";
  958. //string sql = $@"
  959. // SELECT * FROM t_patch_detail
  960. // WHERE patch_id = @PatchId{whereStation}
  961. // ORDER BY station_id,sample_time ASC";
  962. string sql = $@"
  963. SELECT a.*, b.dial_region as dial_region1,b.feature_region as feature_region1
  964. FROM t_patch_detail a
  965. LEFT JOIN t_stand_detail b ON a.stand_detail_id = b.stand_detail_id
  966. WHERE a.patch_id = @PatchId{ whereStation}
  967. ORDER BY a.station_id,a.sample_time ASC";
  968. // 定义参数
  969. SQLiteParameter[] parameters = new SQLiteParameter[]
  970. {
  971. new SQLiteParameter("@PatchId", patchId),
  972. new SQLiteParameter("@StationId",stationId),
  973. new SQLiteParameter("@RunFlag",runFlag)
  974. };
  975. // 执行查询并读取数据
  976. List<TPatchDetail> patchDetails = new List<TPatchDetail>();
  977. using (SQLiteDataReader reader = SQLiteHelper.ExecuteReader(sql, parameters))
  978. {
  979. while (reader.Read())
  980. {
  981. // 将查询结果映射到 TPatchDetail 对象
  982. TPatchDetail patchDetail = new TPatchDetail
  983. {
  984. PatchDetailId = reader.GetString(reader.GetOrdinal("patch_detail_id")),
  985. PatchId = reader.GetString(reader.GetOrdinal("patch_id")),
  986. CreateTime = reader.GetString(reader.GetOrdinal("create_time")),
  987. StandDetailId = reader.GetString(reader.GetOrdinal("stand_detail_id")),
  988. StandValue = reader.GetString(reader.GetOrdinal("stand_value")),
  989. SrcImage = reader.GetString(reader.GetOrdinal("src_image")),
  990. SampleTime = reader.GetString(reader.GetOrdinal("sample_time")),
  991. RunFlag = reader.GetInt32(reader.GetOrdinal("run_flag")),
  992. RunTime = reader.GetString(reader.GetOrdinal("run_time")),
  993. DstImage = reader.GetString(reader.GetOrdinal("dst_image")),
  994. ResultType = reader.GetInt32(reader.GetOrdinal("result_type")),
  995. RawValue = reader.GetInt64(reader.GetOrdinal("raw_value")),
  996. FinalValue = reader.GetInt64(reader.GetOrdinal("final_value")),
  997. CompleteValue = reader.GetInt64(reader.GetOrdinal("complete_value")),
  998. ValueChanged = reader.GetInt32(reader.GetOrdinal("value_changed")),
  999. ResultMeter = reader.GetInt32(reader.GetOrdinal("result_meter")),
  1000. EqualFlag = reader.GetInt32(reader.GetOrdinal("equal_flag")),
  1001. AiVer = reader.GetString(reader.GetOrdinal("ai_ver")),
  1002. DebugInfo = reader.GetString(reader.GetOrdinal("debug_info")),
  1003. LogPath = reader.GetString(reader.GetOrdinal("log_path")),
  1004. Memo = reader.GetString(reader.GetOrdinal("memo")),
  1005. StationKey = reader.GetString(reader.GetOrdinal("station_key")),
  1006. StationId = reader.GetString(reader.GetOrdinal("station_id")),
  1007. MeterType = reader.GetInt32(reader.GetOrdinal("meter_type")),
  1008. BrightVal = reader.GetDouble(reader.GetOrdinal("bright_val")),
  1009. FlowRate = reader.GetInt32(reader.GetOrdinal("flow_rate")),
  1010. DigitCount = reader.GetInt32(reader.GetOrdinal("digit_count")),
  1011. PointerCount = reader.GetInt32(reader.GetOrdinal("pointer_count")),
  1012. LastUnit = reader.GetDouble(reader.GetOrdinal("last_unit")),
  1013. NumInUpper = reader.GetInt32(reader.GetOrdinal("num_in_upper")),
  1014. //MeterRegion = reader.GetString(reader.GetOrdinal("meter_region")),
  1015. //FeatureRegion = reader.GetString(reader.GetOrdinal("feature_region")),
  1016. MeterRegion = reader.GetString(reader.GetOrdinal("dial_region1")),
  1017. FeatureRegion = reader.GetString(reader.GetOrdinal("feature_region1")),
  1018. LastCompress = reader.GetInt32(reader.GetOrdinal("last_compress")),
  1019. LatestValue = reader.GetInt64(reader.GetOrdinal("latest_value")),
  1020. LatestTime = reader.GetString(reader.GetOrdinal("latest_time")),
  1021. LatestComplete = reader.GetInt64(reader.GetOrdinal("latest_complete")),
  1022. JudgeLastnumFlag = reader.GetInt32(reader.GetOrdinal("judge_lastnum_flag")),
  1023. };
  1024. patchDetails.Add(patchDetail);
  1025. }
  1026. }
  1027. return patchDetails;
  1028. }
  1029. public static int GetPatchDetailsCountWithRunFlagZero(string patchId,string stationId)
  1030. {
  1031. string whereStation = "";
  1032. if(!string.IsNullOrEmpty(stationId))
  1033. {
  1034. whereStation = " AND station_id = @StationId";
  1035. }
  1036. // 查询数据数量的 SQL
  1037. string sql = $@"SELECT COUNT(*) FROM t_patch_detail WHERE patch_id = @PatchId AND run_flag = 0{whereStation}";
  1038. // 定义参数
  1039. SQLiteParameter[] parameters = new SQLiteParameter[]
  1040. {
  1041. new SQLiteParameter("@PatchId", patchId),
  1042. new SQLiteParameter("@StationId",stationId)
  1043. };
  1044. // 执行查询并返回数据数量
  1045. return Convert.ToInt32(SQLiteHelper.GetSingle(sql, parameters));
  1046. }
  1047. /// <summary>
  1048. /// 根据 patch_detail_id 删除指定的记录
  1049. /// </summary>
  1050. /// <param name="patchDetailId">要删除的记录的 ID</param>
  1051. /// <returns>删除成功返回 true,否则返回 false</returns>
  1052. public static bool DeleteTPatchDetailById(string patchDetailId)
  1053. {
  1054. // 构建删除的 SQL 语句
  1055. string sql = "DELETE FROM t_patch_detail WHERE patch_detail_id = @PatchDetailId";
  1056. // 创建参数数组
  1057. SQLiteParameter[] parameters = new SQLiteParameter[]
  1058. {
  1059. new SQLiteParameter("@PatchDetailId", patchDetailId)
  1060. };
  1061. try
  1062. {
  1063. // 调用 SQLiteHelper 执行删除操作
  1064. int rowsAffected = SQLiteHelper.ExecuteSql(sql, parameters);
  1065. // 如果删除成功,返回 true,否则返回 false
  1066. return rowsAffected > 0;
  1067. }
  1068. catch (Exception ex)
  1069. {
  1070. // 处理异常(如果有的话)
  1071. Console.WriteLine("Error deleting data: " + ex.Message);
  1072. return false;
  1073. }
  1074. }
  1075. /// <summary>
  1076. /// 根据 standDetailId 删除t_patch_detail与t_stand_detail中相关的数据
  1077. /// </summary>
  1078. /// <param name="standDetailId">要删除的记录的 模板详情ID</param>
  1079. /// <returns>删除成功返回 true,否则返回 false</returns>
  1080. public static bool Delete_TPatchDetail_TStandDetail_ByStand(string standDetailId)
  1081. {
  1082. // 构建删除的 SQL 语句
  1083. //string sql = "DELETE FROM t_patch_detail WHERE patch_detail_id = @PatchDetailId";
  1084. // 定义删除的 SQL 语句,使用事务来保证一致性
  1085. string sql = @"
  1086. BEGIN TRANSACTION;
  1087. -- 删除 t_patch_detail 表中与 stand_id 相关的数据
  1088. DELETE FROM t_patch_detail WHERE stand_detail_id = @StandDetailId;
  1089. -- 删除 t_patch 表中与 patch_id 相关的数据
  1090. DELETE FROM t_stand_detail WHERE stand_detail_id = @StandDetailId;
  1091. COMMIT;";
  1092. // 创建参数数组
  1093. SQLiteParameter[] parameters = new SQLiteParameter[]
  1094. {
  1095. new SQLiteParameter("@StandDetailId", standDetailId)
  1096. };
  1097. try
  1098. {
  1099. // 调用 SQLiteHelper 执行删除操作
  1100. int rowsAffected = SQLiteHelper.ExecuteSql(sql, parameters);
  1101. // 如果删除成功,返回 true,否则返回 false
  1102. return rowsAffected > 0;
  1103. }
  1104. catch (Exception ex)
  1105. {
  1106. // 处理异常(如果有的话)
  1107. Console.WriteLine("Error deleting data: " + ex.Message);
  1108. return false;
  1109. }
  1110. }
  1111. public static bool UpdatePatchName(string patchId, string patchName)
  1112. {
  1113. string sql = @"
  1114. UPDATE t_patch
  1115. SET patch_name = @PatchName
  1116. WHERE patch_id = @PatchId;";
  1117. // 创建 SQL 参数
  1118. SQLiteParameter[] parameters = new SQLiteParameter[]
  1119. {
  1120. new SQLiteParameter("@PatchName", patchName),
  1121. new SQLiteParameter("@PatchId", patchId)
  1122. };
  1123. // 执行更新操作并返回受影响的行数
  1124. return SQLiteHelper.ExecuteNonQuery(sql, parameters) > 0;
  1125. }
  1126. public static bool UpdatePatchDetailMemo(string detailId,string memo)
  1127. {
  1128. // 定义 SQL 更新语句
  1129. string sql = @"
  1130. UPDATE t_patch_detail
  1131. SET memo = @Memo
  1132. WHERE patch_detail_id = @PatchDetailId;";
  1133. // 创建 SQL 参数
  1134. SQLiteParameter[] parameters = new SQLiteParameter[]
  1135. {
  1136. new SQLiteParameter("@PatchDetailId", detailId),
  1137. new SQLiteParameter("@Memo", memo)
  1138. };
  1139. // 执行更新操作并返回受影响的行数
  1140. return SQLiteHelper.ExecuteNonQuery(sql, parameters) > 0;
  1141. }
  1142. //升级数据库(t_patch_detail添加memo字段)
  1143. public static void UpdateTPatchDetailSchema()
  1144. {
  1145. string sql = "PRAGMA table_info(t_patch_detail)";
  1146. // 查询表结构,判断是否存在memo字段
  1147. using (SQLiteDataReader reader = SQLiteHelper.ExecuteReader(sql))
  1148. {
  1149. bool memoExists = false;
  1150. while (reader.Read())
  1151. {
  1152. if(reader["name"].ToString().ToLower() == "memo")
  1153. {
  1154. memoExists = true;
  1155. break;
  1156. }
  1157. }
  1158. reader.Close();
  1159. //如果不存在memo字段,则添加该字段
  1160. if (!memoExists)
  1161. {
  1162. sql = "ALTER TABLE t_patch_detail ADD COLUMN memo TEXT NOT NULL DEFAULT ''";
  1163. SQLiteHelper.ExecuteNonQuery(sql, null);
  1164. }
  1165. }//using
  1166. }
  1167. //升级数据库(t_patch_detail添加memo字段)
  1168. public static void UpdateTPatchSchema()
  1169. {
  1170. string sql = "PRAGMA table_info(t_patch)";
  1171. // 查询表结构,判断是否存在memo字段
  1172. using (SQLiteDataReader reader = SQLiteHelper.ExecuteReader(sql))
  1173. {
  1174. bool columnExists = false;
  1175. while (reader.Read())
  1176. {
  1177. if (reader["name"].ToString().ToLower() == "judge_lastnum_flag")
  1178. {
  1179. columnExists = true;
  1180. break;
  1181. }
  1182. }
  1183. reader.Close();
  1184. //如果不存在memo字段,则添加该字段
  1185. if (!columnExists)
  1186. {
  1187. sql = "ALTER TABLE t_patch ADD COLUMN judge_lastnum_flag INTEGER NOT NULL DEFAULT 1";
  1188. SQLiteHelper.ExecuteNonQuery(sql, null);
  1189. }
  1190. }//using
  1191. }
  1192. public static void UpdateTPatchDetail2Schema()
  1193. {
  1194. string sql = "PRAGMA table_info(t_patch_detail)";
  1195. // 查询表结构,判断是否存在memo字段
  1196. using (SQLiteDataReader reader = SQLiteHelper.ExecuteReader(sql))
  1197. {
  1198. bool columnExists = false;
  1199. while (reader.Read())
  1200. {
  1201. if (reader["name"].ToString().ToLower() == "judge_lastnum_flag")
  1202. {
  1203. columnExists = true;
  1204. break;
  1205. }
  1206. }
  1207. reader.Close();
  1208. //如果不存在memo字段,则添加该字段
  1209. if (!columnExists)
  1210. {
  1211. sql = "ALTER TABLE t_patch_detail ADD COLUMN judge_lastnum_flag INTEGER NOT NULL DEFAULT 1";
  1212. SQLiteHelper.ExecuteNonQuery(sql, null);
  1213. }
  1214. }//using
  1215. }
  1216. public static void RefreshV_PatchView()
  1217. {
  1218. string dropSql = "DROP VIEW IF EXISTS v_patch";
  1219. string createSql = @"
  1220. CREATE VIEW v_patch AS
  1221. SELECT
  1222. p.patch_id,
  1223. p.create_time AS create_time,
  1224. p.patch_name,
  1225. p.stand_id,
  1226. p.stand_name,
  1227. p.judge_lastnum_flag,
  1228. COUNT(pd.patch_id) AS detail_count,
  1229. COUNT(CASE WHEN pd.run_flag = 1 THEN 1 END) AS run_count,
  1230. COUNT(CASE WHEN pd.equal_flag = 1 THEN 1 END) AS equal_count,
  1231. COUNT(CASE WHEN pd.equal_flag = 2 THEN 1 END) AS invalid_count,
  1232. COUNT(CASE WHEN pd.equal_flag = 0 THEN 1 END) AS error_count
  1233. FROM
  1234. t_patch p
  1235. LEFT JOIN
  1236. t_patch_detail pd ON p.patch_id = pd.patch_id
  1237. GROUP BY
  1238. p.patch_id, p.create_time, p.patch_name, p.stand_id, p.stand_name, p.judge_lastnum_flag";
  1239. SQLiteHelper.ExecuteNonQuery(dropSql, null);
  1240. SQLiteHelper.ExecuteNonQuery(createSql, null);
  1241. }
  1242. //////////////////////////////////////////////////////////
  1243. }
  1244. }