Skip to content
This repository has been archived by the owner on Jan 22, 2025. It is now read-only.

Støtte for søk- integrasjonstester #108

Open
wants to merge 2 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
</PropertyGroup>

<ItemGroup>
<PackageReference Include="KS.Fiks.Arkiv.Models.V1" Version="0.0.20" />
<PackageReference Include="KS.Fiks.Arkiv.Models.V1" Version="0.9.1" />
<PackageReference Include="KS.Fiks.ASiC-E" Version="1.0.3" />
<PackageReference Include="KS.Fiks.IO.Client" Version="1.2.11" />
<PackageReference Include="Microsoft.Extensions.Hosting" Version="5.0.0" />
Expand Down
63 changes: 34 additions & 29 deletions dotnet-source/ks.fiks.io.arkivsystem.sample/ArkivSimulator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@
using ks.fiks.io.arkivsystem.sample.Generators;
using ks.fiks.io.arkivsystem.sample.Handlers;
using ks.fiks.io.arkivsystem.sample.Models;
using ks.fiks.io.arkivsystem.sample.Storage;
using KS.Fiks.IO.Client;
using KS.Fiks.IO.Client.Models;
using Microsoft.Extensions.Hosting;
Expand All @@ -30,26 +29,24 @@ public class ArkivSimulator : BackgroundService
private FiksIOClient client;
private readonly AppSettings appSettings;
private static readonly ILogger Log = Serilog.Log.ForContext(MethodBase.GetCurrentMethod()?.DeclaringType);
public static SizedDictionary<string, Arkivmelding> _arkivmeldingCache;
public static Dictionary<string, Arkivmelding> _arkivmeldingProtokollValidatorStorage;
private JournalpostHentHandler _journalpostHentHandler;
private MappeHentHandler _mappeHentHandler;
private SokHandler _sokHandler;
private ArkivmeldingHandler _arkivmeldingHandler;
private ArkivmeldingOppdaterHandler _arkivmeldingOppdaterHandler;
public static Dictionary<string, Arkivmelding> ArkivmeldingProtokollValidatorStorage;
private readonly JournalpostHentHandler _journalpostHentHandler;
private readonly MappeHentHandler _mappeHentHandler;
private readonly SokHandler _sokHandler;
private readonly ArkivmeldingHandler _arkivmeldingHandler;
private readonly ArkivmeldingOppdaterHandler _arkivmeldingOppdaterHandler;

public ArkivSimulator(AppSettings appSettings)
public ArkivSimulator(AppSettings appSettings, JournalpostHentHandler journalpostHentHandler, MappeHentHandler mappeHentHandler, SokHandler sokHandler, ArkivmeldingHandler arkivmeldingHandler, ArkivmeldingOppdaterHandler arkivmeldingOppdaterHandler)
{
this.appSettings = appSettings;
Log.Information("Setter opp FIKS integrasjon for arkivsystem");
client = FiksIOClientBuilder.CreateFiksIoClient(appSettings);
_arkivmeldingCache = new SizedDictionary<string, Arkivmelding>(100);
_arkivmeldingProtokollValidatorStorage = new Dictionary<string, Arkivmelding>();
_journalpostHentHandler = new JournalpostHentHandler();
_mappeHentHandler = new MappeHentHandler();
_sokHandler = new SokHandler();
_arkivmeldingHandler = new ArkivmeldingHandler();
_arkivmeldingOppdaterHandler = new ArkivmeldingOppdaterHandler();
ArkivmeldingProtokollValidatorStorage = new Dictionary<string, Arkivmelding>();
_journalpostHentHandler = journalpostHentHandler;
_mappeHentHandler = mappeHentHandler;
_sokHandler = sokHandler;
_arkivmeldingHandler = arkivmeldingHandler;
_arkivmeldingOppdaterHandler = arkivmeldingOppdaterHandler;
InitArkivmeldingStorage();
}

Expand All @@ -67,7 +64,7 @@ private void InitArkivmeldingStorage()
using TextReader reader = new StringReader(xml);
var arkivmelding = (Arkivmelding)serializer.Deserialize(reader);
var key = directoryName.Split(Path.DirectorySeparatorChar)[1];
_arkivmeldingProtokollValidatorStorage.Add(key, arkivmelding); // Innkommende meldingId er key
ArkivmeldingProtokollValidatorStorage.Add(key, arkivmelding); // Innkommende meldingId er key
}
}

