CNAS取数仪器端升级
Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

312 linhas
9.3KB

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Data;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Threading.Tasks;
  7. using System.Windows;
  8. using System.Data.SQLite;
  9. namespace CNAS_Authorize
  10. {
  11. public class Machine
  12. {
  13. public string FactoryName { get; set; }
  14. public string MachineCode { get; set; }
  15. public string ImportTime { get; set; }
  16. public bool IsGenerated { get; set; }
  17. public Machine(string name, string code, string time, bool isGen)
  18. {
  19. FactoryName = name;
  20. MachineCode = code;
  21. ImportTime = time;
  22. IsGenerated = isGen;
  23. }
  24. }
  25. class MachineAuth
  26. {
  27. /// <summary>
  28. /// 所有数据行
  29. /// </summary>
  30. private List<Machine> m_machines;
  31. /// <summary>
  32. /// 编码过滤
  33. /// </summary>
  34. private string m_filter_code;
  35. /// <summary>
  36. /// 名称过滤
  37. /// </summary>
  38. private string m_filter_factory;
  39. //以下都是过滤过的数据
  40. /// <summary>
  41. /// 过滤过的数据
  42. /// </summary>
  43. private List<Machine> m_rangle;
  44. /// <summary>
  45. /// 过滤过的当前页
  46. /// </summary>
  47. private List<Machine> m_page;
  48. /// <summary>
  49. /// 每页数量
  50. /// </summary>
  51. private int m_pageSize;
  52. /// <summary>
  53. /// 页号
  54. /// </summary>
  55. private int m_pageIndex;
  56. /// <summary>
  57. /// 总页数
  58. /// </summary>
  59. private int m_pageCount;
  60. public MachineAuth()
  61. {
  62. m_pageSize = 10;
  63. m_pageIndex = 1;
  64. }
  65. public void Load()
  66. {
  67. InitializeDatabase();
  68. m_machines = new List<Machine>();
  69. string dbPath = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "CNAS.db");
  70. string connectionString = $"Data Source={dbPath};Version=3;";
  71. try
  72. {
  73. using (var connection = new SQLiteConnection(connectionString))
  74. {
  75. connection.Open();
  76. using (var command = new SQLiteCommand(connection))
  77. {
  78. command.CommandText = "SELECT PLANTCODE, MAC_ADDRESS, CREATETIME FROM macaddress";
  79. using (var reader = command.ExecuteReader())
  80. {
  81. while (reader.Read())
  82. {
  83. Machine m = new Machine(
  84. reader["PLANTCODE"].ToString(),
  85. reader["MAC_ADDRESS"].ToString(),
  86. reader["CREATETIME"].ToString(),
  87. true
  88. );
  89. m_machines.Add(m);
  90. }
  91. }
  92. }
  93. }
  94. }
  95. catch (Exception ex)
  96. {
  97. MessageBox.Show($"加载数据失败: {ex.Message}", "错误");
  98. }
  99. m_rangle = new List<Machine>();
  100. m_rangle.AddRange(m_machines);
  101. m_pageSize = 10;
  102. m_pageIndex = 1;
  103. m_pageCount = (m_rangle.Count / m_pageSize) + (m_rangle.Count % m_pageSize == 0 ? 0 : 1);
  104. m_page = getPageData(m_pageIndex);
  105. }
  106. public int PageSize
  107. {
  108. get { return m_pageSize; }
  109. set
  110. {
  111. m_pageSize = value;
  112. updateView();
  113. }
  114. }
  115. public string CurrentPage
  116. {
  117. get
  118. {
  119. return m_pageCount == 0 ? "" : string.Format("{0} / {1}", m_pageIndex, m_pageCount);
  120. }
  121. set
  122. {
  123. }
  124. }
  125. public int TotalCount
  126. {
  127. get
  128. {
  129. return m_machines == null ? 0 : m_machines.Count;
  130. }
  131. set
  132. {
  133. }
  134. }
  135. private void updateView()
  136. {
  137. List<Machine> view = new List<Machine>();
  138. if (!string.IsNullOrEmpty(m_filter_code) || !string.IsNullOrEmpty(m_filter_factory))
  139. {
  140. foreach (Machine item in m_machines)
  141. {
  142. bool flag = true;
  143. if (!string.IsNullOrEmpty(m_filter_code))
  144. {
  145. if (item.MachineCode.IndexOf(m_filter_code) == -1)
  146. {
  147. flag = false;
  148. }
  149. }
  150. if (!string.IsNullOrEmpty(m_filter_factory))
  151. {
  152. if (item.FactoryName.IndexOf(m_filter_factory) == -1)
  153. {
  154. flag = false;
  155. }
  156. }
  157. if (flag)
  158. {
  159. view.Add(item);
  160. }
  161. }
  162. }
  163. else
  164. {
  165. view.AddRange(m_machines);
  166. }
  167. m_rangle = view;
  168. m_pageIndex = 1;
  169. m_pageCount = (m_rangle.Count / m_pageSize) + (m_rangle.Count % m_pageSize == 0 ? 0 : 1);
  170. m_page = getPageData(m_pageIndex);
  171. }
  172. public void ChangeFilter(string code, string factory)
  173. {
  174. this.m_filter_code = code;
  175. this.m_filter_factory = factory;
  176. updateView();
  177. }
  178. public List<Machine> Page
  179. {
  180. get
  181. {
  182. return m_page;
  183. }
  184. }
  185. private List<Machine> getPageData(int pageIndex)
  186. {
  187. int index = (pageIndex - 1) * m_pageSize;
  188. List<Machine> page = new List<Machine>(m_pageSize);
  189. for (int i = 0; i < m_pageSize && index < m_rangle.Count; i++)
  190. {
  191. page.Add(m_rangle[index]);
  192. index++;
  193. }
  194. return page;
  195. }
  196. public List<Machine> NextPage(out bool ok)
  197. {
  198. int index = m_pageIndex * m_pageSize;
  199. if (m_rangle == null || index >= m_rangle.Count)
  200. {
  201. ok = false;
  202. return null;
  203. }
  204. m_pageIndex++;
  205. m_page = getPageData(m_pageIndex);
  206. ok = true;
  207. return m_page;
  208. }
  209. public List<Machine> PrevPage(out bool ok)
  210. {
  211. if (m_pageIndex == 1 || m_rangle == null)
  212. {
  213. ok = false;
  214. return null;
  215. }
  216. m_pageIndex--;
  217. m_page = getPageData(m_pageIndex);
  218. ok = true;
  219. return m_page;
  220. }
  221. private void InitializeDatabase()
  222. {
  223. try
  224. {
  225. string dbPath = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "CNAS.db");
  226. string connectionString = $"Data Source={dbPath};Version=3;";
  227. // 确保数据库目录存在
  228. string dbDirectory = System.IO.Path.GetDirectoryName(dbPath);
  229. if (!System.IO.Directory.Exists(dbDirectory))
  230. {
  231. System.IO.Directory.CreateDirectory(dbDirectory);
  232. }
  233. using (var connection = new SQLiteConnection(connectionString))
  234. {
  235. connection.Open();
  236. using (var command = new SQLiteCommand(connection))
  237. {
  238. command.CommandText = @"
  239. CREATE TABLE IF NOT EXISTS macaddress (
  240. id INTEGER PRIMARY KEY AUTOINCREMENT,
  241. MAC_ADDRESS TEXT,
  242. PLANTCODE TEXT,
  243. CREATETIME TEXT,
  244. FACILITY_STYLE TEXT
  245. );";
  246. command.ExecuteNonQuery();
  247. }
  248. }
  249. }
  250. catch (Exception ex)
  251. {
  252. MessageBox.Show($"初始化数据库失败: {ex.Message}", "错误");
  253. }
  254. }
  255. private void InsertTestData()
  256. {
  257. string connectionString = "Data Source=|DataDirectory|\\CNAS.db;Version=3;";
  258. using (var connection = new SQLiteConnection(connectionString))
  259. {
  260. connection.Open();
  261. using (var command = new SQLiteCommand(connection))
  262. {
  263. command.CommandText = @"
  264. INSERT INTO macaddress (MAC_ADDRESS, PLANTCODE, CREATETIME, FACILITY_STYLE)
  265. VALUES (@mac, @plant, @time, @style)";
  266. command.Parameters.AddWithValue("@mac", "00:11:22:33:44:55");
  267. command.Parameters.AddWithValue("@plant", "PLANT001");
  268. command.Parameters.AddWithValue("@time", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
  269. command.Parameters.AddWithValue("@style", "Style A");
  270. command.ExecuteNonQuery();
  271. }
  272. }
  273. }
  274. }
  275. }