feat(M08-B): 补结算转账状态筛选
This commit is contained in:
@@ -8,6 +8,7 @@ export const cleaningTaskStatuses = [
|
||||
] as const;
|
||||
export type CleaningTaskStatus = typeof cleaningTaskStatuses[number];
|
||||
export type CleaningSettlementStatus = 'DRAFT' | 'CONFIRMED' | 'PAID' | 'CANCELLED';
|
||||
export type CleaningSettlementPayoutState = 'NONE' | 'SUCCESS' | 'FAIL' | 'PROCESSING' | 'WAIT_USER_CONFIRM';
|
||||
|
||||
export class CleaningTaskError extends Error {
|
||||
constructor(public readonly code: string) { super(code); }
|
||||
@@ -435,7 +436,8 @@ export class CleaningTaskRepository {
|
||||
}
|
||||
|
||||
async listSettlements(input: CleaningActor & {
|
||||
page: number; pageSize: number; status?: CleaningSettlementStatus; storeId?: string; cleanerUserId?: string;
|
||||
page: number; pageSize: number; status?: CleaningSettlementStatus;
|
||||
payoutState?: CleaningSettlementPayoutState; storeId?: string; cleanerUserId?: string;
|
||||
}) {
|
||||
this.assertSettlement(input.access, 'read');
|
||||
const where = [
|
||||
@@ -448,6 +450,14 @@ export class CleaningTaskRepository {
|
||||
where.push('s.status = ?');
|
||||
params.push(input.status);
|
||||
}
|
||||
if (input.payoutState) {
|
||||
if (input.payoutState === 'NONE') {
|
||||
where.push("s.payout_state = ''");
|
||||
} else {
|
||||
where.push('s.payout_state = ?');
|
||||
params.push(input.payoutState);
|
||||
}
|
||||
}
|
||||
if (input.storeId) {
|
||||
where.push('s.store_id = ?');
|
||||
params.push(input.storeId);
|
||||
|
||||
@@ -52,10 +52,14 @@ const memberRemoveSchema = z.object({
|
||||
const completeSchema = z.object({ note: z.string().trim().max(512).optional() }).strict();
|
||||
const rejectSchema = z.object({ reason: z.string().trim().min(1).max(512) }).strict();
|
||||
const settlementStatusSchema = z.enum(['DRAFT', 'CONFIRMED', 'PAID', 'CANCELLED']);
|
||||
const settlementPayoutStateSchema = z.enum([
|
||||
'NONE', 'SUCCESS', 'FAIL', 'PROCESSING', 'WAIT_USER_CONFIRM'
|
||||
]);
|
||||
const settlementListSchema = z.object({
|
||||
page: z.coerce.number().int().min(1).default(1),
|
||||
pageSize: z.coerce.number().int().min(1).max(50).default(20),
|
||||
status: settlementStatusSchema.optional(),
|
||||
payoutState: settlementPayoutStateSchema.optional(),
|
||||
storeId: z.string().regex(/^[1-9]\d{0,19}$/).optional(),
|
||||
cleanerUserId: z.string().regex(/^[1-9]\d{0,19}$/).optional()
|
||||
}).strict();
|
||||
|
||||
@@ -450,12 +450,13 @@ assert.equal(calls.at(-1)[1].cleanerUserId, '31');
|
||||
|
||||
const settlementList = await app.inject({
|
||||
method: 'GET',
|
||||
url: '/admin-api/cleaning/settlements?status=DRAFT&storeId=11&cleanerUserId=31',
|
||||
url: '/admin-api/cleaning/settlements?status=DRAFT&payoutState=FAIL&storeId=11&cleanerUserId=31',
|
||||
headers: { authorization: `Bearer ${token}` }
|
||||
});
|
||||
assert.equal(settlementList.statusCode, 200);
|
||||
assert.equal(calls.at(-1)[0], 'listSettlements');
|
||||
assert.equal(calls.at(-1)[1].status, 'DRAFT');
|
||||
assert.equal(calls.at(-1)[1].payoutState, 'FAIL');
|
||||
assert.equal(calls.at(-1)[1].storeId, '11');
|
||||
assert.equal(calls.at(-1)[1].cleanerUserId, '31');
|
||||
|
||||
|
||||
Reference in New Issue
Block a user