Expand Down Expand Up @@ -108,11 +105,11 @@ private void OnReceivedMelding(object sender, MottattMeldingArgs mottatt)
private void HandleInnsynMelding(MottattMeldingArgs mottatt)
{
var payloads = new List<IPayload>();
Melding melding;
var meldinger = new List<Melding>();

try
{
melding = mottatt.Melding.MeldingType switch
meldinger = mottatt.Melding.MeldingType switch
{
FiksArkivMeldingtype.Sok => _sokHandler.HandleMelding(mottatt),
FiksArkivMeldingtype.JournalpostHent => _journalpostHentHandler.HandleMelding(mottatt),
Expand All @@ -122,25 +119,33 @@ private void HandleInnsynMelding(MottattMeldingArgs mottatt)
}
catch (Exception e)
{
melding = new Melding
meldinger.Add(new Melding
{
ResultatMelding =
FeilmeldingGenerator.CreateUgyldigforespoerselMelding(
$"Klarte ikke håndtere innkommende melding. Feilmelding: {e.Message}"),
FileName = "feilmelding.xml",
MeldingsType = FiksArkivMeldingtype.Ugyldigforespørsel,
};
});
}

payloads.Add(new StringPayload(ArkivmeldingSerializeHelper.Serialize(melding.ResultatMelding),
melding.FileName));

mottatt.SvarSender.Ack(); // Ack message to remove it from the queue
foreach (var melding in meldinger)
{
if (melding.ResultatMelding != null)
{
payloads.Add(new StringPayload(ArkivmeldingSerializeHelper.Serialize(melding.ResultatMelding),
melding.FileName));
}

mottatt.SvarSender.Ack(); // Ack message to remove it from the queue

var sendtMelding = mottatt.SvarSender.Svar(melding.MeldingsType, payloads).Result;
Log.Information("Svarmelding meldingId {MeldingId}, meldingType {MeldingType} sendt", sendtMelding.MeldingId,
sendtMelding.MeldingType);
Log.Information("Melding er ferdig håndtert i arkiv");
var sendtMelding = mottatt.SvarSender.Svar(melding.MeldingsType, payloads).Result;
Log.Information("Svarmelding meldingId {MeldingId}, meldingType {MeldingType} sendt",
sendtMelding.MeldingId,
sendtMelding.MeldingType);
}

Log.Information($"Innkommende arkivmelding med id {mottatt.Melding.MeldingId} er ferdig håndtert i arkiv");
}

private void HandleArkiveringMelding(MottattMeldingArgs mottatt)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
using System.Collections.Generic;
using KS.Fiks.Arkiv.Models.V1.Arkivering.Arkivmelding;
using KS.Fiks.Arkiv.Models.V1.Arkivstruktur;
using KS.Fiks.Arkiv.Models.V1.Innsyn.Sok;
using KS.Fiks.Arkiv.Models.V1.Meldingstyper;
Expand All @@ -8,38 +10,55 @@ namespace ks.fiks.io.arkivsystem.sample.Generators
{
public class SokGenerator
{
public static Melding CreateSokResponseMelding(Sok sok) =>
sok.ResponsType switch

private SokeresultatGenerator _sokeresultatGenerator;
public SokGenerator(SokeresultatGenerator sokeresultatGenerator)
{
_sokeresultatGenerator = sokeresultatGenerator;
}

public List<Melding> CreateSokResponseMelding(Sok sok, List<Arkivmelding> lagretArkivmeldinger)
{
var meldinger = new List<Melding>();

switch (sok.ResponsType)
{
ResponsType.Minimum =>
new Melding
case ResponsType.Minimum:
meldinger.Add(new Melding
{
FileName = "resultat.xml",
MeldingsType = FiksArkivMeldingtype.SokResultatMinimum,
ResultatMelding = SokeresultatGenerator.CreateSokeResultatMinimum(sok.Respons)
},
ResponsType.Noekler =>
new Melding
ResultatMelding = _sokeresultatGenerator.CreateSokeResultatMinimum(sok)
});
break;
case ResponsType.Noekler:
;
meldinger.Add(new Melding
{
FileName = "resultat.xml",
MeldingsType = FiksArkivMeldingtype.SokResultatNoekler,
ResultatMelding = SokeresultatGenerator.CreateSokeResultatNoekler(),
},
ResponsType.Utvidet =>
new Melding
ResultatMelding = _sokeresultatGenerator.CreateSokeResultatNoekler(),
});
break;
case ResponsType.Utvidet:
meldinger.Add(new Melding
{
FileName = "resultat.xml",
MeldingsType = FiksArkivMeldingtype.SokResultatUtvidet,
ResultatMelding = SokeresultatGenerator.CreateSokeResultatUtvidet(sok.Respons)
},
_ =>
new Melding
ResultatMelding = _sokeresultatGenerator.CreateSokeResultatUtvidet(sok, lagretArkivmeldinger)
});
break;
default:
meldinger.Add(new Melding
{
FileName = "resultat.xml",
MeldingsType = FiksArkivMeldingtype.SokResultatMinimum,
ResultatMelding = SokeresultatGenerator.CreateSokeResultatMinimum(sok.Respons),
}
};
ResultatMelding = _sokeresultatGenerator.CreateSokeResultatMinimum(sok),
});
break;
}

