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,
|
(c) => Number(c['ist_lieferant']) === 1 && Number(c['ist_aktiv']) === 1,
|
||||||
)) {
|
)) {
|
||||||
try {
|
try {
|
||||||
await this.getOrCreateCorrespondent(customer);
|
await this.getOrCreateCorrespondent(customer, Number(customer.id));
|
||||||
} catch (err: unknown) {
|
} catch (err: unknown) {
|
||||||
this.logger.warn(`Korrespondenten-Sync fehlgeschlagen: ${err instanceof Error ? err.message : err}`);
|
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;
|
let correspondentId: number | undefined;
|
||||||
const customer = customers.find((c) => Number(c.id) === amDoc.kundenId);
|
const customer = customers.find((c) => Number(c.id) === amDoc.kundenId);
|
||||||
if (customer) {
|
if (customer) {
|
||||||
const corr = await this.getOrCreateCorrespondent(customer);
|
const corr = await this.getOrCreateCorrespondent(customer, amDoc.kundenId);
|
||||||
if (corr) correspondentId = corr.id as number;
|
if (corr) correspondentId = corr.id as number;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -409,7 +409,7 @@ export class AgrarmonitorPollingService implements OnModuleInit {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Korrespondent ermitteln oder anlegen
|
// Korrespondent ermitteln oder anlegen
|
||||||
const corr = await this.getOrCreateCorrespondent(customer);
|
const corr = await this.getOrCreateCorrespondent(customer, amDoc.kundenId);
|
||||||
|
|
||||||
// Owner aus Client-Tabelle
|
// Owner aus Client-Tabelle
|
||||||
let ownerId: number | undefined;
|
let ownerId: number | undefined;
|
||||||
@@ -620,7 +620,16 @@ export class AgrarmonitorPollingService implements OnModuleInit {
|
|||||||
return { mergedDocuments };
|
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 lieferantennummer = (customer['lieferantennummer'] as string) ?? '';
|
||||||
const displayName = this.buildCustomerName(customer, lieferantennummer);
|
const displayName = this.buildCustomerName(customer, lieferantennummer);
|
||||||
let corr = await this.paperlessService.getCorrespondentByName(displayName);
|
let corr = await this.paperlessService.getCorrespondentByName(displayName);
|
||||||
@@ -633,6 +642,18 @@ export class AgrarmonitorPollingService implements OnModuleInit {
|
|||||||
owner: null,
|
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;
|
return corr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user