daily_records.js 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  1. const mysql = require('mysql2/promise');
  2. const tools = require('../tools');
  3. const database_config = tools.getDataBaseConfig();
  4. class DailyRecordManager {
  5. constructor() {
  6. this.pool = mysql.createPool(database_config);
  7. }
  8. // 创建记录
  9. async createRecord(date, content) {
  10. try {
  11. const connection = await this.pool.getConnection();
  12. try {
  13. const [result] = await connection.execute(
  14. 'INSERT IGNORE INTO daily_records (record_date, content) VALUES (?, ?)',
  15. [date, JSON.stringify(content)]
  16. );
  17. return {
  18. success: result.affectedRows > 0,
  19. message: result.affectedRows > 0 ? '记录创建成功' : '该日期记录已存在'
  20. };
  21. } finally {
  22. connection.release();
  23. }
  24. } catch (error) {
  25. console.error('创建记录失败:', error);
  26. throw error;
  27. }
  28. }
  29. // 更新记录
  30. async updateRecord(date, content) {
  31. try {
  32. const connection = await this.pool.getConnection();
  33. try {
  34. const [result] = await connection.execute(
  35. 'UPDATE daily_records SET content = ? WHERE record_date = ?',
  36. [JSON.stringify(content), date]
  37. );
  38. return {
  39. success: result.affectedRows > 0,
  40. message: result.affectedRows > 0 ? '记录更新成功' : '记录不存在'
  41. };
  42. } finally {
  43. connection.release();
  44. }
  45. } catch (error) {
  46. console.error('更新记录失败:', error,content,date);
  47. throw error;
  48. }
  49. }
  50. // 获取记录
  51. async getRecord(date) {
  52. try {
  53. const connection = await this.pool.getConnection();
  54. try {
  55. const [rows] = await connection.execute(
  56. 'SELECT * FROM daily_records WHERE record_date = ?',
  57. [date]
  58. );
  59. return rows.length > 0 ? {
  60. ...rows[0],
  61. content: JSON.parse(rows[0].content)
  62. } : null;
  63. } finally {
  64. connection.release();
  65. }
  66. } catch (error) {
  67. console.error('获取记录失败:', error);
  68. throw error;
  69. }
  70. }
  71. // 获取日期范围内的记录
  72. async getRecordsInRange(startDate, endDate) {
  73. try {
  74. const connection = await this.pool.getConnection();
  75. try {
  76. const [rows] = await connection.execute(
  77. 'SELECT * FROM daily_records WHERE record_date BETWEEN ? AND ? ORDER BY record_date',
  78. [startDate, endDate]
  79. );
  80. return rows.map(row => ({
  81. ...row,
  82. content: JSON.parse(row.content)
  83. }));
  84. } finally {
  85. connection.release();
  86. }
  87. } catch (error) {
  88. console.error('获取记录范围失败:', error);
  89. throw error;
  90. }
  91. }
  92. // 检查日期是否存在记录
  93. async hasRecord(date) {
  94. try {
  95. const connection = await this.pool.getConnection();
  96. try {
  97. const [rows] = await connection.execute(
  98. 'SELECT 1 FROM daily_records WHERE record_date = ?',
  99. [date]
  100. );
  101. return rows.length > 0;
  102. } finally {
  103. connection.release();
  104. }
  105. } catch (error) {
  106. console.error('检查记录失败:', error);
  107. throw error;
  108. }
  109. }
  110. }
  111. module.exports = DailyRecordManager;
  112. // 使用示例
  113. async function example() {
  114. const manager = new DailyRecordManager();
  115. try {
  116. // 创建今天的记录
  117. const today = new Date().toISOString().split('T')[0];
  118. const result = await manager.createRecord(today, {
  119. data: '示例数据',
  120. value: 123
  121. });
  122. console.log('创建结果:', result);
  123. // 尝试再次创建今天的记录(会失败因为已存在)
  124. const duplicateResult = await manager.createRecord(today, {
  125. data: '新数据',
  126. value: 456
  127. });
  128. console.log('重复创建结果:', duplicateResult);
  129. // 更新今天的记录
  130. const updateResult = await manager.updateRecord(today, {
  131. data: '更新的数据',
  132. value: 789
  133. });
  134. console.log('更新结果:', updateResult);
  135. // 获取今天的记录
  136. const record = await manager.getRecord(today);
  137. console.log('获取的记录:', record);
  138. // 获取最近7天的记录
  139. const sevenDaysAgo = new Date();
  140. sevenDaysAgo.setDate(sevenDaysAgo.getDate() - 7);
  141. const rangeRecords = await manager.getRecordsInRange(
  142. sevenDaysAgo.toISOString().split('T')[0],
  143. today
  144. );
  145. console.log('范围记录:', rangeRecords);
  146. } catch (error) {
  147. console.error('操作失败:', error);
  148. }
  149. }
  150. // 执行示例
  151. // example();