return meldinger;
}
}
}
Original file line number Diff line number Diff line change
@@ -1,16 +1,22 @@
using System;
using System.Collections;
using System.Collections.Generic;
using KS.Fiks.Arkiv.Models.V1.Arkivering.Arkivmelding;
using KS.Fiks.Arkiv.Models.V1.Arkivstruktur;
using KS.Fiks.Arkiv.Models.V1.Arkivstruktur.Minimum;
using KS.Fiks.Arkiv.Models.V1.Arkivstruktur.Noekler;
using KS.Fiks.Arkiv.Models.V1.Innsyn.Sok;
using KS.Fiks.Arkiv.Models.V1.Metadatakatalog;
using EksternNoekkel = KS.Fiks.Arkiv.Models.V1.Arkivstruktur.EksternNoekkel;
using Journalpost = KS.Fiks.Arkiv.Models.V1.Arkivstruktur.Journalpost;
using Mappe = KS.Fiks.Arkiv.Models.V1.Arkivstruktur.Mappe;
using Saksmappe = KS.Fiks.Arkiv.Models.V1.Arkivstruktur.Saksmappe;

namespace ks.fiks.io.arkivsystem.sample.Helpers
{
public class SokeresultatGenerator
{
public static SokeresultatMinimum CreateSokeResultatMinimum(Respons sokRespons)
public SokeresultatMinimum CreateSokeResultatMinimum(Sok sok)
{
var sokeResultatMinimum = new SokeresultatMinimum()
{
Expand All @@ -23,7 +29,7 @@ public static SokeresultatMinimum CreateSokeResultatMinimum(Respons sokRespons)

};

switch (sokRespons)
switch (sok.Respons)
{
case Respons.Mappe:
AddMappeResultatMinimum(sokeResultatMinimum);
Expand All @@ -35,7 +41,7 @@ public static SokeresultatMinimum CreateSokeResultatMinimum(Respons sokRespons)
return sokeResultatMinimum;
}

private static void AddSaksmappeResultatMinimum(SokeresultatMinimum sokeresultatMinimum)
private void AddSaksmappeResultatMinimum(SokeresultatMinimum sokeresultatMinimum)
{
sokeresultatMinimum.ResultatListe.Add(
new ResultatMinimum()
Expand Down Expand Up @@ -77,7 +83,7 @@ private static void AddSaksmappeResultatMinimum(SokeresultatMinimum sokeresultat
});
}

private static void AddMappeResultatMinimum(SokeresultatMinimum sokeresultatMinimum)
private void AddMappeResultatMinimum(SokeresultatMinimum sokeresultatMinimum)
{
sokeresultatMinimum.ResultatListe.Add(
new ResultatMinimum()
Expand All @@ -101,7 +107,7 @@ private static void AddMappeResultatMinimum(SokeresultatMinimum sokeresultatMini
});
}

public static Sokeresultat CreateSokeResultatUtvidet(Respons sokRespons)
public Sokeresultat CreateSokeResultatUtvidet(Sok sok, List<Arkivmelding> lagretArkivmeldinger)
{
var sokeResultatUtvidet = new Sokeresultat()
{
Expand All @@ -113,19 +119,82 @@ public static Sokeresultat CreateSokeResultatUtvidet(Respons sokRespons)
Tidspunkt = DateTime.Now
};

switch (sokRespons)
switch (sok.Respons)
{
case Respons.Mappe:
AddMappeResultatUtvidet(sokeResultatUtvidet);
AddMappeResultatUtvidet(sokeResultatUtvidet, lagretArkivmeldinger);
break;
case Respons.Saksmappe:
AddSaksmappeResultatUtvidet(sokeResultatUtvidet);
AddSaksmappeResultatUtvidet(sokeResultatUtvidet, lagretArkivmeldinger);
break;
case Respons.Journalpost:
AddJournalpostResultatUtvidet(sok, sokeResultatUtvidet, lagretArkivmeldinger);
break;
}
return sokeResultatUtvidet;
}

private static void AddSaksmappeResultatUtvidet(Sokeresultat sokeResultatUtvidet)
private void AddJournalpostResultatUtvidet(Sok sok, Sokeresultat sokeResultatUtvidet,
List<Arkivmelding> lagretArkivmeldinger)
{
var count = 0;
if (lagretArkivmeldinger != null && lagretArkivmeldinger.Count > 0)
{
foreach (var parameter in sok.Parameter)
{
if (parameter.Felt == SokFelt.RegistreringTittel)
{
foreach (var lagretArkivmelding in lagretArkivmeldinger)
{
foreach (var registrering in lagretArkivmelding.Registrering)
{
if (parameter.Operator == OperatorType.Equal)
{
if (registrering.Tittel.ToLower().Contains(parameter.Parameterverdier.Stringvalues[0].ToLower().Replace("*", string.Empty)))
{
// Funnet!
Console.Out.WriteLineAsync("FUNNET!!!!!!!!!!!!!!!!!!!!");
count++;
var jp = (KS.Fiks.Arkiv.Models.V1.Arkivering.Arkivmelding.Journalpost) registrering;
sokeResultatUtvidet.ResultatListe.Add(new Resultat()
{
Journalpost = new Journalpost()
{
Arkivdel = jp.Arkivdel,
Tittel = jp.Tittel,
OpprettetDato = jp.OpprettetDato,
OpprettetAv = jp.OpprettetAv,
SystemID = jp.SystemID,
ArkivertAv = jp.ArkivertAv,
ArkivertDato = jp.ArkivertDato,
AntallVedlegg = jp.AntallVedlegg,
Journalstatus = new Journalstatus() { Beskrivelse = "", KodeProperty = ""},
Journalposttype = new Journalposttype() {Beskrivelse = "", KodeProperty = ""},
Journalpostnummer = jp.Journalpostnummer ?? "1",
Journalaar = jp.Journalaar ?? DateTime.Now.Year.ToString(),
Journalsekvensnummer = jp.Journalsekvensnummer ?? "1",
Journaldato = jp.Journaldato,
ReferanseEksternNoekkel = new EksternNoekkel()
{
Fagsystem = jp.ReferanseEksternNoekkel.Fagsystem,
Noekkel = jp.ReferanseEksternNoekkel.Noekkel
}
}
});
}
}
}
}
}
}
}

sokeResultatUtvidet.Count = count;
}


private void AddSaksmappeResultatUtvidet(Sokeresultat sokeResultatUtvidet,
List<Arkivmelding> lagretArkivmeldinger)
{
sokeResultatUtvidet.ResultatListe.Add(
new Resultat()
Expand Down Expand Up @@ -176,7 +245,7 @@ private static void AddSaksmappeResultatUtvidet(Sokeresultat sokeResultatUtvidet
});
}

private static void AddMappeResultatUtvidet(Sokeresultat sokeResultatUtvidet)
private void AddMappeResultatUtvidet(Sokeresultat sokeResultatUtvidet, List<Arkivmelding> lagretArkivmeldinger)
{
sokeResultatUtvidet.ResultatListe.Add(
new Resultat()
Expand Down Expand Up @@ -209,7 +278,7 @@ private static void AddMappeResultatUtvidet(Sokeresultat sokeResultatUtvidet)
});
}

public static SokeresultatNoekler CreateSokeResultatNoekler()
public SokeresultatNoekler CreateSokeResultatNoekler()
{
var sokeResultatNoekler = new SokeresultatNoekler()
{
Expand Down
Loading