perf: resolve correspondents via stored AgrarmonitorId instead of name lookup
Build and Push Multi-Platform Images / build-and-push (push) Successful in 30s
Build and Push Multi-Platform Images / build-and-push (push) Successful in 30s
- getOrCreateCorrespondent first checks CorrespondentSetting by kundenId - Falls back to name search only when no mapping exists - Saves the mapping after creation for future polling runs Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -143,7 +143,7 @@ export class AgrarmonitorPollingService implements OnModuleInit {
|
||||
(c) => Number(c['ist_lieferant']) === 1 && Number(c['ist_aktiv']) === 1,
|
||||
)) {
|
||||
try {
|
||||
await this.getOrCreateCorrespondent(customer);
|
||||
await this.getOrCreateCorrespondent(customer, Number(customer.id));
|
||||
} catch (err: unknown) {
|
||||
this.logger.warn(`Korrespondenten-Sync fehlgeschlagen: ${err instanceof Error ? err.message : err}`);
|
||||
}
|
||||
@@ -237,7 +237,7 @@ export class AgrarmonitorPollingService implements OnModuleInit {
|
||||
let correspondentId: number | undefined;
|
||||
const customer = customers.find((c) => Number(c.id) === amDoc.kundenId);
|
||||
if (customer) {
|
||||
const corr = await this.getOrCreateCorrespondent(customer);
|
||||
const corr = await this.getOrCreateCorrespondent(customer, amDoc.kundenId);
|
||||
if (corr) correspondentId = corr.id as number;
|
||||
}
|
||||
|
||||
@@ -409,7 +409,7 @@ export class AgrarmonitorPollingService implements OnModuleInit {
|
||||
}
|
||||
|
||||
// Korrespondent ermitteln oder anlegen
|
||||
const corr = await this.getOrCreateCorrespondent(customer);
|
||||
const corr = await this.getOrCreateCorrespondent(customer, amDoc.kundenId);
|
||||
|
||||
// Owner aus Client-Tabelle
|
||||
let ownerId: number | undefined;
|
||||
@@ -620,7 +620,16 @@ export class AgrarmonitorPollingService implements OnModuleInit {
|
||||
return { mergedDocuments };
|
||||
}
|
||||
|
||||
private async getOrCreateCorrespondent(customer: Record<string, unknown>): Promise<any> {
|
||||
private async getOrCreateCorrespondent(customer: Record<string, unknown>, kundenId?: number): Promise<any> {
|
||||
// Direkter Lookup über gespeicherte Agrarmonitor-ID
|
||||
if (kundenId !== undefined) {
|
||||
const setting = await this.corrSettingRepo.findOneBy({ AgrarmonitorId: kundenId });
|
||||
if (setting) {
|
||||
return { id: setting.CorrespondentId };
|
||||
}
|
||||
}
|
||||
|
||||
// Fallback: Namensuche und ggf. anlegen
|
||||
const lieferantennummer = (customer['lieferantennummer'] as string) ?? '';
|
||||
const displayName = this.buildCustomerName(customer, lieferantennummer);
|
||||
let corr = await this.paperlessService.getCorrespondentByName(displayName);
|
||||
@@ -633,6 +642,18 @@ export class AgrarmonitorPollingService implements OnModuleInit {
|
||||
owner: null,
|
||||
});
|
||||
}
|
||||
|
||||
// Link für künftige Läufe speichern
|
||||
if (corr && kundenId !== undefined) {
|
||||
let setting = await this.corrSettingRepo.findOneBy({ CorrespondentId: corr.id as number });
|
||||
if (!setting) {
|
||||
setting = this.corrSettingRepo.create({ CorrespondentId: corr.id as number, AgrarmonitorId: kundenId });
|
||||
} else {
|
||||
setting.AgrarmonitorId = kundenId;
|
||||
}
|
||||
await this.corrSettingRepo.save(setting);
|
||||
}
|
||||
|
||||
return corr;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user