device.js 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. exports.DeviceModel = void 0;
  4. const database_1 = require("../config/database");
  5. class DeviceModel {
  6. static async getAll(limit, offset) {
  7. let query = 'SELECT * FROM devices ORDER BY updated_at DESC';
  8. const params = [];
  9. if (limit !== undefined) {
  10. query += ' LIMIT ?';
  11. params.push(limit);
  12. if (offset !== undefined) {
  13. query += ' OFFSET ?';
  14. params.push(offset);
  15. }
  16. }
  17. return await (0, database_1.executeQuery)(query, params);
  18. }
  19. static async getByStatus(status) {
  20. const query = 'SELECT * FROM devices WHERE status = ? ORDER BY updated_at DESC';
  21. return await (0, database_1.executeQuery)(query, [status]);
  22. }
  23. static async getByClientId(clientid) {
  24. const query = 'SELECT * FROM devices WHERE clientid = ?';
  25. const devices = await (0, database_1.executeQuery)(query, [clientid]);
  26. return devices.length > 0 ? devices[0] : null;
  27. }
  28. static async getBySearch(searchTerm) {
  29. const query = 'SELECT * FROM devices WHERE clientid LIKE ? OR device_name LIKE ? ORDER BY updated_at DESC';
  30. const searchPattern = `%${searchTerm}%`;
  31. return await (0, database_1.executeQuery)(query, [searchPattern, searchPattern]);
  32. }
  33. static async getCountByStatus(status) {
  34. const query = 'SELECT COUNT(*) as count FROM devices WHERE status = ?';
  35. const result = await (0, database_1.executeQuery)(query, [status]);
  36. return result[0].count;
  37. }
  38. static async getCountBySearch(searchTerm) {
  39. const query = 'SELECT COUNT(*) as count FROM devices WHERE clientid LIKE ? OR device_name LIKE ?';
  40. const searchPattern = `%${searchTerm}%`;
  41. const result = await (0, database_1.executeQuery)(query, [searchPattern, searchPattern]);
  42. return result[0].count;
  43. }
  44. static async getCount() {
  45. const query = 'SELECT COUNT(*) as count FROM devices';
  46. const result = await (0, database_1.executeQuery)(query);
  47. return result[0].count;
  48. }
  49. static async getStatusStats() {
  50. const connection = await database_1.config.getConnection().getConnection();
  51. try {
  52. const [rows] = await connection.execute(`SELECT
  53. status,
  54. COUNT(*) as count
  55. FROM devices
  56. GROUP BY status`);
  57. return rows;
  58. }
  59. finally {
  60. connection.release();
  61. }
  62. }
  63. static async getDeviceStats() {
  64. const connection = await database_1.config.getConnection().getConnection();
  65. try {
  66. const [totalResult] = await connection.execute('SELECT COUNT(*) as total FROM devices');
  67. const total = totalResult[0].total;
  68. const [onlineResult] = await connection.execute("SELECT COUNT(*) as online FROM devices WHERE status = 'online'");
  69. const online = onlineResult[0].online;
  70. const [offlineResult] = await connection.execute("SELECT COUNT(*) as offline FROM devices WHERE status = 'offline'");
  71. const offline = offlineResult[0].offline;
  72. return {
  73. total,
  74. online,
  75. offline,
  76. onlineRate: total > 0 ? Math.round((online / total) * 100) : 0
  77. };
  78. }
  79. finally {
  80. connection.release();
  81. }
  82. }
  83. static async create(deviceData) {
  84. const query = `
  85. INSERT INTO devices (clientid, device_name, username, firmware_version, device_ip_port, last_ip_port, status, last_event_time, last_online_time, last_offline_time, online_duration, connect_count)
  86. VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
  87. `;
  88. const values = [
  89. deviceData.clientid,
  90. deviceData.device_name || null,
  91. deviceData.username || null,
  92. deviceData.firmware_version || null,
  93. deviceData.device_ip_port || null,
  94. deviceData.last_ip_port || null,
  95. deviceData.status || 'unknown',
  96. deviceData.last_event_time || null,
  97. deviceData.last_online_time || null,
  98. deviceData.last_offline_time || null,
  99. deviceData.online_duration || 0,
  100. deviceData.connect_count || 0
  101. ];
  102. const result = await (0, database_1.executeQuery)(query, values);
  103. const insertId = result.insertId;
  104. return this.getByClientId(deviceData.clientid);
  105. }
  106. static async update(clientId, updateData) {
  107. console.log('DeviceModel.update 被调用,clientId:', clientId, 'updateData:', updateData);
  108. const fields = [];
  109. const values = [];
  110. if (updateData.device_name !== undefined) {
  111. fields.push('device_name = ?');
  112. values.push(updateData.device_name);
  113. console.log('添加 device_name 字段到更新列表:', updateData.device_name);
  114. }
  115. if (updateData.username !== undefined) {
  116. fields.push('username = ?');
  117. values.push(updateData.username);
  118. }
  119. if (updateData.firmware_version !== undefined) {
  120. fields.push('firmware_version = ?');
  121. values.push(updateData.firmware_version);
  122. }
  123. if (updateData.device_ip_port !== undefined) {
  124. fields.push('device_ip_port = ?');
  125. values.push(updateData.device_ip_port);
  126. }
  127. if (updateData.last_ip_port !== undefined) {
  128. fields.push('last_ip_port = ?');
  129. values.push(updateData.last_ip_port);
  130. }
  131. if (updateData.status !== undefined) {
  132. fields.push('status = ?');
  133. values.push(updateData.status);
  134. }
  135. if (updateData.last_event_time !== undefined) {
  136. fields.push('last_event_time = ?');
  137. values.push(updateData.last_event_time);
  138. }
  139. if (updateData.last_online_time !== undefined) {
  140. fields.push('last_online_time = ?');
  141. values.push(updateData.last_online_time);
  142. }
  143. if (updateData.last_offline_time !== undefined) {
  144. fields.push('last_offline_time = ?');
  145. values.push(updateData.last_offline_time);
  146. }
  147. if (updateData.online_duration !== undefined) {
  148. fields.push('online_duration = ?');
  149. values.push(updateData.online_duration);
  150. }
  151. if (updateData.connect_count !== undefined) {
  152. fields.push('connect_count = ?');
  153. values.push(updateData.connect_count);
  154. }
  155. if (updateData.rssi !== undefined) {
  156. fields.push('rssi = ?');
  157. values.push(updateData.rssi);
  158. }
  159. fields.push('updated_at = NOW()');
  160. values.push(clientId);
  161. const query = `
  162. UPDATE devices
  163. SET ${fields.join(', ')}
  164. WHERE clientid = ?
  165. `;
  166. console.log('执行更新SQL:', query);
  167. console.log('参数值:', values);
  168. const result = await (0, database_1.executeQuery)(query, values);
  169. console.log('更新结果:', result);
  170. return result.affectedRows > 0;
  171. }
  172. static async updateOnlineDuration(clientId, duration) {
  173. const query = 'UPDATE devices SET online_duration = online_duration + ? WHERE clientid = ?';
  174. const result = await (0, database_1.executeQuery)(query, [duration, clientId]);
  175. return result.affectedRows > 0;
  176. }
  177. static async deleteByClientId(clientId) {
  178. const query = 'DELETE FROM devices WHERE clientid = ?';
  179. const result = await (0, database_1.executeQuery)(query, [clientId]);
  180. return result.affectedRows > 0;
  181. }
  182. }
  183. exports.DeviceModel = DeviceModel;
  184. //# sourceMappingURL=device.js.map