feat 数据表_添加未压实面积字段

This commit is contained in:
Ironsp
2026-09-14 16:24:42 +08:00
parent 2a775ab5e3
commit 77f5b74cea
3 changed files with 28 additions and 3 deletions

View File

@@ -28,7 +28,7 @@ const tableSqls = [
/** 当前代码期望的各表字段(用于检测旧库结构) */ /** 当前代码期望的各表字段(用于检测旧库结构) */
const expectedColumns: Record<string, string[]> = { const expectedColumns: Record<string, string[]> = {
project: ['id', 'project_name', 'stake_range', 'total_area', 'start_time', 'end_time', 'total_duration', 'total_compaction_area', 'total_pass_count', 'status', 'created_at', 'updated_at'], project: ['id', 'project_name', 'stake_range', 'total_area', 'start_time', 'end_time', 'total_duration', 'total_compaction_area', 'total_pass_count', 'qualified_rate', 'progress', 'uncompacted_area', 'status', 'created_at', 'updated_at'],
work_record: ['id', 'project_id', 'start_time', 'end_time', 'duration', 'compaction_area', 'pass_count', 'exception_count', 'created_at'], work_record: ['id', 'project_id', 'start_time', 'end_time', 'duration', 'compaction_area', 'pass_count', 'exception_count', 'created_at'],
rtk_track: ['id', 'work_record_id', 'latitude', 'longitude', 'speed', 'heading', 'steel_wheel_temp', 'compaction_value', 'created_at'], rtk_track: ['id', 'work_record_id', 'latitude', 'longitude', 'speed', 'heading', 'steel_wheel_temp', 'compaction_value', 'created_at'],
warning_record: ['id', 'project_id', 'device_name', 'exception_type', 'exception_level', 'occurred_at', 'site_description', 'disposal_record', 'disposal_type', 'is_read', 'created_at'], warning_record: ['id', 'project_id', 'device_name', 'exception_type', 'exception_level', 'occurred_at', 'site_description', 'disposal_record', 'disposal_type', 'is_read', 'created_at'],

View File

@@ -12,6 +12,9 @@ export const projectTableSql = `CREATE TABLE IF NOT EXISTS project (
total_duration REAL DEFAULT 0, total_duration REAL DEFAULT 0,
total_compaction_area REAL DEFAULT 0, total_compaction_area REAL DEFAULT 0,
total_pass_count INTEGER DEFAULT 0, total_pass_count INTEGER DEFAULT 0,
qualified_rate REAL DEFAULT 0,
progress REAL DEFAULT 0,
uncompacted_area REAL DEFAULT 0,
status INTEGER DEFAULT 0, status INTEGER DEFAULT 0,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP, created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
@@ -27,11 +30,19 @@ export interface Project {
total_duration?: number // 目前作业进行总时长,默认 0 total_duration?: number // 目前作业进行总时长,默认 0
total_compaction_area?: number // 当前总共的压实面积,默认 0 total_compaction_area?: number // 当前总共的压实面积,默认 0
total_pass_count?: number // 当前总共的碾压遍数,默认 0 total_pass_count?: number // 当前总共的碾压遍数,默认 0
qualified_rate?: number // 压实合格率,默认 0
progress?: number // 完成进度,默认 0
uncompacted_area?: number // 未压实面积 = 总面积 - 压实面积,默认 0
status: 0 | 1 | 2 // 项目状态,0:未完成,1:已完成,2:作业中, 默认0 status: 0 | 1 | 2 // 项目状态,0:未完成,1:已完成,2:作业中, 默认0
created_at?: string // 创建时间,默认当前时间 created_at?: string // 创建时间,默认当前时间
updated_at?: string // 更新时间,默认当前时间 updated_at?: string // 更新时间,默认当前时间
} }
/** 未压实面积 = max(0, 总面积 - 压实面积) */
export function calcUncompactedArea(totalArea?: number, compactedArea?: number) {
return Math.max(0, (totalArea ?? 0) - (compactedArea ?? 0))
}
/** 查询全部项目 */ /** 查询全部项目 */
export async function selectAll(): Promise<Project[]> { export async function selectAll(): Promise<Project[]> {
return DB.select(TABLE) return DB.select(TABLE)
@@ -49,14 +60,27 @@ export async function selectByStatus(status: 0 | 1): Promise<Project[]> {
/** 新增项目 */ /** 新增项目 */
export async function insert(data: Omit<Project, 'id'>): Promise<number> { export async function insert(data: Omit<Project, 'id'>): Promise<number> {
await DB.insert(TABLE, data) await DB.insert(TABLE, {
...data,
uncompacted_area: calcUncompactedArea(data.total_area, data.total_compaction_area),
})
const result = await DB.selectSql('SELECT last_insert_rowid() as id') const result = await DB.selectSql('SELECT last_insert_rowid() as id')
return result?.[0]?.id || 0 return result?.[0]?.id || 0
} }
/** 更新项目 */ /** 更新项目 */
export async function update(id: number, data: Partial<Project>): Promise<any> { export async function update(id: number, data: Partial<Project>): Promise<any> {
return DB.update(TABLE, { ...data, updated_at: new Date().toISOString() }, `id = ${id}`) const old = await selectById(id)
const totalArea = data.total_area !== undefined ? data.total_area : old?.total_area
const compactedArea = data.total_compaction_area !== undefined
? data.total_compaction_area
: old?.total_compaction_area
return DB.update(TABLE, {
...data,
uncompacted_area: calcUncompactedArea(totalArea, compactedArea),
updated_at: new Date().toISOString(),
}, `id = ${id}`)
} }
/** 删除项目 */ /** 删除项目 */

View File

@@ -64,6 +64,7 @@ function buildProjectDeltaSql(
total_duration = COALESCE(total_duration, 0) + (${durationDelta}), total_duration = COALESCE(total_duration, 0) + (${durationDelta}),
total_compaction_area = COALESCE(total_compaction_area, 0) + (${compactionDelta}), total_compaction_area = COALESCE(total_compaction_area, 0) + (${compactionDelta}),
total_pass_count = COALESCE(total_pass_count, 0) + (${passDelta}), total_pass_count = COALESCE(total_pass_count, 0) + (${passDelta}),
uncompacted_area = MAX(0, COALESCE(total_area, 0) - (COALESCE(total_compaction_area, 0) + (${compactionDelta}))),
updated_at = ${now} updated_at = ${now}
WHERE id = ${projectId}` WHERE id = ${projectId}`
} }