db.js 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223
  1. import { getDatabaseDir } from "./env";
  2. import { formatDate } from "./utils";
  3. const path = window.nodeRequire("path");
  4. const fs = window.nodeRequire("fs");
  5. const sqlite = window.nodeRequire("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, examNumber,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.examNumber,
  64. params.clientUserId,
  65. params.clientUsername,
  66. params.clientUserLoginTime,
  67. 0, // isUpload
  68. formatDate(), // createdTime
  69. null
  70. ];
  71. return new Promise((resolve, reject) => {
  72. db.serialize(() => {
  73. db.run(sql, datas, function(err) {
  74. if (err) reject(err);
  75. resolve(this.lastID);
  76. });
  77. });
  78. });
  79. }
  80. function searchUploadList(params) {
  81. const { where, whereData } = serializeWhere(params);
  82. const sql = `SELECT * FROM scan WHERE ${where}`;
  83. return new Promise((resolve, reject) => {
  84. db.all(sql, whereData, (err, rows) => {
  85. if (err) reject("search info fail!");
  86. resolve(rows);
  87. });
  88. });
  89. }
  90. function countScanList(params) {
  91. const { where, whereData } = serializeWhere(params);
  92. const sql = `SELECT COUNT(1) AS count FROM scan WHERE ${where}`;
  93. return new Promise((resolve, reject) => {
  94. db.all(sql, whereData, (err, rows) => {
  95. if (err) reject("count list fail!");
  96. resolve(rows[0].count);
  97. });
  98. });
  99. }
  100. function getUploadCount(limitTime) {
  101. const sql = `SELECT COUNT(1) AS count FROM scan WHERE strftime('%s',finishTime, 'utc') >= '${limitTime}' AND isUpload = 1`;
  102. return new Promise((resolve, reject) => {
  103. db.all(sql, (err, rows) => {
  104. if (err) reject("count list fail!");
  105. resolve(rows[0].count);
  106. });
  107. });
  108. }
  109. function updateUploadState(id) {
  110. const sql = `UPDATE scan SET isUpload=$isUpload,finishTime=$finishTime WHERE id=$id`;
  111. const datas = {
  112. $isUpload: 1,
  113. $finishTime: formatDate(),
  114. $id: id
  115. };
  116. return new Promise((resolve, reject) => {
  117. db.run(sql, datas, err => {
  118. if (err) reject("update upload info fail!");
  119. resolve();
  120. });
  121. });
  122. }
  123. function deleteScanById(id) {
  124. const sql = `DELETE FROM scan WHERE id=$id`;
  125. const datas = {
  126. $id: id
  127. };
  128. return new Promise((resolve, reject) => {
  129. db.run(sql, datas, err => {
  130. if (err) reject("delete scan fail!");
  131. resolve(true);
  132. });
  133. });
  134. }
  135. // dict
  136. function getAllDict() {
  137. const sql = `SELECT * FROM dict`;
  138. return new Promise((resolve, reject) => {
  139. db.all(sql, (err, rows) => {
  140. if (err) reject("get all dict fail!");
  141. const storeDict = {};
  142. rows.map(item => {
  143. storeDict[item.key] = item.val;
  144. });
  145. resolve(storeDict);
  146. });
  147. });
  148. }
  149. function initDict(key, val = "") {
  150. const sql = `INSERT INTO dict (key, val) VALUES (?,?)`;
  151. const datas = [key, val];
  152. return new Promise((resolve, reject) => {
  153. db.run(sql, datas, err => {
  154. if (err) reject(`init dict ${key} fail!`);
  155. resolve();
  156. });
  157. });
  158. }
  159. function getDict(key, defaultVal = "") {
  160. const sql = `SELECT * FROM dict WHERE key=?`;
  161. return new Promise((resolve, reject) => {
  162. db.get(sql, key, (err, row) => {
  163. if (err) reject(`get dict ${key} fail!`);
  164. resolve((row && row.val) || defaultVal);
  165. });
  166. });
  167. }
  168. function setDict(key, val) {
  169. const sql = `UPDATE dict SET val=? WHERE key=?`;
  170. return new Promise((resolve, reject) => {
  171. db.run(sql, [val, key], err => {
  172. if (err) reject(`update dict ${key} fail!`);
  173. resolve(true);
  174. });
  175. });
  176. }
  177. export default {
  178. init,
  179. // scan
  180. saveUploadInfo,
  181. searchUploadList,
  182. countScanList,
  183. getUploadCount,
  184. updateUploadState,
  185. deleteScanById,
  186. // dict
  187. getDict,
  188. setDict,
  189. getAllDict,
  190. initDict
  191. };