feat(M08-B): 补保洁员绩效排行

This commit is contained in:
Codex
2026-07-07 14:41:35 +08:00
parent ee39e98418
commit 38410b1185
10 changed files with 183 additions and 14 deletions
@@ -146,6 +146,8 @@ interface ManagerMemberStatsRow extends RowDataPacket {
cleanerUserId: string;
cleanerName: string;
taskCount: number;
completedTaskCount: number;
rejectedTaskCount: number;
pendingSettlementCents: number | null;
settledRewardCents: number | null;
}
@@ -920,6 +922,8 @@ export class CleaningTaskRepository {
const [memberRows] = await this.pool.execute<ManagerMemberStatsRow[]>(
`SELECT m.user_id AS cleanerUserId, u.nickname AS cleanerName,
COUNT(DISTINCT m.task_id) AS taskCount,
SUM(CASE WHEN t.status IN ('COMPLETED', 'SETTLED') THEN 1 ELSE 0 END) AS completedTaskCount,
SUM(CASE WHEN t.status = 'REJECTED' THEN 1 ELSE 0 END) AS rejectedTaskCount,
COALESCE(SUM(CASE
WHEN m.removed_at IS NULL AND m.settled_at IS NULL AND t.status IN ('SUBMITTED', 'COMPLETED')
THEN m.reward_cents ELSE 0 END), 0) AS pendingSettlementCents,
@@ -1450,6 +1454,8 @@ function publicManagerStatistics(
cleanerUserId: String(row.cleanerUserId),
cleanerName: row.cleanerName,
taskCount: Number(row.taskCount),
completedTaskCount: Number(row.completedTaskCount ?? 0),
rejectedTaskCount: Number(row.rejectedTaskCount ?? 0),
pendingSettlementCents: Number(row.pendingSettlementCents ?? 0),
settledRewardCents: Number(row.settledRewardCents ?? 0)
})),
+4
View File
@@ -200,6 +200,8 @@ const app = await buildApp({
cleanerUserId: '31',
cleanerName: 'Cleaner',
taskCount: 3,
completedTaskCount: 2,
rejectedTaskCount: 1,
pendingSettlementCents: 1200,
settledRewardCents: 600
}],
@@ -317,6 +319,8 @@ assert.equal(calls.at(-1)[0], 'managerStatistics');
assert.equal(calls.at(-1)[1].storeId, '11');
assert.equal(calls.at(-1)[1].cleanerUserId, '31');
assert.equal(managerStats.json().data.summary.pendingSettlementCents, 1200);
assert.equal(managerStats.json().data.members[0].completedTaskCount, 2);
assert.equal(managerStats.json().data.members[0].rejectedTaskCount, 1);
assert.equal(managerStats.json().data.trend[0].paidSettlementCents, 600);
const claim = await app.inject({