Przeglądaj źródła

更多附件添加

john 8 miesięcy temu
rodzic
commit
e2d6fad656

+ 13 - 6
DB/cashbook.sql

@@ -20,7 +20,7 @@ CREATE TABLE `record` (
   `total_fee` decimal(15,2) NOT NULL,
   `type_id` int NOT NULL,
   `author_id` varchar(300) NOT NULL,
-  `remark` varchar(300) DEFAULT NULL,
+  `remark` LONGTEXT DEFAULT NULL,
   `time` timestamp NOT NULL,
   PRIMARY KEY (`id`)
 ) ENGINE=InnoDB AUTO_INCREMENT=25 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='账本记录';
@@ -81,13 +81,20 @@ CREATE TABLE `record_files` (
   PRIMARY KEY (`id`)
 -- ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
 
--- cashbook.record definition
+-- cashbook.more_record definition
 CREATE TABLE `more_record` (
   `id` int NOT NULL AUTO_INCREMENT,
   `book_id` varchar(100) NOT NULL,
-  `create_time` timestamp NOT NULL COMMENT '创建流程',
-  `update_time` timestamp NOT NULL COMMENT '更新时间',
+  `create_time` TIMESTAMP NOT NULL COMMENT '创建流程',
+  `update_time` TIMESTAMP NOT NULL COMMENT '更新时间',
   `author_id` varchar(300) NOT NULL,
-  `name` varchar(300) DEFAULT NULL,
-  PRIMARY KEY (`id`)
+  `name` varchar(300) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+  `more_id` varchar(300) NOT NULL,
+  `remark` longtext,
+  `total_fee` decimal(15,2) NOT NULL,
+  `start_time` TIMESTAMP NOT NULL,
+  `end_time` TIMESTAMP NOT NULL,
+  `type_id` int NOT NULL,
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `more_record_unique` (`more_id`)
 ) ENGINE=InnoDB AUTO_INCREMENT=25 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='更多账本记录';

+ 2 - 0
node_expores/app.js

@@ -8,6 +8,7 @@ import authorsLogin from "./router/authors/login.js";
 import books from "./router/books/index.js";
 import files from "./router/files/index.js";
 import record from "./router/record/index.js";
+import moreRecord from "./router/record/more.js";
 import types from "./router/types/index.js";
 
 import { generateToken, verifyToken } from "#utils";
@@ -68,6 +69,7 @@ app.use("/api/v1/*", verifyToken); // 注册token验证中间件
 app.use("/api/v1/auth", authorsLogin);
 app.use("/api/v1/books", books);
 app.use("/api/v1/record", record);
+app.use("/api/v1/more_record", moreRecord);
 app.use("/api/v1/types", types);
 
 app.listen(port, () => {

+ 141 - 10
node_expores/db/more_record.js

@@ -1,19 +1,35 @@
 import connection from "./base.js";
 
 export async function addMoreRecord({
-  name = '',
-  book_id = '',
-  author_id = '',
-  create_time = '',
-  update_time = '',
+  more_id = "",
+  name = "",
+  remark = "",
+  total_fee = "",
+  book_id = "",
+  author_id = "",
+  create_time = "",
+  update_time = "",
+  start_time = "",
+  end_time = "",
 }) {
   return new Promise(async (resolve, reject) => {
     try {
       const sql = `
-        INSERT INTO more_record (name, book_id, author_id, create_time, update_time)
-        VALUES (?, ?, ?, ?, ?)
+        INSERT INTO more_record (more_id, name, remark, total_fee, book_id, author_id, create_time, update_time, start_time, end_time)
+        VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
       `;
-      const values = [name, book_id, author_id, create_time, update_time];
+      const values = [
+        more_id,
+        name,
+        remark,
+        total_fee,
+        book_id,
+        author_id,
+        create_time,
+        update_time,
+        start_time,
+        end_time,
+      ];
       // 直接接收 execute 返回的内容
       connection.execute(sql, values, (result, fields) => {
         return resolve(fields.insertId);
@@ -21,5 +37,120 @@ export async function addMoreRecord({
     } catch (err) {
       return resolve(false);
     }
-  })
-}
+  });
+}
+
+export async function updataMoreRecord(params) {
+  const {
+    more_id = "",
+    type_id = "",
+    name = "",
+    remark = "",
+    total_fee = "",
+    update_time = "",
+    start_time = "",
+    end_time = "",
+  } = params;
+  return new Promise(async (resolve, reject) => {
+    try {
+      const sql = `
+        UPDATE more_record SET type_id = ?, name = ?, total_fee = ?, remark = ?, update_time = ?, start_time= ?, end_time ?, WHERE more_id = ?
+      `;
+      const values = [
+        type_id,
+        name,
+        total_fee,
+        remark,
+        update_time,
+        start_time,
+        end_time,
+        more_id,
+      ];
+      // 执行更新语句
+      connection.execute(sql, values, (err, result) => {
+        if (err) {
+          // 错误处理
+          return resolve(false);
+        }
+        return resolve(result.changedRows > 0);
+      });
+    } catch (err) {
+      return resolve(false);
+    }
+  });
+}
+
+export function delMoreRecord(more_id, author_id) {
+  return new Promise((resolve, reject) => {
+    try {
+      const sql = `DELETE FROM more_record WHERE more_id = ? AND author_id = ?`;
+      connection.query(sql, [more_id, author_id], (err, result) => {
+        if (err) {
+          // 如果执行过程中出现错误,返回 false
+          return resolve(false);
+        }
+        // 删除成功后返回结果
+        return resolve(result);
+      });
+    } catch (err) {
+      // 捕获异常并返回 false
+      return resolve(false);
+    }
+  });
+}
+
+
+// 根据日期查询记录
+export function getMoreRecordsInfoByTime(time, book_id) {
+  return new Promise((resolve, reject) => {
+    connection.query(
+      `SELECT more_record.*, types.name AS type
+        FROM
+            more_record
+        JOIN
+            types
+        ON
+            more_record.type_id = types.id
+        WHERE
+            more_record.start_time <= ? AND
+            more_record.end_time >= ? AND
+            more_record.book_id = ?;`,
+      [time, book_id],
+      (err, rows) => {
+        if (err) {
+          // reject(err);
+          resolve(false); // 如果存在记录,则返回 true,否则返回 false
+        } else {
+          resolve(rows); // 如果存在记录,则返回 true,否则返回 false
+        }
+      }
+    );
+  });
+}
+
+// 根据月份查询记录
+export function getMoreRecordsInfoByMonth(time, book_id) {
+  return new Promise((resolve, reject) => {
+    connection.query(
+      `SELECT more_record.*, types.name AS type
+        FROM
+            more_record
+        JOIN
+            types
+        ON
+            more_record.type_id = types.id
+        WHERE
+            more_record.start_time <= ? AND
+            more_record.end_time >= ? AND
+            more_record.book_id = ?;`,
+      [time, time, book_id],
+      (err, rows) => {
+        if (err) {
+          resolve(false);
+        } else {
+          resolve(rows);
+        }
+      }
+    );
+  });
+}

+ 20 - 0
node_expores/db/update.sql

@@ -7,3 +7,23 @@ ALTER TABLE cashbook.authors DROP COLUMN login_type;
 
 
 ALTER TABLE cashbook.record ADD source_id varchar(100) NULL;
+
+
+ALTER TABLE cashbook.record MODIFY COLUMN remark LONGTEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL;
+
+ALTER TABLE cashbook.more_record ADD more_id varchar(300) NOT NULL;
+ALTER TABLE cashbook.more_record ADD CONSTRAINT more_record_unique UNIQUE KEY (more_id);
+ALTER TABLE cashbook.more_record ADD remark LONGTEXT NULL;
+
+ALTER TABLE cashbook.more_record ADD total_fee decimal(15,2) NOT NULL;
+
+ALTER TABLE cashbook.more_record MODIFY COLUMN name varchar(300) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL;
+
+
+ALTER TABLE cashbook.more_record ADD start_time TIMESTAMP NOT NULL;
+
+ALTER TABLE cashbook.more_record ADD start_time TIMESTAMP NOT NULL;
+ALTER TABLE cashbook.more_record ADD end_time TIMESTAMP NOT NULL;
+
+ALTER TABLE cashbook.more_record ADD type_id INT NULL;
+

+ 8 - 42
node_expores/router/record/index.js

@@ -17,6 +17,7 @@ import {
 } from "#db";
 import { shanghaiTime, shanghaiTimeFormat } from "#utils";
 import dayjs from "dayjs";
+import {getTypeInfoFn, setFilesByRecord} from './utils.js'
 
 // middleware that is specific to this router
 router.use(function timeLog(req, res, next) {
@@ -24,36 +25,7 @@ router.use(function timeLog(req, res, next) {
   next();
 });
 
-async function getTypeInfo({ userInfo, book_id, type }) {
-  if (!type) {
-    return "";
-  }
-  // type 是否存在重复项,有就返回id,没有就新增 再返回id
-  const isAddType = await isType({
-    book_id,
-    author_id: userInfo.user_id,
-    type,
-  });
 
-  let typeInfo = {};
-  if (!isAddType) {
-    await type_insert({
-      book_id,
-      author_id: userInfo.user_id,
-      type,
-      create_time: shanghaiTime().format("YYYY-MM-DD HH:mm:ss"),
-      update_time: shanghaiTime().format("YYYY-MM-DD HH:mm:ss"),
-    });
-    typeInfo = await isType({
-      book_id,
-      author_id: userInfo.user_id,
-      type,
-    });
-  } else {
-    typeInfo = { ...isAddType };
-  }
-  return Promise.resolve(typeInfo.id);
-}
 // 添加单个账单记录
 router.post("/", async function (req, res) {
   const {
@@ -65,7 +37,7 @@ router.post("/", async function (req, res) {
     files = [],
     userInfo = {},
   } = req.body;
-  const type_id = await getTypeInfo({ userInfo, book_id, type });
+  const type_id = await getTypeInfoFn({ userInfo, book_id, type });
   const insertId = await record_insert({
     book_id,
     type_id: type_id,
@@ -77,18 +49,12 @@ router.post("/", async function (req, res) {
     update_time: shanghaiTime().format("YYYY-MM-DD HH:mm:ss"),
   });
 
-  const filesRes = await Promise.all(
-    files.map((file_id) =>
-      addFileByRecordId({
-        file_id,
-        record_id: insertId,
-        book_id,
-        author_id: userInfo.user_id,
-        create_time: shanghaiTime().format("YYYY-MM-DD HH:mm:ss"),
-        update_time: shanghaiTime().format("YYYY-MM-DD HH:mm:ss"),
-      })
-    )
-  );
+  await setFilesByRecord({
+    files,
+    insertId,
+    book_id,
+    userInfo
+  })
 
   res.json({
     code: 200,

+ 69 - 4
node_expores/router/record/more.js

@@ -1,11 +1,74 @@
 import express from "express";
 const router = express.Router();
+import { v4 as uuidv4 } from "uuid";
 import { shanghaiTime, shanghaiTimeFormat } from "#utils";
-import { addMoreRecord } from "#db";
+import { addMoreRecord, updataMoreRecord, delMoreRecord } from "#db";
+import { getTypeInfoFn, setFilesByRecord } from "./utils.js";
 
-
-// 添加单个账单记录
+// 添加多个账单记录
 router.post("/", async function (req, res) {
+  const {
+    name = "",
+    remark = "",
+    book_id = "",
+    start_time = "",
+    end_time = "",
+    total_fee = 0,
+    type = "",
+    files = [],
+    userInfo = {},
+  } = req.body;
+
+  const more_id = `M_${uuidv4()}`;
+
+  const type_id = await getTypeInfoFn({ userInfo, book_id, type });
+
+  await addMoreRecord({
+    more_id,
+    book_id,
+    type_id: type_id,
+    author_id: userInfo.user_id,
+    total_fee,
+    name,
+    remark,
+
+    start_time: shanghaiTimeFormat(start_time),
+    end_time: shanghaiTimeFormat(end_time),
+
+    create_time: shanghaiTime().format("YYYY-MM-DD HH:mm:ss"),
+    update_time: shanghaiTime().format("YYYY-MM-DD HH:mm:ss"),
+  });
+
+  await setFilesByRecord({
+    files,
+    book_id,
+    more_id,
+    userInfo,
+  });
+
+  res.json({
+    code: 200,
+    data: {
+      record_id: more_id,
+    },
+  });
+});
+
+// 编辑多个账单记录
+router.put("/", async function (req, res) {
+  const {
+    book_id = "",
+    total_fee = 0,
+    type = "",
+    time = "",
+    remark = "",
+    files = [],
+    userInfo = {},
+  } = req.body;
+});
+
+// 删除单个账单记录
+router.delete("/", async function (req, res) {
   const {
     book_id = "",
     total_fee = 0,
@@ -15,4 +78,6 @@ router.post("/", async function (req, res) {
     files = [],
     userInfo = {},
   } = req.body;
-})
+});
+
+export default router;

+ 66 - 0
node_expores/router/record/utils.js

@@ -0,0 +1,66 @@
+import {
+  record_insert,
+  record_update,
+  isType,
+  type_insert,
+  getRecordInfoById,
+  addFileByRecordId,
+  getFileByRecordId,
+  getRecordsInfoByTime,
+  getRecordsInfoByMonth,
+  getTypesById,
+  delFileByRecordId,
+  delByRecordId,
+} from "#db";
+
+import { shanghaiTime, shanghaiTimeFormat } from "#utils";
+
+export async function getTypeInfoFn({ userInfo, book_id, type }) {
+  if (!type) {
+    return "";
+  }
+  // type 是否存在重复项,有就返回id,没有就新增 再返回id
+  const isAddType = await isType({
+    book_id,
+    author_id: userInfo.user_id,
+    type,
+  });
+
+  let typeInfo = {};
+  if (!isAddType) {
+    await type_insert({
+      book_id,
+      author_id: userInfo.user_id,
+      type,
+      create_time: shanghaiTime().format("YYYY-MM-DD HH:mm:ss"),
+      update_time: shanghaiTime().format("YYYY-MM-DD HH:mm:ss"),
+    });
+    typeInfo = await isType({
+      book_id,
+      author_id: userInfo.user_id,
+      type,
+    });
+  } else {
+    typeInfo = { ...isAddType };
+  }
+  return Promise.resolve(typeInfo.id);
+}
+
+
+
+export async function setFilesByRecord(params) {
+  const {files = [], more_id, userInfo, book_id} = params
+  if(!files.length) return
+  await Promise.all(
+    files.map((file_id) =>
+      addFileByRecordId({
+        file_id,
+        record_id: more_id,
+        book_id,
+        author_id: userInfo.user_id,
+        create_time: shanghaiTime().format("YYYY-MM-DD HH:mm:ss"),
+        update_time: shanghaiTime().format("YYYY-MM-DD HH:mm:ss"),
+      })
+    )
+  );
+}