From e713f3e92ddcb76f12699910d4c61ba59b324324 Mon Sep 17 00:00:00 2001 From: Ironsp <1522278303@qq.com> Date: Tue, 15 Sep 2026 11:51:00 +0800 Subject: [PATCH] =?UTF-8?q?feat=20=E4=BA=8B=E5=8A=A1=E5=85=B3=E8=81=94proj?= =?UTF-8?q?ect=E5=88=B0rtk=E5=92=8Cwork?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/service/project.ts | 29 ++++++++++++++++++++++++++--- src/utils/sqlite.ts | 2 +- 2 files changed, 27 insertions(+), 4 deletions(-) diff --git a/src/service/project.ts b/src/service/project.ts index 3084951..39739ad 100644 --- a/src/service/project.ts +++ b/src/service/project.ts @@ -43,6 +43,16 @@ export function calcUncompactedArea(totalArea?: number, compactedArea?: number) return Math.max(0, (totalArea ?? 0) - (compactedArea ?? 0)) } +function escapeValue(value: any): string { + if (value === null || value === undefined) + return 'NULL' + if (typeof value === 'number') + return String(value) + if (typeof value === 'boolean') + return value ? '1' : '0' + return `'${String(value).replace(/'/g, '\'\'')}'` +} + /** 查询全部项目 */ export async function selectAll(): Promise { return DB.select(TABLE) @@ -68,7 +78,7 @@ export async function insert(data: Omit): Promise { return result?.[0]?.id || 0 } -/** 更新项目 */ +/** 更新项目;标记为已完成(status=1)时清除该项目的作业记录与 RTK 轨迹 */ export async function update(id: number, data: Partial): Promise { const old = await selectById(id) const totalArea = data.total_area !== undefined ? data.total_area : old?.total_area @@ -76,11 +86,24 @@ export async function update(id: number, data: Partial): Promise { ? data.total_compaction_area : old?.total_compaction_area - return DB.update(TABLE, { + const payload: Record = { ...data, uncompacted_area: calcUncompactedArea(totalArea, compactedArea), updated_at: new Date().toISOString(), - }, `id = ${id}`) + } + + const becomingCompleted = data.status === 1 && old?.status !== 1 + if (becomingCompleted) { + const sets = Object.keys(payload).map(k => `${k} = ${escapeValue(payload[k])}`) + await DB.transaction([ + `UPDATE ${TABLE} SET ${sets.join(', ')} WHERE id = ${id}`, + `DELETE FROM rtk_track WHERE work_record_id IN (SELECT id FROM work_record WHERE project_id = ${id})`, + `DELETE FROM work_record WHERE project_id = ${id}`, + ]) + return + } + + return DB.update(TABLE, payload, `id = ${id}`) } /** 删除项目 */ diff --git a/src/utils/sqlite.ts b/src/utils/sqlite.ts index 34f89e5..1e8943a 100644 --- a/src/utils/sqlite.ts +++ b/src/utils/sqlite.ts @@ -115,7 +115,7 @@ class DB { /** * 执行 SQL 语句(增、删、改) */ - static executeSql(sql: string | string[]): Promise { + static executeSql(sql: string[]): Promise { return DB.open().then(() => { return new Promise((resolve, reject) => { plus.sqlite.executeSql({