|
@@ -0,0 +1,816 @@
|
|
|
|
+import { getDatabaseDir } from "./env";
|
|
|
|
+import { formatDate } from "./utils";
|
|
|
|
+const path = require("path");
|
|
|
|
+const fs = require("fs");
|
|
|
|
+const sqlite = require("sqlite3").verbose();
|
|
|
|
+
|
|
|
|
+let db = undefined;
|
|
|
|
+
|
|
|
|
+init();
|
|
|
|
+
|
|
|
|
+function init(sqlName = "client") {
|
|
|
|
+ if (db) return;
|
|
|
|
+ const databasePath = getDatabaseDir();
|
|
|
|
+ var orgDb = path.join(databasePath, "org.rdb");
|
|
|
|
+ var clientDb = path.join(databasePath, sqlName + ".rdb");
|
|
|
|
+
|
|
|
|
+ if (!fs.existsSync(clientDb)) {
|
|
|
|
+ fs.copyFileSync(orgDb, clientDb);
|
|
|
|
+ }
|
|
|
|
+ db = new sqlite.Database(clientDb, sqlite.OPEN_READWRITE);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+function serializeWhere(params) {
|
|
|
|
+ const where = Object.keys(params)
|
|
|
|
+ .map(key => {
|
|
|
|
+ if (key.indexOf("Time") !== -1) {
|
|
|
|
+ return `${key} LIKE $${key}`;
|
|
|
|
+ } else {
|
|
|
|
+ return `${key} = $${key}`;
|
|
|
|
+ }
|
|
|
|
+ })
|
|
|
|
+ .join(" AND ");
|
|
|
|
+ const whereData = {};
|
|
|
|
+ Object.entries(params).map(([key, val]) => {
|
|
|
|
+ whereData[`$${key}`] = key.indexOf("Time") !== -1 ? `${val}%` : val;
|
|
|
|
+ });
|
|
|
|
+
|
|
|
|
+ return {
|
|
|
|
+ where,
|
|
|
|
+ whereData
|
|
|
|
+ };
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+function serializeUpdate(params) {
|
|
|
|
+ const template = Object.keys(params)
|
|
|
|
+ .map(key => {
|
|
|
|
+ return `${key}=$${key}`;
|
|
|
|
+ })
|
|
|
|
+ .join(",");
|
|
|
|
+ const templateData = {};
|
|
|
|
+ Object.entries(params).map(([key, val]) => {
|
|
|
|
+ templateData[`$${key}`] = val;
|
|
|
|
+ });
|
|
|
|
+
|
|
|
|
+ return {
|
|
|
|
+ template,
|
|
|
|
+ templateData
|
|
|
|
+ };
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+// scan
|
|
|
|
+function saveUploadInfo(params) {
|
|
|
|
+ const sql = `INSERT INTO scan (examId, examName, subjectId, subjectName, examNumber, studentName, siteCode, roomCode, originImgPath,formalImgPath, sliceImgPath,compressRate,isManual,imageEncrypt,level,clientUserId, clientUsername, clientUserLoginTime, isUpload,createdTime, finishTime) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)`;
|
|
|
|
+ const datas = [
|
|
|
|
+ params.examId,
|
|
|
|
+ params.examName,
|
|
|
|
+ params.subjectId,
|
|
|
|
+ params.subjectName,
|
|
|
|
+ params.examNumber,
|
|
|
|
+ params.studentName,
|
|
|
|
+ params.siteCode,
|
|
|
|
+ params.roomCode,
|
|
|
|
+ params.originImgPath || "",
|
|
|
|
+ params.formalImgPath,
|
|
|
|
+ params.sliceImgPath,
|
|
|
|
+ params.compressRate || 100,
|
|
|
|
+ params.isManual ? 1 : 0,
|
|
|
|
+ params.imageEncrypt,
|
|
|
|
+ params.level,
|
|
|
|
+ params.clientUserId,
|
|
|
|
+ params.clientUsername,
|
|
|
|
+ params.clientUserLoginTime,
|
|
|
|
+ 0, // isUpload
|
|
|
|
+ formatDate(), // createdTime
|
|
|
|
+ null
|
|
|
|
+ ];
|
|
|
|
+ return new Promise((resolve, reject) => {
|
|
|
|
+ db.serialize(() => {
|
|
|
|
+ db.run(sql, datas, function(err) {
|
|
|
|
+ if (err) reject(err);
|
|
|
|
+ resolve(this.lastID);
|
|
|
|
+ });
|
|
|
|
+ });
|
|
|
|
+ });
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+function searchUploadList(params) {
|
|
|
|
+ const { where, whereData } = serializeWhere(params);
|
|
|
|
+
|
|
|
|
+ const sql = `SELECT * FROM scan WHERE ${where}`;
|
|
|
|
+
|
|
|
|
+ return new Promise((resolve, reject) => {
|
|
|
|
+ db.all(sql, whereData, (err, rows) => {
|
|
|
|
+ if (err) reject("search info fail!");
|
|
|
|
+ resolve(rows);
|
|
|
|
+ });
|
|
|
|
+ });
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+function countScanList(params) {
|
|
|
|
+ const { where, whereData } = serializeWhere(params);
|
|
|
|
+ const sql = `SELECT COUNT(1) AS count FROM scan WHERE ${where}`;
|
|
|
|
+
|
|
|
|
+ return new Promise((resolve, reject) => {
|
|
|
|
+ db.all(sql, whereData, (err, rows) => {
|
|
|
|
+ if (err) reject("count list fail!");
|
|
|
|
+
|
|
|
|
+ resolve(rows[0].count);
|
|
|
|
+ });
|
|
|
|
+ });
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+function getUploadCount(limitTime) {
|
|
|
|
+ const sql = `SELECT COUNT(1) AS count FROM scan WHERE strftime('%s',finishTime, 'utc') >= '${limitTime}' AND isUpload = 1`;
|
|
|
|
+
|
|
|
|
+ return new Promise((resolve, reject) => {
|
|
|
|
+ db.all(sql, (err, rows) => {
|
|
|
|
+ if (err) reject("count list fail!");
|
|
|
|
+
|
|
|
|
+ resolve(rows[0].count);
|
|
|
|
+ });
|
|
|
|
+ });
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+function getScanCount(limitTime, subjectId) {
|
|
|
|
+ const sql = `SELECT COUNT(DISTINCT examNumber) AS count FROM scan WHERE strftime('%s',createdTime, 'utc') >= '${limitTime}' AND subjectId = '${subjectId}'`;
|
|
|
|
+
|
|
|
|
+ return new Promise((resolve, reject) => {
|
|
|
|
+ db.all(sql, (err, rows) => {
|
|
|
|
+ if (err) reject("count list fail!");
|
|
|
|
+
|
|
|
|
+ resolve(rows[0].count);
|
|
|
|
+ });
|
|
|
|
+ });
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+function getHistory(limitTime, subjectId) {
|
|
|
|
+ const sql = `SELECT max(id) id, examNumber,studentName name,formalImgPath FROM scan WHERE strftime('%s',createdTime, 'utc') >= '${limitTime}' AND subjectId = '${subjectId}' GROUP BY examNumber ORDER BY id DESC LIMIT 30`;
|
|
|
|
+
|
|
|
|
+ return new Promise((resolve, reject) => {
|
|
|
|
+ db.all(sql, (err, rows) => {
|
|
|
|
+ if (err) reject("get list fail!");
|
|
|
|
+
|
|
|
|
+ resolve(rows);
|
|
|
|
+ });
|
|
|
|
+ });
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+function updateUploadState(id) {
|
|
|
|
+ const sql = `UPDATE scan SET isUpload=$isUpload,finishTime=$finishTime WHERE id=$id`;
|
|
|
|
+ const datas = {
|
|
|
|
+ $isUpload: 1,
|
|
|
|
+ $finishTime: formatDate(),
|
|
|
|
+ $id: id
|
|
|
|
+ };
|
|
|
|
+ return new Promise((resolve, reject) => {
|
|
|
|
+ db.run(sql, datas, err => {
|
|
|
|
+ if (err) reject("update upload info fail!");
|
|
|
|
+
|
|
|
|
+ resolve();
|
|
|
|
+ });
|
|
|
|
+ });
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+function updateLocalPaperId(id, paperId) {
|
|
|
|
+ const sql = `UPDATE scan SET paperId=$paperId WHERE id=$id`;
|
|
|
|
+ const datas = {
|
|
|
|
+ $paperId: paperId,
|
|
|
|
+ $id: id
|
|
|
|
+ };
|
|
|
|
+ return new Promise((resolve, reject) => {
|
|
|
|
+ db.run(sql, datas, err => {
|
|
|
|
+ if (err) reject("update paperId info fail!");
|
|
|
|
+
|
|
|
|
+ resolve();
|
|
|
|
+ });
|
|
|
|
+ });
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+function deleteScanById(id) {
|
|
|
|
+ const sql = `DELETE FROM scan WHERE id=$id`;
|
|
|
|
+ const datas = {
|
|
|
|
+ $id: id
|
|
|
|
+ };
|
|
|
|
+ return new Promise((resolve, reject) => {
|
|
|
|
+ db.run(sql, datas, err => {
|
|
|
|
+ if (err) reject("delete scan fail!");
|
|
|
|
+
|
|
|
|
+ resolve(true);
|
|
|
|
+ });
|
|
|
|
+ });
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+// dict
|
|
|
|
+function getAllDict() {
|
|
|
|
+ const sql = `SELECT * FROM dict`;
|
|
|
|
+
|
|
|
|
+ return new Promise((resolve, reject) => {
|
|
|
|
+ db.all(sql, (err, rows) => {
|
|
|
|
+ if (err) reject("get all dict fail!");
|
|
|
|
+
|
|
|
|
+ const storeDict = {};
|
|
|
|
+ rows.map(item => {
|
|
|
|
+ storeDict[item.key] = item.val;
|
|
|
|
+ });
|
|
|
|
+ resolve(storeDict);
|
|
|
|
+ });
|
|
|
|
+ });
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+function initDict(key, val = "") {
|
|
|
|
+ const sql = `INSERT INTO dict (key, val) VALUES (?,?)`;
|
|
|
|
+ const datas = [key, val];
|
|
|
|
+
|
|
|
|
+ return new Promise((resolve, reject) => {
|
|
|
|
+ db.run(sql, datas, err => {
|
|
|
|
+ if (err) reject(`init dict ${key} fail!`);
|
|
|
|
+
|
|
|
|
+ resolve();
|
|
|
|
+ });
|
|
|
|
+ });
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+function getDict(key, defaultVal = "") {
|
|
|
|
+ const sql = `SELECT * FROM dict WHERE key=?`;
|
|
|
|
+ return new Promise((resolve, reject) => {
|
|
|
|
+ db.get(sql, key, (err, row) => {
|
|
|
|
+ if (err) reject(`get dict ${key} fail!`);
|
|
|
|
+ resolve((row && row.val) || defaultVal);
|
|
|
|
+ });
|
|
|
|
+ });
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+function setDict(key, val) {
|
|
|
|
+ const sql = `UPDATE dict SET val=? WHERE key=?`;
|
|
|
|
+ return new Promise((resolve, reject) => {
|
|
|
|
+ db.run(sql, [val, key], err => {
|
|
|
|
+ if (err) reject(`update dict ${key} fail!`);
|
|
|
|
+
|
|
|
|
+ resolve();
|
|
|
|
+ });
|
|
|
|
+ });
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+// paper-manage
|
|
|
|
+function getAreas(subjectId) {
|
|
|
|
+ const sql = `SELECT DISTINCT siteCode from scan WHERE subjectId = '${subjectId}'`;
|
|
|
|
+
|
|
|
|
+ return new Promise((resolve, reject) => {
|
|
|
|
+ db.all(sql, (err, rows) => {
|
|
|
|
+ if (err) reject("get list fail!");
|
|
|
|
+ resolve(rows.map(item => item.siteCode));
|
|
|
|
+ });
|
|
|
|
+ });
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+function getPaperList({
|
|
|
|
+ examId,
|
|
|
|
+ subjectId,
|
|
|
|
+ areaCode,
|
|
|
|
+ isManual,
|
|
|
|
+ missing,
|
|
|
|
+ sortBy,
|
|
|
|
+ pageNumber,
|
|
|
|
+ pageSize
|
|
|
|
+}) {
|
|
|
|
+ const orderBy = sortBy === "1" ? "id DESC" : "examNumber ASC";
|
|
|
|
+
|
|
|
|
+ let options = [];
|
|
|
|
+ if (examId) {
|
|
|
|
+ options.push(`examId = '${examId}'`);
|
|
|
|
+ }
|
|
|
|
+ if (subjectId) {
|
|
|
|
+ options.push(`subjectId = '${subjectId}'`);
|
|
|
|
+ }
|
|
|
|
+ if (areaCode) {
|
|
|
|
+ options.push(`siteCode = '${areaCode}'`);
|
|
|
|
+ }
|
|
|
|
+ if (isManual !== null) {
|
|
|
|
+ options.push(`isManual = ${isManual}`);
|
|
|
|
+ }
|
|
|
|
+ if (missing !== null) {
|
|
|
|
+ options.push(`missing = ${missing}`);
|
|
|
|
+ }
|
|
|
|
+ const optionStr = options.length ? "WHERE " + options.join(" and ") : "";
|
|
|
|
+
|
|
|
|
+ const condition = `${optionStr} GROUP BY examNumber ORDER BY ${orderBy}`;
|
|
|
|
+ const countSql = `SELECT count(id) count FROM ( SELECT max(id) id FROM scan ${condition})`;
|
|
|
|
+
|
|
|
|
+ // console.log(countSql);
|
|
|
|
+
|
|
|
|
+ return new Promise((resolve, reject) => {
|
|
|
|
+ db.all(countSql, (err, rows) => {
|
|
|
|
+ if (err) reject("count list fail!");
|
|
|
|
+
|
|
|
|
+ // console.log(rows);
|
|
|
|
+
|
|
|
|
+ const total = rows[0].count;
|
|
|
|
+ const offset = (pageNumber - 1) * pageSize;
|
|
|
|
+ const sql = `SELECT max(id) pid, * FROM scan ${condition} LIMIT ${pageSize} OFFSET ${offset}`;
|
|
|
|
+
|
|
|
|
+ // console.log(sql);
|
|
|
|
+
|
|
|
|
+ db.all(sql, (err, rows) => {
|
|
|
|
+ if (err) reject("get list fail!");
|
|
|
|
+ resolve({
|
|
|
|
+ datas: rows,
|
|
|
|
+ pageNumber,
|
|
|
|
+ pageSize,
|
|
|
|
+ total
|
|
|
|
+ });
|
|
|
|
+ });
|
|
|
|
+ });
|
|
|
|
+ });
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+function absentLocalPaper(id, missing) {
|
|
|
|
+ const sql = `UPDATE scan SET missing=$missing WHERE id=$id`;
|
|
|
|
+ const datas = {
|
|
|
|
+ $missing: missing,
|
|
|
|
+ $id: id
|
|
|
|
+ };
|
|
|
|
+ return new Promise((resolve, reject) => {
|
|
|
|
+ db.run(sql, datas, err => {
|
|
|
|
+ if (err) reject("update absent info fail!");
|
|
|
|
+
|
|
|
|
+ resolve();
|
|
|
|
+ });
|
|
|
|
+ });
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+function saveRotateHistory(params) {
|
|
|
|
+ const sql = `INSERT INTO rotate_history (examId,subjectId,paperId, studentName, examNumber,imageEncrypt,filePath, isUpload,createdTime, finishTime) VALUES (?,?,?,?,?,?,?,?,?,?)`;
|
|
|
|
+ const datas = [
|
|
|
|
+ params.examId,
|
|
|
|
+ params.subjectId,
|
|
|
|
+ params.paperId,
|
|
|
|
+ params.studentName,
|
|
|
|
+ params.examNumber,
|
|
|
|
+ params.imageEncrypt,
|
|
|
|
+ params.filePath,
|
|
|
|
+ 0, // isUpload
|
|
|
|
+ formatDate(), // createdTime
|
|
|
|
+ null
|
|
|
|
+ ];
|
|
|
|
+ return new Promise((resolve, reject) => {
|
|
|
|
+ db.serialize(() => {
|
|
|
|
+ db.run(sql, datas, function(err) {
|
|
|
|
+ if (err) reject(err);
|
|
|
|
+ resolve(this.lastID);
|
|
|
|
+ });
|
|
|
|
+ });
|
|
|
|
+ });
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+function getUnfinishRotateHistoryList() {
|
|
|
|
+ const sql = `SELECT * FROM rotate_history WHERE isUpload = 0`;
|
|
|
|
+
|
|
|
|
+ return new Promise((resolve, reject) => {
|
|
|
|
+ db.all(sql, (err, rows) => {
|
|
|
|
+ if (err) reject("get history list fail!");
|
|
|
|
+
|
|
|
|
+ resolve(rows);
|
|
|
|
+ });
|
|
|
|
+ });
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+function getUnfinishRotateHistoryCount() {
|
|
|
|
+ const sql = `SELECT COUNT(1) AS count FROM rotate_history WHERE isUpload = 0`;
|
|
|
|
+
|
|
|
|
+ return new Promise((resolve, reject) => {
|
|
|
|
+ db.all(sql, (err, rows) => {
|
|
|
|
+ if (err) reject("count history list fail!");
|
|
|
|
+
|
|
|
|
+ resolve(rows[0].count);
|
|
|
|
+ });
|
|
|
|
+ });
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+function finishRotateHistory(id) {
|
|
|
|
+ const sql = `UPDATE rotate_history SET isUpload=$isUpload,finishTime=$finishTime WHERE id=$id`;
|
|
|
|
+ const datas = {
|
|
|
|
+ $id: id,
|
|
|
|
+ $isUpload: 1,
|
|
|
|
+ $finishTime: formatDate()
|
|
|
|
+ };
|
|
|
|
+ return new Promise((resolve, reject) => {
|
|
|
|
+ db.run(sql, datas, err => {
|
|
|
|
+ if (err) reject("update download task info fail!");
|
|
|
|
+
|
|
|
|
+ resolve(true);
|
|
|
|
+ });
|
|
|
|
+ });
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+// export data
|
|
|
|
+function addExportTask(params) {
|
|
|
|
+ const sql = `INSERT INTO export_task (examId, examName,imageType,isWatermark,isResume,nameRule,startScore,endScore,outputDir,savePathRule,isFinish,createdTime,finishTime) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?)`;
|
|
|
|
+ const datas = [
|
|
|
|
+ params.examId,
|
|
|
|
+ params.examName,
|
|
|
|
+ params.imageType,
|
|
|
|
+ params.isWatermark,
|
|
|
|
+ params.isResume,
|
|
|
|
+ params.nameRule,
|
|
|
|
+ params.startScore,
|
|
|
|
+ params.endScore,
|
|
|
|
+ params.outputDir,
|
|
|
|
+ params.savePathRule,
|
|
|
|
+ 0, // isFinish
|
|
|
|
+ formatDate(), // createdTime
|
|
|
|
+ null
|
|
|
|
+ ];
|
|
|
|
+
|
|
|
|
+ return new Promise((resolve, reject) => {
|
|
|
|
+ db.run(sql, datas, function(err) {
|
|
|
|
+ console.log(err);
|
|
|
|
+ if (err) reject(err);
|
|
|
|
+ resolve(this.lastID);
|
|
|
|
+ });
|
|
|
|
+ });
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+/**
|
|
|
|
+ *
|
|
|
|
+ * @param {Array} paramList 参数列表
|
|
|
|
+ */
|
|
|
|
+function addExportTaskDetail(paramList) {
|
|
|
|
+ const listVals = paramList.map(params => {
|
|
|
|
+ const datas = [
|
|
|
|
+ params.serialNo,
|
|
|
|
+ params.taskId,
|
|
|
|
+ params.examId,
|
|
|
|
+ params.examName,
|
|
|
|
+ params.school,
|
|
|
|
+ params.studentId,
|
|
|
|
+ params.studentName,
|
|
|
|
+ params.subject,
|
|
|
|
+ params.subjectName,
|
|
|
|
+ params.areaCode,
|
|
|
|
+ params.areaName,
|
|
|
|
+ params.examNumber,
|
|
|
|
+ params.score,
|
|
|
|
+ params.url,
|
|
|
|
+ params.filename,
|
|
|
|
+ 0, // isDownload
|
|
|
|
+ formatDate(), // createdTime
|
|
|
|
+ ""
|
|
|
|
+ ];
|
|
|
|
+ const nitem = datas.map(val =>
|
|
|
|
+ typeof val === "string" ? `'${val}'` : val
|
|
|
|
+ );
|
|
|
|
+ return `(${nitem.join(",")})`;
|
|
|
|
+ });
|
|
|
|
+ const vals = listVals.join(",");
|
|
|
|
+
|
|
|
|
+ const sql = `INSERT INTO export_task_detail (serialNo,taskId, examId, examName,school,studentId,studentName,subject,subjectName,areaCode,areaName,examNumber,score,url,filename,isDownload,createdTime,finishTime) VALUES ${vals}`;
|
|
|
|
+
|
|
|
|
+ return new Promise((resolve, reject) => {
|
|
|
|
+ db.run(sql, function(err) {
|
|
|
|
+ console.log(err);
|
|
|
|
+ if (err) reject(err);
|
|
|
|
+ resolve(true);
|
|
|
|
+ });
|
|
|
|
+ });
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+function getUnfinishTask() {
|
|
|
|
+ const sql = `SELECT * FROM export_task WHERE isFinish = 0 LIMIT 1;`;
|
|
|
|
+
|
|
|
|
+ return new Promise((resolve, reject) => {
|
|
|
|
+ db.all(sql, (err, rows) => {
|
|
|
|
+ if (err) reject("get task fail!");
|
|
|
|
+ resolve(rows[0]);
|
|
|
|
+ });
|
|
|
|
+ });
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+function getDownloadTaskList(taskId) {
|
|
|
|
+ const sql = `SELECT * FROM export_task_detail WHERE taskId = '${taskId}' and isDownload = 0`;
|
|
|
|
+
|
|
|
|
+ return new Promise((resolve, reject) => {
|
|
|
|
+ db.all(sql, (err, rows) => {
|
|
|
|
+ if (err) reject("get task list fail!");
|
|
|
|
+
|
|
|
|
+ resolve(rows);
|
|
|
|
+ });
|
|
|
|
+ });
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+function getDownloadTaskCount(params) {
|
|
|
|
+ const { where, whereData } = serializeWhere(params);
|
|
|
|
+ const sql = `SELECT COUNT(1) AS count FROM export_task_detail WHERE ${where}`;
|
|
|
|
+
|
|
|
|
+ return new Promise((resolve, reject) => {
|
|
|
|
+ db.all(sql, whereData, (err, rows) => {
|
|
|
|
+ if (err) reject("count task list fail!");
|
|
|
|
+
|
|
|
|
+ resolve(rows[0].count);
|
|
|
|
+ });
|
|
|
|
+ });
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+function updateDownloadTaskDownload(id) {
|
|
|
|
+ const sql = `UPDATE export_task_detail SET isDownload=$isDownload,finishTime=$finishTime WHERE id=$id`;
|
|
|
|
+ const datas = {
|
|
|
|
+ $id: id,
|
|
|
|
+ $isDownload: 1,
|
|
|
|
+ $finishTime: formatDate()
|
|
|
|
+ };
|
|
|
|
+ return new Promise((resolve, reject) => {
|
|
|
|
+ db.run(sql, datas, err => {
|
|
|
|
+ if (err) reject("update download task info fail!");
|
|
|
|
+
|
|
|
|
+ resolve(true);
|
|
|
|
+ });
|
|
|
|
+ });
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+function updateTaskFinish(id) {
|
|
|
|
+ const sql = `UPDATE export_task SET isFinish=$isFinish,finishTime=$finishTime WHERE id=$id`;
|
|
|
|
+ const datas = {
|
|
|
|
+ $id: id,
|
|
|
|
+ $isFinish: 1,
|
|
|
|
+ $finishTime: formatDate()
|
|
|
|
+ };
|
|
|
|
+ return new Promise((resolve, reject) => {
|
|
|
|
+ db.run(sql, datas, err => {
|
|
|
|
+ if (err) reject("update export task info fail!");
|
|
|
|
+
|
|
|
|
+ resolve(true);
|
|
|
|
+ });
|
|
|
|
+ });
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+// cropper-task
|
|
|
|
+export function getCropperTaskList(params) {
|
|
|
|
+ const { where, whereData } = serializeWhere(params);
|
|
|
|
+ let sql = `SELECT * FROM cropper_task`;
|
|
|
|
+ if (where) {
|
|
|
|
+ sql += ` WHERE ${where}`;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return new Promise((resolve, reject) => {
|
|
|
|
+ db.all(sql, whereData, (err, rows) => {
|
|
|
|
+ if (err) reject("search task fail!");
|
|
|
|
+ resolve(rows);
|
|
|
|
+ });
|
|
|
|
+ });
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+export function deleteCropperTaskById(id) {
|
|
|
|
+ const sql = `DELETE FROM cropper_task WHERE id=$id`;
|
|
|
|
+ const datas = {
|
|
|
|
+ $id: id
|
|
|
|
+ };
|
|
|
|
+ return new Promise((resolve, reject) => {
|
|
|
|
+ db.run(sql, datas, err => {
|
|
|
|
+ if (err) reject("delete cropper-task fail!");
|
|
|
|
+ resolve(true);
|
|
|
|
+ });
|
|
|
|
+ });
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+export function deleteCropperTaskDetail(cropperTaskId) {
|
|
|
|
+ const sql = `DELETE FROM cropper_task_detail WHERE cropperTaskId=$cropperTaskId`;
|
|
|
|
+ const datas = {
|
|
|
|
+ $cropperTaskId: cropperTaskId
|
|
|
|
+ };
|
|
|
|
+ return new Promise((resolve, reject) => {
|
|
|
|
+ db.run(sql, datas, err => {
|
|
|
|
+ if (err) reject("delete cropper-task-detail fail!");
|
|
|
|
+ resolve(true);
|
|
|
|
+ });
|
|
|
|
+ });
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+export function addCropperTask(params) {
|
|
|
|
+ const sql = `INSERT INTO cropper_task (name,inputFile,taskCount,finishedCount,createTime,updateTime) VALUES (?,?,?,?,?,?)`;
|
|
|
|
+ const datas = [
|
|
|
|
+ params.name,
|
|
|
|
+ params.inputFile,
|
|
|
|
+ params.taskCount,
|
|
|
|
+ 0,
|
|
|
|
+ formatDate(), // createTime
|
|
|
|
+ ""
|
|
|
|
+ ];
|
|
|
|
+
|
|
|
|
+ return new Promise((resolve, reject) => {
|
|
|
|
+ db.run(sql, datas, function(err) {
|
|
|
|
+ if (err) reject(err);
|
|
|
|
+ resolve(this.lastID);
|
|
|
|
+ });
|
|
|
|
+ });
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+export function updateCropperTask(params) {
|
|
|
|
+ const sql = `UPDATE cropper_task SET name=$name,inputFile=$inputFile,taskCount=$taskCount,finishedCount=$finishedCount,updateTime=$updateTime WHERE id=$id`;
|
|
|
|
+ const datas = {
|
|
|
|
+ $id: params.id,
|
|
|
|
+ $name: params.name,
|
|
|
|
+ $inputFile: params.inputFile,
|
|
|
|
+ $taskCount: params.taskCount,
|
|
|
|
+ $finishedCount: 0,
|
|
|
|
+ $updateTime: formatDate()
|
|
|
|
+ };
|
|
|
|
+ return new Promise((resolve, reject) => {
|
|
|
|
+ db.run(sql, datas, err => {
|
|
|
|
+ if (err) reject("update cropper task fail!");
|
|
|
|
+
|
|
|
|
+ resolve(true);
|
|
|
|
+ });
|
|
|
|
+ });
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+export function updateCropperTaskFinishedCount(params) {
|
|
|
|
+ const sql = `UPDATE cropper_task SET finishedCount=$finishedCount,updateTime=$updateTime WHERE id=$id`;
|
|
|
|
+ const datas = {
|
|
|
|
+ $id: params.id,
|
|
|
|
+ $finishedCount: params.finishedCount,
|
|
|
|
+ $updateTime: formatDate()
|
|
|
|
+ };
|
|
|
|
+ return new Promise((resolve, reject) => {
|
|
|
|
+ db.run(sql, datas, err => {
|
|
|
|
+ if (err) reject("update cropper task count fail!");
|
|
|
|
+
|
|
|
|
+ resolve(true);
|
|
|
|
+ });
|
|
|
|
+ });
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+export function getCropperTaskFinishCount(cropperTaskId) {
|
|
|
|
+ const { where, whereData } = serializeWhere({
|
|
|
|
+ cropperTaskId: cropperTaskId,
|
|
|
|
+ isFinished: 1
|
|
|
|
+ });
|
|
|
|
+ const sql = `SELECT COUNT(1) AS count FROM cropper_task_detail WHERE ${where}`;
|
|
|
|
+
|
|
|
|
+ return new Promise((resolve, reject) => {
|
|
|
|
+ db.all(sql, whereData, (err, rows) => {
|
|
|
|
+ if (err) reject("count task list fail!");
|
|
|
|
+
|
|
|
|
+ resolve(rows[0].count);
|
|
|
|
+ });
|
|
|
|
+ });
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+/**
|
|
|
|
+ *
|
|
|
|
+CREATE TABLE "cropper_task" (
|
|
|
|
+ "id" INTEGER NOT NULL,
|
|
|
|
+ "name" TEXT NOT NULL,
|
|
|
|
+ "inputFile" TEXT NOT NULL,
|
|
|
|
+ "taskCount" integer NOT NULL,
|
|
|
|
+ "finishedCount" integer NOT NULL DEFAULT 0,
|
|
|
|
+ "createTime" TEXT NOT NULL,
|
|
|
|
+ "updateTime" TEXT NOT NULL DEFAULT '',
|
|
|
|
+ PRIMARY KEY ("id")
|
|
|
|
+);
|
|
|
|
+ *
|
|
|
|
+CREATE TABLE "cropper_task_detail" (
|
|
|
|
+ "id" INTEGER NOT NULL,
|
|
|
|
+ "cropperTaskId" INTEGER NOT NULL,
|
|
|
|
+ "examId" text NOT NULL,
|
|
|
|
+ "paperId" text,
|
|
|
|
+ "subjectId" text NOT NULL,
|
|
|
|
+ "subject" text NOT NULL,
|
|
|
|
+ "subjectName" TEXT,
|
|
|
|
+ "examNumber" text NOT NULL,
|
|
|
|
+ "studentName" TEXT NOT NULL,
|
|
|
|
+ "originImgPath" TEXT,
|
|
|
|
+ "formalImgPath" TEXT,
|
|
|
|
+ "sliceImgPath" TEXT,
|
|
|
|
+ "compressRate" integer NOT NULL DEFAULT 100,
|
|
|
|
+ "imageEncrypt" integer NOT NULL DEFAULT 1,
|
|
|
|
+ "isUpload" integer NOT NULL DEFAULT 0,
|
|
|
|
+ "cropperSet" TEXT,
|
|
|
|
+ "isFinished" integer NOT NULL DEFAULT 0,
|
|
|
|
+ "createTime" TEXT NOT NULL DEFAULT '',
|
|
|
|
+ "updateTime" TEXT NOT NULL DEFAULT '',
|
|
|
|
+ PRIMARY KEY ("id")
|
|
|
|
+);
|
|
|
|
+ */
|
|
|
|
+
|
|
|
|
+export function getCropperTaskDetailList(params, fields = []) {
|
|
|
|
+ const { where, whereData } = serializeWhere(params);
|
|
|
|
+ const fieldCont = fields.length ? fields.join(",") : "*";
|
|
|
|
+ const sql = `SELECT ${fieldCont} FROM cropper_task_detail WHERE ${where}`;
|
|
|
|
+
|
|
|
|
+ return new Promise((resolve, reject) => {
|
|
|
|
+ db.all(sql, whereData, (err, rows) => {
|
|
|
|
+ if (err) reject("search task detail list fail!");
|
|
|
|
+ resolve(rows);
|
|
|
|
+ });
|
|
|
|
+ });
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+/**
|
|
|
|
+ *
|
|
|
|
+ * @param {Array} paramList 参数列表
|
|
|
|
+ */
|
|
|
|
+export function addCropperTaskDetail(paramList) {
|
|
|
|
+ const listVals = paramList.map(params => {
|
|
|
|
+ const datas = [
|
|
|
|
+ params.cropperTaskId,
|
|
|
|
+ params.examId,
|
|
|
|
+ params.paperId || "",
|
|
|
|
+ params.subjectId,
|
|
|
|
+ params.subject,
|
|
|
|
+ params.subjectName,
|
|
|
|
+ params.examNumber,
|
|
|
|
+ params.studentName,
|
|
|
|
+ params.originImgPath,
|
|
|
|
+ params.formalImgPath,
|
|
|
|
+ params.sliceImgPath,
|
|
|
|
+ params.imageEncrypt,
|
|
|
|
+ 0, // isUpload
|
|
|
|
+ params.cropperSet,
|
|
|
|
+ 0, // isFinished
|
|
|
|
+ formatDate(), // createTime
|
|
|
|
+ ""
|
|
|
|
+ ];
|
|
|
|
+ const nitem = datas.map(val =>
|
|
|
|
+ typeof val === "string" ? `'${val}'` : val
|
|
|
|
+ );
|
|
|
|
+ return `(${nitem.join(",")})`;
|
|
|
|
+ });
|
|
|
|
+ const vals = listVals.join(",");
|
|
|
|
+
|
|
|
|
+ const sql = `INSERT INTO cropper_task_detail (cropperTaskId,examId,paperId, subjectId,subject,subjectName,examNumber,studentName,originImgPath, formalImgPath,sliceImgPath,imageEncrypt,isUpload,cropperSet,isFinished,createTime,updateTime) VALUES ${vals}`;
|
|
|
|
+ // console.log(sql);
|
|
|
|
+
|
|
|
|
+ return new Promise((resolve, reject) => {
|
|
|
|
+ db.run(sql, function(err) {
|
|
|
|
+ if (err) reject(err);
|
|
|
|
+ resolve(true);
|
|
|
|
+ });
|
|
|
|
+ });
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+export function updateCropperTaskDetail(params) {
|
|
|
|
+ if (!params.id) return Promise.reject("id is required");
|
|
|
|
+
|
|
|
|
+ const id = params.id;
|
|
|
|
+ let paramData = { ...params };
|
|
|
|
+ delete paramData.id;
|
|
|
|
+ const { template, templateData } = serializeUpdate(paramData);
|
|
|
|
+ const sql = `UPDATE cropper_task_detail SET ${template} WHERE id=${id}`;
|
|
|
|
+
|
|
|
|
+ return new Promise((resolve, reject) => {
|
|
|
|
+ db.run(sql, templateData, err => {
|
|
|
|
+ if (err) reject("update cropper task detail fail!");
|
|
|
|
+
|
|
|
|
+ resolve(true);
|
|
|
|
+ });
|
|
|
|
+ });
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+export function getCropperTaskDetail(cropperTaskDetailId) {
|
|
|
|
+ const { where, whereData } = serializeWhere({
|
|
|
|
+ id: cropperTaskDetailId
|
|
|
|
+ });
|
|
|
|
+ const sql = `SELECT * FROM cropper_task_detail WHERE ${where}`;
|
|
|
|
+
|
|
|
|
+ return new Promise((resolve, reject) => {
|
|
|
|
+ db.all(sql, whereData, (err, rows) => {
|
|
|
|
+ if (err) reject("search task detail fail!");
|
|
|
|
+ resolve(rows[0]);
|
|
|
|
+ });
|
|
|
|
+ });
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+export default {
|
|
|
|
+ init,
|
|
|
|
+ // scan
|
|
|
|
+ saveUploadInfo,
|
|
|
|
+ searchUploadList,
|
|
|
|
+ countScanList,
|
|
|
|
+ getUploadCount,
|
|
|
|
+ getScanCount,
|
|
|
|
+ getHistory,
|
|
|
|
+ updateUploadState,
|
|
|
|
+ updateLocalPaperId,
|
|
|
|
+ deleteScanById,
|
|
|
|
+ // dict
|
|
|
|
+ getDict,
|
|
|
|
+ setDict,
|
|
|
|
+ getAllDict,
|
|
|
|
+ initDict,
|
|
|
|
+ // paper-manage
|
|
|
|
+ getAreas,
|
|
|
|
+ getPaperList,
|
|
|
|
+ absentLocalPaper,
|
|
|
|
+ saveRotateHistory,
|
|
|
|
+ getUnfinishRotateHistoryList,
|
|
|
|
+ finishRotateHistory,
|
|
|
|
+ getUnfinishRotateHistoryCount,
|
|
|
|
+ // export data
|
|
|
|
+ addExportTask,
|
|
|
|
+ addExportTaskDetail,
|
|
|
|
+ getUnfinishTask,
|
|
|
|
+ getDownloadTaskList,
|
|
|
|
+ getDownloadTaskCount,
|
|
|
|
+ updateDownloadTaskDownload,
|
|
|
|
+ updateTaskFinish
|
|
|
|
+};
|