Compare commits
3 Commits
ba4b28cf44
...
30170d85ac
| Author | SHA1 | Date | |
|---|---|---|---|
| 30170d85ac | |||
| b17ce20ee0 | |||
| 051c10dfad |
@@ -60,8 +60,8 @@ Alle zur Laufzeit via `pck_system.f_get_par_wert_by_programmid`:
|
||||
| `NETSTORE_MARKER_DB` | Name der Marker-Datei im Object Store, der von Automaton abgelegt wird, um zu signalisieren, dass der entsprechende Unterordner komplett hochgeladen wurde. Verhindert die Verarbeitung von unvollständig hochgeladenen Ordnern. z.B.: `_READY_FOR_DB_PROCESSING_` |
|
||||
| `NETSTORE_MARKER_SB` | Name der Marker-Datei im Object Store, der von DB beim Verarbeiten angelegt wird, wenn eine oder mehrere Dateien eines ZIPs nicht automatisiert importiert werden konnten. Das soll signalisieren, dass ein Sachbearbeiter die Dateien in diesem Unterordner manuell prüfen und importieren muss. z.B.: `_BITTE_PRÜFEN_` |
|
||||
| `NETSTORE_BA_PREFIX` | Pfad in Object Storage, wo BA-Daten liegen. Muss mit einem `/` enden, z.B. `BA/Eingang/` |
|
||||
| `NETSTORE_BA_IMPORT` | Name des Unterordners von NETSTORE_BA_PREFIX im Object Storage, wo entpackte Dateien, die noch importiert werden müssen, zwischengespeichert werden. |
|
||||
| `NETSTORE_BA_ARCHIV` | Der Basis-Name des Unterordners von NETSTORE_BA_PREFIX im Object Storage, wo verarbeitete BA-Imports abgelegt werden. Der Name darf nicht mit / enden oder beginnen, z.B. "Verarbeitet". Beim Import wird an diesen Namen immer die aktuelle Jahreszahl angehangen, sodass der finale Ordner z.B. "Verarbeitet 2026" heißt. |
|
||||
| `NETSTORE_BA_KOR_IM` | Name des Unterordners von NETSTORE_BA_PREFIX im Object Storage, wo entpackte Dateien, die noch importiert werden müssen, zwischengespeichert werden. z.B. `Import/BA-Korrespondenzen/` |
|
||||
| `NETSTORE_BA_KOR_ARC` | Der Basis-Name des Unterordners von NETSTORE_BA_PREFIX im Object Storage, wo verarbeitete BA-Imports abgelegt werden. Der Name darf nicht mit / enden oder beginnen, z.B. `BA-Korrespondenzen`. Beim Import wird an diesen Namen immer die aktuelle Jahreszahl angehangen, sodass der finale Ordner z.B. `BA-Korrespondenzen 2026` heißt. |
|
||||
| `BA_IMPORT_SB_MIT_ID` | Mitarbeiter-ID für Import von BA Daten (z.B. Korrespondenzen). Diese Mitarbeiter-ID bekommt eine Wiedervorlage, für jede Datei, die nicht automatisch importiert werden konnte. |
|
||||
| `AUTOMATON_BASE_URL` | Base-URL des Quarkus Dateieingang Service, z.B. `http://dateieingang:8080` |
|
||||
| `AUTOMATON_API_KEY` | API-Key für den Quarkus Dateieingang Service (Header `X-Api-Key`) |
|
||||
|
||||
@@ -268,8 +268,8 @@ create or replace package body pck_auto_import as
|
||||
);
|
||||
|
||||
-- Zielordner Name zusammenstellen
|
||||
l_target_prefix := pck_system.f_get_par_wert_by_programmid('NETSTORE_TENANT_ID') || pck_system.f_get_par_wert_by_programmid('NETSTORE_BA_PREFIX') || pck_system.f_get_par_wert_by_programmid('NETSTORE_BA_ARCHIV') || ' ' || to_char(sysdate, 'YYYY') || '/';
|
||||
l_eingang_prefix := pck_system.f_get_par_wert_by_programmid('NETSTORE_TENANT_ID') || pck_system.f_get_par_wert_by_programmid('NETSTORE_BA_PREFIX') || pck_system.f_get_par_wert_by_programmid('NETSTORE_BA_IMPORT');
|
||||
l_target_prefix := pck_system.f_get_par_wert_by_programmid('NETSTORE_TENANT_ID') || pck_system.f_get_par_wert_by_programmid('NETSTORE_BA_PREFIX') || pck_system.f_get_par_wert_by_programmid('NETSTORE_BA_KOR_ARC') || ' ' || to_char(sysdate, 'YYYY') || '/';
|
||||
l_eingang_prefix := pck_system.f_get_par_wert_by_programmid('NETSTORE_TENANT_ID') || pck_system.f_get_par_wert_by_programmid('NETSTORE_BA_PREFIX') || pck_system.f_get_par_wert_by_programmid('NETSTORE_BA_KOR_IM');
|
||||
|
||||
-- Unterordner in eingangs-ordner auflisten (es gibt einen Ordner für jeden entpackte ZIP-Datei)
|
||||
l_folders := pck_net_storage.f_list_objects(
|
||||
|
||||
@@ -14,4 +14,6 @@
|
||||
# Docker push image to OCI
|
||||
|
||||
|
||||
- run .
|
||||
- cd docker
|
||||
- open .env and increase version number in "IMAGE_TAG=..."-variable
|
||||
- run ./build.sh
|
||||
|
||||
@@ -25,7 +25,7 @@ public interface OciConfig {
|
||||
* Prefix für eingehende Dateien unterhalb von {@code tenantPrefix},
|
||||
* z.B. {@code eingang/}. Muss mit {@code /} enden.
|
||||
*/
|
||||
String incomingPrefix();
|
||||
String incomingKorrespondenzenPrefix();
|
||||
|
||||
/** OCI Tenancy OCID. Aus Env-Var {@code OCI_TENANCY_ID}. */
|
||||
String tenancyId();
|
||||
|
||||
@@ -106,7 +106,7 @@ public class OciUploadService {
|
||||
}
|
||||
|
||||
private String buildPrefix(String zipNameWithoutExt) {
|
||||
return config.tenantPrefix() + config.incomingPrefix() + zipNameWithoutExt + "/";
|
||||
return config.tenantPrefix() + config.incomingKorrespondenzenPrefix() + zipNameWithoutExt + "/";
|
||||
}
|
||||
|
||||
private String buildKey(String zipNameWithoutExt, String relativePath) {
|
||||
|
||||
@@ -131,11 +131,11 @@ public class FileProcessingPipeline {
|
||||
Log.info("Starte OCI-Upload");
|
||||
ociUploadService.uploadFiles(context);
|
||||
|
||||
// --- SFTP Rename → .processed ---
|
||||
// --- SFTP Delete ---
|
||||
// Erst nach erfolgreichem Datei-Upload — Marker kommt danach,
|
||||
// damit Marker-Präsenz in OCI ↔ ZIP bereits .processed auf SFTP.
|
||||
MDC.put("step", "sftp-rename");
|
||||
sftpService.renameFile(zipFilename, zipFilename + ".processed");
|
||||
// damit Marker-Präsenz in OCI ↔ ZIP bereits vom SFTP gelöscht ist.
|
||||
MDC.put("step", "sftp-delete");
|
||||
sftpService.deleteFile(zipFilename);
|
||||
|
||||
// --- OCI Marker ---
|
||||
// Signalisiert der DB-Verarbeitung, dass der Batch vollständig hochgeladen ist.
|
||||
|
||||
@@ -112,10 +112,10 @@ public class SftpService {
|
||||
|
||||
/**
|
||||
* Benennt eine Datei auf dem Remote-SFTP-Server um.
|
||||
* Wird nach Erfolg ({@code .processed}) oder Fehler ({@code .error}) aufgerufen.
|
||||
* Wird nach Fehler ({@code .error}) aufgerufen.
|
||||
*
|
||||
* @param filename aktueller Dateiname, z.B. {@code export_2026-04-08.zip}
|
||||
* @param newFilename neuer Dateiname, z.B. {@code export_2026-04-08.zip.processed}
|
||||
* @param newFilename neuer Dateiname, z.B. {@code export_2026-04-08.zip.error}
|
||||
* @throws SftpException bei Verbindungs- oder Umbenennfehler
|
||||
*/
|
||||
public void renameFile(String filename, String newFilename) throws SftpException {
|
||||
@@ -129,4 +129,20 @@ public class SftpService {
|
||||
});
|
||||
Log.infof("SFTP Rename erfolgreich: '%s'", newFilename);
|
||||
}
|
||||
|
||||
/**
|
||||
* Löscht eine Datei auf dem Remote-SFTP-Server.
|
||||
* Wird nach erfolgreichem Verarbeiten aufgerufen.
|
||||
*
|
||||
* @param filename Dateiname, z.B. {@code export_2026-04-08.zip}
|
||||
* @throws SftpException bei Verbindungs- oder Löschfehler
|
||||
*/
|
||||
public void deleteFile(String filename) throws SftpException {
|
||||
Log.infof("SFTP Delete: '%s'", filename);
|
||||
withSftp(sftp -> {
|
||||
sftp.rm(config.remotePath() + "/" + filename);
|
||||
return null;
|
||||
});
|
||||
Log.infof("SFTP Delete erfolgreich: '%s'", filename);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,7 +12,7 @@ galabau.sftp.password=${GALABAU_SFTP_PASSWORD:}
|
||||
# Fingerprint auf host: ssh-keyscan <host> | ssh-keygen -lf -
|
||||
galabau.sftp.host-key-fingerprint=${GALABAU_SFTP_HOST_KEY_FINGERPRINT:SHA256:xyz}
|
||||
# Verzeichnis auf dem SFTP-Server, in dem der Lieferant ZIP-Dateien ablegt
|
||||
galabau.sftp.remote-path=${GALABAU_SFTP_REMOTE_PATH:/bundesagenturfuerarbeit/austausch/test/galaeingang}
|
||||
galabau.sftp.remote-path=${GALABAU_SFTP_REMOTE_PATH:/bundesagenturfuerarbeit/austausch/dev/galaeingang}
|
||||
# Temporäres lokales Verzeichnis für Download + Entpacken — wird nach jeder ZIP bereinigt
|
||||
galabau.sftp.local-work-dir=/tmp/sftp-work
|
||||
# galabau.sftp.private-key-path=/etc/secrets/sftp-key
|
||||
@@ -28,7 +28,7 @@ galabau.oci.bucket=${OCI_BUCKET}
|
||||
# Root-Prefix im Bucket, muss mit / enden
|
||||
galabau.oci.tenant-prefix=${OCI_TENANT_PREFIX:testmandant-42/}
|
||||
# Eingangs-Prefix unterhalb von tenant-prefix, muss mit / enden
|
||||
galabau.oci.incoming-prefix=${OCI_INCOMING_FILES_PATH:BA/Eingang/Import/}
|
||||
galabau.oci.incoming-korrespondenzen-prefix=${OCI_INCOMING_FILES_PATH:BA/Eingang/Import/BA-Korrespondenzen/}
|
||||
galabau.oci.tenancy-id=${OCI_TENANCY_ID}
|
||||
galabau.oci.user-id=${OCI_USER_ID}
|
||||
galabau.oci.fingerprint=${OCI_FINGERPRINT}
|
||||
|
||||
Reference in New Issue
Block a user