From 94bca7e7f33989a87dfa5b3b14573f918b305f76 Mon Sep 17 00:00:00 2001 From: OZGCloud <ozgcloud@mgm-tp.com> Date: Fri, 19 Jul 2024 17:46:55 +0200 Subject: [PATCH] OZG-5636 [wip] use sub commands to send bescheid --- bescheid-manager/pom.xml | 2 +- .../bescheid/BescheidEventListener.java | 2 +- .../de/ozgcloud/bescheid/BescheidService.java | 64 ++++++++++++++----- .../attacheditem/AttachedItemService.java | 4 ++ .../bescheid/nachricht/NachrichtService.java | 2 +- .../bescheid/vorgang/VorgangService.java | 8 ++- .../bescheid/vorgang/VorgangServiceTest.java | 16 ++--- lombok.config | 3 +- vorgang-manager-server/pom.xml | 2 +- 9 files changed, 72 insertions(+), 31 deletions(-) diff --git a/bescheid-manager/pom.xml b/bescheid-manager/pom.xml index 27acb0c4f..0f7d64c45 100644 --- a/bescheid-manager/pom.xml +++ b/bescheid-manager/pom.xml @@ -17,7 +17,7 @@ <properties> <vorgang-manager.version>2.9.0</vorgang-manager.version> <nachrichten-manager.version>2.9.0</nachrichten-manager.version> - <api-lib.version>0.10.0</api-lib.version> + <api-lib.version>0.11.0-SNAPSHOT</api-lib.version> </properties> <dependencies> diff --git a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/BescheidEventListener.java b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/BescheidEventListener.java index 49fbce9be..ce03da91e 100644 --- a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/BescheidEventListener.java +++ b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/BescheidEventListener.java @@ -167,7 +167,7 @@ class BescheidEventListener { if (SendBy.MANUAL.hasValue(bescheidItem.getItem().get(Bescheid.FIELD_SEND_BY))) { service.sendBescheidManually(bescheidItem, command.getRelationVersion()); } else if (SendBy.NACHRICHT.hasValue(bescheidItem.getItem().get(Bescheid.FIELD_SEND_BY))) { - service.sendBescheidPostfachMail(bescheidItem, command.getRelationVersion()); + service.sendBescheidPostfachMail(bescheidItem, command); } else { throw new TechnicalException("Bescheid has unexpected sendBy value: '%s'. Allowed values are %s." .formatted(bescheidItem.getItem().get(Bescheid.FIELD_SEND_BY), diff --git a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/BescheidService.java b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/BescheidService.java index ffc2ece83..3e358b16a 100644 --- a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/BescheidService.java +++ b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/BescheidService.java @@ -1,5 +1,6 @@ package de.ozgcloud.bescheid; +import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.List; @@ -9,9 +10,14 @@ import jakarta.annotation.PostConstruct; import org.apache.commons.collections.MapUtils; import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.boot.info.BuildProperties; import org.springframework.stereotype.Service; +import de.ozgcloud.apilib.common.command.OzgCloudCommand; +import de.ozgcloud.apilib.common.command.OzgCloudCommandService; +import de.ozgcloud.apilib.common.command.OzgCloudCreateSubCommandsRequest; +import de.ozgcloud.apilib.common.command.grpc.CommandMapper; import de.ozgcloud.bescheid.attacheditem.AttachedItem; import de.ozgcloud.bescheid.attacheditem.AttachedItemService; import de.ozgcloud.bescheid.attributes.ClientAttributeService; @@ -20,6 +26,7 @@ import de.ozgcloud.bescheid.nachricht.NachrichtService; import de.ozgcloud.bescheid.vorgang.Vorgang; import de.ozgcloud.bescheid.vorgang.VorgangId; import de.ozgcloud.bescheid.vorgang.VorgangService; +import de.ozgcloud.command.Command; import de.ozgcloud.common.binaryfile.FileId; import de.ozgcloud.common.errorhandling.TechnicalException; import de.ozgcloud.document.Document; @@ -32,11 +39,16 @@ import lombok.extern.log4j.Log4j2; class BescheidService { private static final String ERROR_MESSAGE_NO_SERVICE = "No Bescheid Endpoint is configured."; + static final String VORGANG_BESCHEIDEN_ORDER = "VORGANG_BESCHEIDEN"; + static final String SUBCOMMANDS_EXECUTION_MODE = "PARALLEL"; private final VorgangService vorgangService; private final AttachedItemService attachedItemService; private final NachrichtService nachrichtService; private final UserProfileService currentUserService; + @Qualifier("bescheid_OzgCloudCommandService") + private final OzgCloudCommandService commandService; + private final CommandMapper commandMapper; private final ClientAttributeService bescheidClientAttributeService; private final BuildProperties buildProperties; private final Optional<BescheidRemoteService> remoteService; @@ -72,9 +84,10 @@ class BescheidService { } } - public void sendBescheidManually(AttachedItem bescheidItem, long version) { - validateBescheidSendManually(bescheidItem, version); - setBescheidSent(bescheidItem); + public void sendBescheidManually(AttachedItem bescheidItem, Command parentCommand) { + validateBescheidSendManually(bescheidItem, parentCommand.getRelationVersion()); + var subCommands = buildSendBescheidManuallySubCommands(bescheidItem); + setBescheidSent(bescheidItem, buildCreateSubCommandsRequest(parentCommand.getId(), subCommands)); } void validateBescheidSendManually(AttachedItem bescheidItem, long version) { @@ -85,11 +98,10 @@ class BescheidService { } } - public void sendBescheidPostfachMail(AttachedItem bescheidItem, long version) { - validateBescheidSendPostfach(bescheidItem, version); - var vorgang = vorgangService.getById(VorgangId.from(bescheidItem.getVorgangId())); - setBescheidSent(bescheidItem); - nachrichtService.sendNachricht(buildBescheid(bescheidItem, vorgang.getServiceKonto())); + public void sendBescheidPostfachMail(AttachedItem bescheidItem, Command parentCommand) { + validateBescheidSendPostfach(bescheidItem, parentCommand.getRelationVersion()); + var subCommands = buildSendBescheidPostfachMailSubCommands(bescheidItem); + setBescheidSent(bescheidItem, buildCreateSubCommandsRequest(parentCommand.getId(), subCommands)); } public void validateBescheidSendPostfach(AttachedItem bescheidItem, long version) { @@ -160,14 +172,34 @@ class BescheidService { return Collections.emptyList(); } - void setBescheidSent(AttachedItem bescheidItem) { - attachedItemService.setBescheidSentStatus(bescheidItem.getId(), bescheidItem.getVersion()); - try { - vorgangService.bescheiden(bescheidItem.getVorgangId()); - } catch (Exception e) { - attachedItemService.revertBescheidSendStatus(bescheidItem.getId(), bescheidItem.getVersion()); - throw e; - } + List<OzgCloudCommand> buildSendBescheidPostfachMailSubCommands(AttachedItem bescheidItem) { + var vorgang = vorgangService.getById(VorgangId.from(bescheidItem.getVorgangId())); + var commands = new ArrayList<>(buildSendBescheidSubCommands(bescheidItem, vorgang)); + commands.add(nachrichtService.buildSendBescheidCommand(buildBescheid(bescheidItem, vorgang.getServiceKonto()))); + return Collections.unmodifiableList(commands); + } + + List<OzgCloudCommand> buildSendBescheidManuallySubCommands(AttachedItem bescheidItem) { + var vorgang = vorgangService.getById(VorgangId.from(bescheidItem.getVorgangId())); + return buildSendBescheidSubCommands(bescheidItem, vorgang); + } + + List<OzgCloudCommand> buildSendBescheidSubCommands(AttachedItem bescheidItem, Vorgang vorgang) { + return List.of(vorgangService.buildVorgangBescheidenCommand(vorgang), + attachedItemService.buildSetBescheidSentStatusCommand(bescheidItem.getId(), bescheidItem.getVersion())) + } + + OzgCloudCreateSubCommandsRequest buildCreateSubCommandsRequest(String parentCommandId, List<OzgCloudCommand> subCommands) { + return OzgCloudCreateSubCommandsRequest.builder() + .parentId(parentCommandId) + .executionMode(SUBCOMMANDS_EXECUTION_MODE) + .completedIfSubsCompleted(true) + .subCommands(subCommands) + .build(); + } + + void setBescheidSent(AttachedItem bescheidItem, OzgCloudCreateSubCommandsRequest createSubCommandsRequest) { + commandService.addSubCommands(createSubCommandsRequest); setAntragBewilligung(bescheidItem); } diff --git a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/attacheditem/AttachedItemService.java b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/attacheditem/AttachedItemService.java index 180d95031..daff3a713 100644 --- a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/attacheditem/AttachedItemService.java +++ b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/attacheditem/AttachedItemService.java @@ -317,6 +317,10 @@ public class AttachedItemService { return itemMap; } + public OzgCloudCommand buildSetBescheidSentStatusCommand(String bescheidId, long bescheidVersion) { + return buildPatchBescheidCommand(bescheidId, bescheidVersion, buildBescheidSentStatusBodyObject(bescheidId)); + } + OzgCloudCommand buildPatchBescheidCommand(String bescheidId, long bescheidVersion, Map<String, Object> bodyObject) { return OzgCloudCommand.builder() .relationId(commandMapper.mapRelationId(bescheidId)) diff --git a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/nachricht/NachrichtService.java b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/nachricht/NachrichtService.java index ce261151d..8ccdfe96f 100644 --- a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/nachricht/NachrichtService.java +++ b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/nachricht/NachrichtService.java @@ -72,7 +72,7 @@ public class NachrichtService { commandService.createAndWaitUntilDone(buildSendBescheidCommand(bescheid)); } - OzgCloudCommand buildSendBescheidCommand(Bescheid bescheid) { + public OzgCloudCommand buildSendBescheidCommand(Bescheid bescheid) { return OzgCloudCommand.builder() .vorgangId(commandMapper.toOzgCloudVorgangId(bescheid.getVorgangId().toString())) .relationId(commandMapper.mapRelationId(bescheid.getVorgangId().toString())) diff --git a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/vorgang/VorgangService.java b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/vorgang/VorgangService.java index 09b366285..e185a33ad 100644 --- a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/vorgang/VorgangService.java +++ b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/vorgang/VorgangService.java @@ -31,10 +31,14 @@ public class VorgangService { } private void bescheiden(Vorgang vorgang) { - commandService.createAndWaitUntilDone(buildBescheidenCommand(vorgang)); + commandService.createAndWaitUntilDone(buildVorgangBescheidenCommand(vorgang)); } - OzgCloudCommand buildBescheidenCommand(Vorgang vorgang) { + public OzgCloudCommand buildVorgangBescheidenCommand(String vorgangId) { + return buildVorgangBescheidenCommand(getById(VorgangId.from(vorgangId))); + } + + public OzgCloudCommand buildVorgangBescheidenCommand(Vorgang vorgang) { return OzgCloudCommand.builder() .vorgangId(commandMapper.toOzgCloudVorgangId(vorgang.getId().toString())) .relationId(commandMapper.mapRelationId(vorgang.getId().toString())) diff --git a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/vorgang/VorgangServiceTest.java b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/vorgang/VorgangServiceTest.java index 424a43300..f40c75e0a 100644 --- a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/vorgang/VorgangServiceTest.java +++ b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/vorgang/VorgangServiceTest.java @@ -79,12 +79,12 @@ class VorgangServiceTest { void shouldCallBuildBescheidenCommand() { service.bescheiden(VorgangTestFactory.ID.toString()); - verify(service).buildBescheidenCommand(VORGANG); + verify(service).buildVorgangBescheidenCommand(VORGANG); } @Test void shouldCallCommandService() { - doReturn(ozgCloudCommand).when(service).buildBescheidenCommand(any()); + doReturn(ozgCloudCommand).when(service).buildVorgangBescheidenCommand(any()); service.bescheiden(VorgangTestFactory.ID.toString()); @@ -99,7 +99,7 @@ class VorgangServiceTest { @Test void shouldCallCommandMapperToOzgCloudVorgangId() { - service.buildBescheidenCommand(VORGANG); + service.buildVorgangBescheidenCommand(VORGANG); verify(commandMapper).toOzgCloudVorgangId(VorgangTestFactory.ID.toString()); } @@ -109,14 +109,14 @@ class VorgangServiceTest { var expectedId = OzgCloudVorgangId.from(VorgangTestFactory.ID.toString()); when(commandMapper.toOzgCloudVorgangId(any())).thenReturn(expectedId); - var result = service.buildBescheidenCommand(VORGANG); + var result = service.buildVorgangBescheidenCommand(VORGANG); assertThat(result.getVorgangId()).isEqualTo(expectedId); } @Test void shouldCallCommandMapperMapRelationId() { - service.buildBescheidenCommand(VORGANG); + service.buildVorgangBescheidenCommand(VORGANG); verify(commandMapper).mapRelationId(VorgangTestFactory.ID.toString()); } @@ -126,7 +126,7 @@ class VorgangServiceTest { var expectedId = GenericId.from(VorgangTestFactory.ID.toString()); when(commandMapper.mapRelationId(any())).thenReturn(expectedId); - var result = service.buildBescheidenCommand(VORGANG); + var result = service.buildVorgangBescheidenCommand(VORGANG); assertThat(result.getRelationId()).isEqualTo(expectedId); } @@ -135,7 +135,7 @@ class VorgangServiceTest { void shouldSetRelationVersion() { var expectedVersion = VORGANG.getVersion(); - var result = service.buildBescheidenCommand(VORGANG); + var result = service.buildVorgangBescheidenCommand(VORGANG); assertThat(result.getRelationVersion()).isEqualTo(expectedVersion); } @@ -144,7 +144,7 @@ class VorgangServiceTest { void shouldSetOrder() { var expectedOrder = VorgangService.VORGANG_BESCHEIDEN; - var result = service.buildBescheidenCommand(VORGANG); + var result = service.buildVorgangBescheidenCommand(VORGANG); assertThat(result.getOrder()).isEqualTo(expectedOrder); } diff --git a/lombok.config b/lombok.config index d07dd9b0e..a06fa130e 100644 --- a/lombok.config +++ b/lombok.config @@ -27,4 +27,5 @@ lombok.log.slf4j.flagUsage = ERROR lombok.log.log4j.flagUsage = ERROR lombok.data.flagUsage = ERROR lombok.nonNull.exceptionType = IllegalArgumentException -lombok.addLombokGeneratedAnnotation = true \ No newline at end of file +lombok.addLombokGeneratedAnnotation = true +lombok.copyableAnnotations += org.springframework.beans.factory.annotation.Qualifier \ No newline at end of file diff --git a/vorgang-manager-server/pom.xml b/vorgang-manager-server/pom.xml index c1c9559cf..3776798e2 100644 --- a/vorgang-manager-server/pom.xml +++ b/vorgang-manager-server/pom.xml @@ -53,7 +53,7 @@ <zufi-manager-interface.version>1.0.0</zufi-manager-interface.version> <user-manager-interface.version>2.1.0</user-manager-interface.version> - <bescheid-manager.version>1.14.1</bescheid-manager.version> + <bescheid-manager.version>1.15.0-SNAPSHOT</bescheid-manager.version> <processor-manager.version>0.4.1</processor-manager.version> <nachrichten-manager.version>2.9.0</nachrichten-manager.version> <ozgcloud-starter.version>0.10.0</ozgcloud-starter.version> -- GitLab