v4.0.11HQ后端优化(快链、账单日等)
CI / verify (pull_request) Waiting to run

This commit is contained in:
2026-09-02 15:45:12 +08:00
parent 1000b489a0
commit 6880b5daf4
31 changed files with 1014 additions and 402 deletions
@@ -590,7 +590,7 @@ export class DevPlanService {
async listVersions(query: { status?: string; page?: number; pageSize?: number }) {
async listVersions(query: { status?: string; keyword?: string; page?: number; pageSize?: number }) {
const page = query.page ?? 1;
@@ -600,7 +600,13 @@ export class DevPlanService {
if (query.status) where.status = query.status as DevPlanVersionStatus;
if (query.keyword?.trim()) {
const kw = query.keyword.trim();
where.OR = [
{ versionNo: { contains: kw } },
{ content: { contains: kw } },
];
}
const [rows, total] = await Promise.all([
@@ -1329,6 +1335,7 @@ export class DevPlanService {
status?: string;
type?: string;
keyword?: string;
columns?: string[];
}) {
let rows: Array<{
id: bigint;
@@ -1372,20 +1379,24 @@ export class DevPlanService {
: Promise.resolve([]),
]);
const ticketMap = new Map(tickets.map((t) => [String(t.id), t.ticketNo] as [string, string]));
const taskIds = rows.map((r) => r.id);
const versionMap = await this.loadTaskVersionMap(taskIds);
const exportRows = rows.map((r) =>
mapTaskToExportRow({
const exportRows = rows.map((r) => {
const versions = versionMap.get(String(r.id)) ?? [];
return mapTaskToExportRow({
taskNo: r.taskNo,
type: r.type,
status: r.status,
content: r.content,
supportTicketNo: r.supportTicketId != null ? ticketMap.get(String(r.supportTicketId)) ?? null : null,
versionNos: versions.map((v) => v.versionNo).join('、') || null,
creatorName: names.get(String(r.creatorHqAccountId)) ?? null,
createdAt: r.createdAt.toISOString(),
completedAt: r.completedAt?.toISOString() ?? null,
attachmentUrls: parseAttachmentUrls(r.attachmentUrls),
}),
);
});
});
let buffer: Buffer;
switch (dto.format) {
@@ -1396,7 +1407,7 @@ export class DevPlanService {
buffer = await buildDevPlanDocx(exportRows);
break;
case 'xlsx':
buffer = await buildDevPlanXlsx(exportRows);
buffer = await buildDevPlanXlsx(exportRows, dto.columns);
break;
case 'pdf':
buffer = await buildDevPlanPdf(exportRows);