feat(M08-B): 补免清洁统计展示
This commit is contained in:
@@ -135,6 +135,7 @@ interface ManagerStoreStatsRow extends RowDataPacket {
|
||||
pendingReview: number;
|
||||
completed: number;
|
||||
rejected: number;
|
||||
exempted: number;
|
||||
rewardCents: number | null;
|
||||
}
|
||||
interface ManagerSettlementStatsRow extends RowDataPacket {
|
||||
@@ -157,6 +158,7 @@ interface ManagerDailyTrendRow extends RowDataPacket {
|
||||
pendingReview: number;
|
||||
completed: number;
|
||||
rejected: number;
|
||||
exempted: number;
|
||||
rewardCents: number | null;
|
||||
paidSettlementCents: number | null;
|
||||
}
|
||||
@@ -943,6 +945,7 @@ export class CleaningTaskRepository {
|
||||
SUM(CASE WHEN t.status = 'SUBMITTED' THEN 1 ELSE 0 END) AS pendingReview,
|
||||
SUM(CASE WHEN t.status IN ('COMPLETED', 'SETTLED') THEN 1 ELSE 0 END) AS completed,
|
||||
SUM(CASE WHEN t.status = 'REJECTED' THEN 1 ELSE 0 END) AS rejected,
|
||||
SUM(CASE WHEN t.status = 'EXEMPT' THEN 1 ELSE 0 END) AS exempted,
|
||||
COALESCE(SUM(t.reward_cents), 0) AS rewardCents
|
||||
FROM qipai_cleaning_tasks t
|
||||
INNER JOIN qipai_stores s ON s.tenant_id = t.tenant_id AND s.id = t.store_id
|
||||
@@ -1008,6 +1011,7 @@ export class CleaningTaskRepository {
|
||||
SUM(CASE WHEN t.status = 'SUBMITTED' THEN 1 ELSE 0 END) AS pendingReview,
|
||||
SUM(CASE WHEN t.status IN ('COMPLETED', 'SETTLED') THEN 1 ELSE 0 END) AS completed,
|
||||
SUM(CASE WHEN t.status = 'REJECTED' THEN 1 ELSE 0 END) AS rejected,
|
||||
SUM(CASE WHEN t.status = 'EXEMPT' THEN 1 ELSE 0 END) AS exempted,
|
||||
COALESCE(SUM(t.reward_cents), 0) AS rewardCents,
|
||||
COALESCE((
|
||||
SELECT SUM(s.total_reward_cents)
|
||||
@@ -1493,6 +1497,7 @@ function publicManagerStatistics(
|
||||
pendingReview: countStatus(byStatus, 'SUBMITTED'),
|
||||
active: countStatus(byStatus, 'WAITING') + countStatus(byStatus, 'CLAIMED') + countStatus(byStatus, 'STARTED'),
|
||||
rejected: countStatus(byStatus, 'REJECTED'),
|
||||
exempted: countStatus(byStatus, 'EXEMPT'),
|
||||
completed: countStatus(byStatus, 'COMPLETED') + countStatus(byStatus, 'SETTLED'),
|
||||
rewardCents: byStatus.reduce((sum, row) => sum + row.rewardCents, 0),
|
||||
pendingSettlementCents: memberRows.reduce((sum, row) => sum + Number(row.pendingSettlementCents ?? 0), 0),
|
||||
@@ -1511,6 +1516,7 @@ function publicManagerStatistics(
|
||||
pendingReview: Number(row.pendingReview),
|
||||
completed: Number(row.completed),
|
||||
rejected: Number(row.rejected),
|
||||
exempted: Number(row.exempted ?? 0),
|
||||
rewardCents: Number(row.rewardCents ?? 0)
|
||||
})),
|
||||
settlements: settlementByStatus,
|
||||
@@ -1529,6 +1535,7 @@ function publicManagerStatistics(
|
||||
pendingReview: Number(row.pendingReview),
|
||||
completed: Number(row.completed),
|
||||
rejected: Number(row.rejected),
|
||||
exempted: Number(row.exempted ?? 0),
|
||||
rewardCents: Number(row.rewardCents ?? 0),
|
||||
paidSettlementCents: Number(row.paidSettlementCents ?? 0)
|
||||
}))
|
||||
|
||||
@@ -191,6 +191,7 @@ const app = await buildApp({
|
||||
pendingReview: 2,
|
||||
active: 1,
|
||||
rejected: 1,
|
||||
exempted: 1,
|
||||
completed: 1,
|
||||
rewardCents: 3000,
|
||||
pendingSettlementCents: 1200,
|
||||
@@ -205,6 +206,7 @@ const app = await buildApp({
|
||||
pendingReview: 2,
|
||||
completed: 1,
|
||||
rejected: 1,
|
||||
exempted: 1,
|
||||
rewardCents: 3000
|
||||
}],
|
||||
settlements: [{ status: 'CONFIRMED', total: 1, rewardCents: 800 }],
|
||||
@@ -223,6 +225,7 @@ const app = await buildApp({
|
||||
pendingReview: 2,
|
||||
completed: 1,
|
||||
rejected: 1,
|
||||
exempted: 1,
|
||||
rewardCents: 3000,
|
||||
paidSettlementCents: 600
|
||||
}]
|
||||
@@ -331,8 +334,11 @@ 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.summary.exempted, 1);
|
||||
assert.equal(managerStats.json().data.byStore[0].exempted, 1);
|
||||
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].exempted, 1);
|
||||
assert.equal(managerStats.json().data.trend[0].paidSettlementCents, 600);
|
||||
|
||||
const claim = await app.inject({
|
||||
|
||||
Reference in New Issue
Block a user