增加工单首次查看标识
This commit is contained in:
@@ -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`,
|
||||
|
||||
Reference in New Issue
Block a user