diff --git a/package.json b/package.json index 89eac5a..98e3e88 100644 --- a/package.json +++ b/package.json @@ -2,6 +2,9 @@ "name": "express-ts", "version": "1.0.0", "main": "index.js", + "prisma": { + "seed": "ts-node prisma/seed.ts" + }, "scripts": { "test": "echo \"Error: no test specified\" && exit 1", "start": "ts-node src/index.ts", diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 61e1ce8..a731d08 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -13,13 +13,28 @@ datasource db { url = "file:./dev.db" } -model user { +// model User { +// id Int @id @default(autoincrement()) +// name String +// email String @unique +// password String +// createdTime DateTime @default(now()) @map("created_time") +// updatedTime DateTime @updatedAt @map("updated_time") + +// @@map("user") +// } + +// 测量数据 +model measurement { id Int @id @default(autoincrement()) name String - email String @unique - password String - createdTime DateTime @default(now()) @map("created_time") - updatedTime DateTime @updatedAt @map("updated_time") - - //  @@map("user") + railId Int + bureau String + line String + section String + direction String + createAt DateTime @default(now()) @map("create_at") + leftPoints String @map("left_points") + rightPoints String @map("right_points") + upload Boolean @default(false) } diff --git a/prisma/seed.ts b/prisma/seed.ts new file mode 100644 index 0000000..aaafd30 --- /dev/null +++ b/prisma/seed.ts @@ -0,0 +1,71 @@ +import { PrismaClient } from "@prisma/client"; +const prisma = new PrismaClient(); + +async function main() { + const d1 = await prisma.measurement.upsert({ + where: { id: 1 }, + update: {}, + create: { + name: "测量数据1", + railId: 1, + bureau: "北京铁路局", + line: "京沪线", + section: "路段一", + direction: "上行", + leftPoints: '[{"x":43,"y":22}]', + rightPoints: '[{"x":43,"y":22}]', + }, + }); + const d2 = await prisma.measurement.upsert({ + where: { id: 2 }, + update: {}, + create: { + name: "测量数据2", + railId: 2, + bureau: "上海铁路局", + line: "京沪线", + section: "路段二", + direction: "下行", + leftPoints: '[{"x":43,"y":22}]', + rightPoints: '[{"x":43,"y":22}]', + }, + }); + const d3 = await prisma.measurement.upsert({ + where: { id: 3 }, + update: {}, + create: { + name: "测量数据3", + railId: 2, + bureau: "上海铁路局", + line: "京九线", + section: "路段三", + direction: "下行", + leftPoints: '[{"x":43,"y":22}]', + rightPoints: '[{"x":43,"y":22}]', + }, + }); + const d4 = await prisma.measurement.upsert({ + where: { id: 4 }, + update: {}, + create: { + name: "测量数据4", + railId: 3, + bureau: "南京铁路局", + line: "京九线", + section: "路段四", + direction: "上行", + leftPoints: '[{"x":43,"y":22}]', + rightPoints: '[{"x":43,"y":22}]', + }, + }); + console.log({ d1, d2, d3, d4 }); +} + +main() + .catch(e => { + console.error(e); + process.exit(1); + }) + .finally(async () => { + await prisma.$disconnect(); + }); diff --git a/src/routes/auth.ts b/src/routes/auth.ts index 4431c53..9b5dbdf 100644 --- a/src/routes/auth.ts +++ b/src/routes/auth.ts @@ -58,22 +58,5 @@ router.post("/logout", (req, res) => { timestamp: 1741005358167, }); }); -router.get("/users", async (req, res) => { - const users = await prisma.user.findMany() - res.json({ - status: 0, - data: users, - }) -}); -router.post("/users", async (req, res) => { - const user = req.body - console.log(user) - const newUser = await prisma.user.create({ - data: user - }) - ​res.json({ - status: 0, - data: newUser, - }) -}) + export default router; diff --git a/src/routes/mobile.ts b/src/routes/mobile.ts index 85594d7..6f97fc4 100644 --- a/src/routes/mobile.ts +++ b/src/routes/mobile.ts @@ -1,13 +1,16 @@ import express from "express"; -import { delay } from "../utils/helper"; +import { delay, prismaClient } from "../utils/helper"; const router = express.Router(); import points from "../utils/measure.json"; import { WsProxy } from "../utils/wss"; +import { Prisma } from "@prisma/client"; let ptIndex = 0; let intervalId1: ReturnType; let intervalId2: ReturnType; +let uploadIntervalId: ReturnType; + router.post("/startMeasure", (req, res) => { setTimeout(() => { ptIndex = 0; @@ -67,4 +70,132 @@ router.post("/startMeasure", (req, res) => { res.json({ success: true }); }); +router.get("/getUploadedRecords", async (req, res) => { + const lastId = req.body?.lastId || 0; + const size = req.body?.size || 10; + const query: Prisma.measurementFindManyArgs = { + where: { upload: true }, + orderBy: { + id: "desc", + }, + take: size, + select: { + id: true, + name: true, + railId: true, + bureau: true, + line: true, + section: true, + direction: true, + createAt: true, + }, + }; + if (lastId) { + (query.skip = 1), (query.cursor = { id: lastId }); + } + const list = await prismaClient.measurement.findMany(query); + res.json({ success: true, data: list }); +}); + +router.get("/getUnuploadedRecords", async (req, res) => { + const lastId = req.body?.lastId || 0; + const size = req.body?.size || 10; + const query: Prisma.measurementFindManyArgs = { + where: { upload: false }, + orderBy: { + id: "desc", + }, + take: size, + select: { + id: true, + name: true, + railId: true, + bureau: true, + line: true, + section: true, + direction: true, + createAt: true, + }, + }; + if (lastId) { + (query.skip = 1), (query.cursor = { id: lastId }); + } + const list = await prismaClient.measurement.findMany(query); + res.json({ success: true, data: list }); +}); + +router.post("/searchHistoryRecords", async (req, res) => { + const keyword = req.body.keyword; + const query: Prisma.measurementFindManyArgs = { + orderBy: { + id: "desc", + }, + take: 50, + select: { + id: true, + name: true, + railId: true, + bureau: true, + line: true, + section: true, + direction: true, + createAt: true, + }, + }; + if (keyword.trim()) { + query.where = { name: { contains: keyword.trim() }} + } + const list = await prismaClient.measurement.findMany(query); + res.json({ success: true, data: list }); +}) + +router.get("/getMeasurementDetail", async (req, res) => { + const record = await prismaClient.measurement.findUnique({ + where: { id: req.body.id }, + }); + res.json({ success: true, data: record }); +}); + +router.post("/saveMeasurement", async (req, res) => { + try { + const record = await prismaClient.measurement.create({ + data: req.body, + }); + res.json({ success: true, data: record }); + } catch (err: any) { + res.json({ success: false, message: err.message }); + } +}); + +let uploadCount = 0; +let uploadIdx = 0; + +router.post("/uploadRecords", async (req, res) => { + const ids = req.body.ids as number[]; + uploadCount = ids.length; + setTimeout(() => { + WsProxy.sendFunc({ + func: "uploadRecordsStatus", + data: ids.map((id, idx) => ({ id, state: idx === 0 ? "uploading" : "pending" })), + }); + }, 100); + + uploadIntervalId = setInterval(() => { + uploadIdx++; + WsProxy.sendFunc({ + func: "uploadRecordsStatus", + data: ids.map((id, idx) => ({ + id, + state: idx < uploadIdx ? "uploaded" : idx === uploadIdx ? "uploading" : "pending", + })), + }); + if (uploadIdx === uploadCount) { + clearInterval(uploadIntervalId); + uploadCount = uploadIdx = 0; + return; + } + }, 1500); + res.json({ success: true }); +}); + export default router; diff --git a/src/utils/helper.ts b/src/utils/helper.ts index a00a99c..3d69c6d 100644 --- a/src/utils/helper.ts +++ b/src/utils/helper.ts @@ -1,3 +1,7 @@ +import { PrismaClient } from "@prisma/client"; + +export const prismaClient = new PrismaClient(); + export async function delay(mill: number) { return new Promise(resolve => { setTimeout(() => {