db.js 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222
  1. import { getDatabaseDir } from "./env";
  2. import { formatDate } from "./utils";
  3. const path = require("path");
  4. const fs = require("fs");
  5. const sqlite = require("sqlite3").verbose();
  6. let db = undefined;
  7. init();
  8. function init(sqlName = "client") {
  9. if (db) return;
  10. const databasePath = getDatabaseDir();
  11. var orgDb = path.join(databasePath, "org.rdb");
  12. var clientDb = path.join(databasePath, sqlName + ".rdb");
  13. if (!fs.existsSync(clientDb)) {
  14. fs.copyFileSync(orgDb, clientDb);
  15. }
  16. db = new sqlite.Database(clientDb, sqlite.OPEN_READWRITE);
  17. }
  18. function serializeWhere(params) {
  19. const where = Object.keys(params)
  20. .map(key => {
  21. if (key.indexOf("Time") !== -1) {
  22. return `${key} LIKE $${key}`;
  23. } else {
  24. return `${key} = $${key}`;
  25. }
  26. })
  27. .join(" AND ");
  28. const whereData = {};
  29. Object.entries(params).map(([key, val]) => {
  30. whereData[`$${key}`] = key.indexOf("Time") !== -1 ? `${val}%` : val;
  31. });
  32. return {
  33. where,
  34. whereData
  35. };
  36. }
  37. // function serializeUpdate(params) {
  38. // const template = Object.keys(params)
  39. // .map(key => {
  40. // return `${key}=$${key}`;
  41. // })
  42. // .join(",");
  43. // const templateData = {};
  44. // Object.entries(params).map(([key, val]) => {
  45. // templateData[`$${key}`] = val;
  46. // });
  47. // return {
  48. // template,
  49. // templateData
  50. // };
  51. // }
  52. // scan
  53. function saveUploadInfo(params) {
  54. const sql = `INSERT INTO scan (taskId, taskName, courseCode, courseName, teachingClassName, frontOriginImgPath, versoOriginImgPath, clientUserId, clientUsername, clientUserLoginTime, isUpload,createdTime, finishTime) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?)`;
  55. const datas = [
  56. params.taskId,
  57. params.taskName,
  58. params.courseCode,
  59. params.courseName,
  60. params.teachingClassName,
  61. params.frontOriginImgPath,
  62. params.versoOriginImgPath,
  63. params.clientUserId,
  64. params.clientUsername,
  65. params.clientUserLoginTime,
  66. 0, // isUpload
  67. formatDate(), // createdTime
  68. null
  69. ];
  70. return new Promise((resolve, reject) => {
  71. db.serialize(() => {
  72. db.run(sql, datas, function(err) {
  73. if (err) reject(err);
  74. resolve(this.lastID);
  75. });
  76. });
  77. });
  78. }
  79. function searchUploadList(params) {
  80. const { where, whereData } = serializeWhere(params);
  81. const sql = `SELECT * FROM scan WHERE ${where}`;
  82. return new Promise((resolve, reject) => {
  83. db.all(sql, whereData, (err, rows) => {
  84. if (err) reject("search info fail!");
  85. resolve(rows);
  86. });
  87. });
  88. }
  89. function countScanList(params) {
  90. const { where, whereData } = serializeWhere(params);
  91. const sql = `SELECT COUNT(1) AS count FROM scan WHERE ${where}`;
  92. return new Promise((resolve, reject) => {
  93. db.all(sql, whereData, (err, rows) => {
  94. if (err) reject("count list fail!");
  95. resolve(rows[0].count);
  96. });
  97. });
  98. }
  99. function getUploadCount(limitTime) {
  100. const sql = `SELECT COUNT(1) AS count FROM scan WHERE strftime('%s',finishTime, 'utc') >= '${limitTime}' AND isUpload = 1`;
  101. return new Promise((resolve, reject) => {
  102. db.all(sql, (err, rows) => {
  103. if (err) reject("count list fail!");
  104. resolve(rows[0].count);
  105. });
  106. });
  107. }
  108. function updateUploadState(id) {
  109. const sql = `UPDATE scan SET isUpload=$isUpload,finishTime=$finishTime WHERE id=$id`;
  110. const datas = {
  111. $isUpload: 1,
  112. $finishTime: formatDate(),
  113. $id: id
  114. };
  115. return new Promise((resolve, reject) => {
  116. db.run(sql, datas, err => {
  117. if (err) reject("update upload info fail!");
  118. resolve();
  119. });
  120. });
  121. }
  122. function deleteScanById(id) {
  123. const sql = `DELETE FROM scan WHERE id=$id`;
  124. const datas = {
  125. $id: id
  126. };
  127. return new Promise((resolve, reject) => {
  128. db.run(sql, datas, err => {
  129. if (err) reject("delete scan fail!");
  130. resolve(true);
  131. });
  132. });
  133. }
  134. // dict
  135. function getAllDict() {
  136. const sql = `SELECT * FROM dict`;
  137. return new Promise((resolve, reject) => {
  138. db.all(sql, (err, rows) => {
  139. if (err) reject("get all dict fail!");
  140. const storeDict = {};
  141. rows.map(item => {
  142. storeDict[item.key] = item.val;
  143. });
  144. resolve(storeDict);
  145. });
  146. });
  147. }
  148. function initDict(key, val = "") {
  149. const sql = `INSERT INTO dict (key, val) VALUES (?,?)`;
  150. const datas = [key, val];
  151. return new Promise((resolve, reject) => {
  152. db.run(sql, datas, err => {
  153. if (err) reject(`init dict ${key} fail!`);
  154. resolve();
  155. });
  156. });
  157. }
  158. function getDict(key, defaultVal = "") {
  159. const sql = `SELECT * FROM dict WHERE key=?`;
  160. return new Promise((resolve, reject) => {
  161. db.get(sql, key, (err, row) => {
  162. if (err) reject(`get dict ${key} fail!`);
  163. resolve((row && row.val) || defaultVal);
  164. });
  165. });
  166. }
  167. function setDict(key, val) {
  168. const sql = `UPDATE dict SET val=? WHERE key=?`;
  169. return new Promise((resolve, reject) => {
  170. db.run(sql, [val, key], err => {
  171. if (err) reject(`update dict ${key} fail!`);
  172. resolve(true);
  173. });
  174. });
  175. }
  176. export default {
  177. init,
  178. // scan
  179. saveUploadInfo,
  180. searchUploadList,
  181. countScanList,
  182. getUploadCount,
  183. updateUploadState,
  184. deleteScanById,
  185. // dict
  186. getDict,
  187. setDict,
  188. getAllDict,
  189. initDict
  190. };