增加工单首次查看标识

This commit is contained in:
yml2213
2026-08-17 20:11:35 +08:00
parent 1b4bdec56d
commit 370acdba60
12 changed files with 228 additions and 18 deletions
@@ -472,6 +472,51 @@ export async function upsertWorkerWorkOrderNote(input: {
return String(result.rows[0]?.note || '')
}
/** 查询打手已查看过的工单,用于计算“新”标识。 */
export async function listWorkerWorkOrderViews(
workerId: number | string,
workOrderIds: number[],
): Promise<Array<{ work_order_id: number; viewed_at: string }>> {
if (workOrderIds.length === 0) return []
const result = await query<{ work_order_id: number; viewed_at: string }>(
`
SELECT work_order_id, viewed_at
FROM worker_work_order_views
WHERE worker_id = $1 AND work_order_id = ANY($2::bigint[])
`,
[Number(workerId), workOrderIds],
)
return result.rows
}
/** 首次查看工单时写入已读记录;重复调用保持原查看时间不变。 */
export async function markWorkerWorkOrderViewed(input: {
workOrderId: number
workerId: number
now: string
}): Promise<string> {
const inserted = await query<{ viewed_at: string }>(
`
INSERT INTO worker_work_order_views (work_order_id, worker_id, viewed_at)
VALUES ($1, $2, $3)
ON CONFLICT (work_order_id, worker_id) DO NOTHING
RETURNING viewed_at
`,
[input.workOrderId, input.workerId, input.now],
)
if (inserted.rows[0]?.viewed_at) return String(inserted.rows[0].viewed_at)
const existing = await query<{ viewed_at: string }>(
`
SELECT viewed_at
FROM worker_work_order_views
WHERE work_order_id = $1 AND worker_id = $2
LIMIT 1
`,
[input.workOrderId, input.workerId],
)
return String(existing.rows[0]?.viewed_at || input.now)
}
async function getWorkOrderShareById(shareId: number): Promise<WorkOrderShareRow | null> {
const result = await query<WorkOrderShareRow>(
`${WORK_ORDER_SHARE_SELECT} WHERE wos.id = $1 LIMIT 1`,