From 5acb934553de1bfefd2de223150f3ce514033b2b Mon Sep 17 00:00:00 2001 From: Monobikash Das <43202165+MonobikashDas@users.noreply.github.com> Date: Thu, 26 Aug 2021 12:36:10 +0530 Subject: [PATCH] Merge pull request #1140 from MonobikashDas/1.1.4.6 (#1159) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit MOSIP-16638 : Ignore duplicate requests for same latest transaction i… Co-authored-by: Sasikumar Ganesan --- .../biodedupe/stage/BioDedupeProcessor.java | 36 +++++++++------ .../processor/core/constant/AbisConstant.java | 46 ++++++++++--------- .../packet/storage/utils/ABISHandlerUtil.java | 43 +++++++++++++---- 3 files changed, 81 insertions(+), 44 deletions(-) diff --git a/registration-processor/core-processor/registration-processor-bio-dedupe-stage/src/main/java/io/mosip/registration/processor/biodedupe/stage/BioDedupeProcessor.java b/registration-processor/core-processor/registration-processor-bio-dedupe-stage/src/main/java/io/mosip/registration/processor/biodedupe/stage/BioDedupeProcessor.java index 0084c20ee1d..b6d042dd0ff 100644 --- a/registration-processor/core-processor/registration-processor-bio-dedupe-stage/src/main/java/io/mosip/registration/processor/biodedupe/stage/BioDedupeProcessor.java +++ b/registration-processor/core-processor/registration-processor-bio-dedupe-stage/src/main/java/io/mosip/registration/processor/biodedupe/stage/BioDedupeProcessor.java @@ -166,6 +166,8 @@ public MessageDTO process(MessageDTO object, String stageName) { boolean isTransactionSuccessful = false; + boolean isDuplicateRequestForSameTransactionId = false; + InternalRegistrationStatusDto registrationStatusDto = new InternalRegistrationStatusDto(); try { registrationStatusDto = registrationStatusService.getRegistrationStatus(registrationId); @@ -202,6 +204,9 @@ && isValidCbeff(registrationId, registrationType)) { } + if (abisHandlerUtil.getPacketStatus(registrationStatusDto).equalsIgnoreCase(AbisConstant.DUPLICATE_FOR_SAME_TRANSACTION_ID)) + isDuplicateRequestForSameTransactionId = true; + registrationStatusDto.setRegistrationStageName(stageName); isTransactionSuccessful = true; @@ -275,22 +280,27 @@ && isValidCbeff(registrationId, registrationType)) { object.setInternalError(Boolean.TRUE); object.setIsValid(Boolean.FALSE); } finally { - registrationStatusDto - .setLatestTransactionTypeCode(RegistrationTransactionTypeCode.BIOGRAPHIC_VERIFICATION.toString()); - String moduleId = isTransactionSuccessful ? PlatformSuccessMessages.RPR_BIO_DEDUPE_SUCCESS.getCode() - : description.getCode(); - String moduleName = ModuleName.BIO_DEDUPE.name(); - registrationStatusService.updateRegistrationStatus(registrationStatusDto, moduleId, moduleName); + if (!isDuplicateRequestForSameTransactionId) { + registrationStatusDto + .setLatestTransactionTypeCode(RegistrationTransactionTypeCode.BIOGRAPHIC_VERIFICATION.toString()); + String moduleId = isTransactionSuccessful ? PlatformSuccessMessages.RPR_BIO_DEDUPE_SUCCESS.getCode() + : description.getCode(); + String moduleName = ModuleName.BIO_DEDUPE.name(); + registrationStatusService.updateRegistrationStatus(registrationStatusDto, moduleId, moduleName); - regProcLogger.info(LoggerFileConstant.SESSIONID.toString(), LoggerFileConstant.REGISTRATIONID.toString(), - registrationId, "BioDedupeProcessor::" + registrationStatusDto.getLatestTransactionStatusCode()); + regProcLogger.info(LoggerFileConstant.SESSIONID.toString(), LoggerFileConstant.REGISTRATIONID.toString(), + registrationId, "BioDedupeProcessor::" + registrationStatusDto.getLatestTransactionStatusCode()); + + String eventId = isTransactionSuccessful ? EventId.RPR_402.toString() : EventId.RPR_405.toString(); + String eventName = isTransactionSuccessful ? EventName.UPDATE.toString() : EventName.EXCEPTION.toString(); + String eventType = isTransactionSuccessful ? EventType.BUSINESS.toString() : EventType.SYSTEM.toString(); - String eventId = isTransactionSuccessful ? EventId.RPR_402.toString() : EventId.RPR_405.toString(); - String eventName = isTransactionSuccessful ? EventName.UPDATE.toString() : EventName.EXCEPTION.toString(); - String eventType = isTransactionSuccessful ? EventType.BUSINESS.toString() : EventType.SYSTEM.toString(); + auditLogRequestBuilder.createAuditRequestBuilder(description.getMessage(), eventId, eventName, eventType, + moduleId, moduleName, registrationId); + } else + regProcLogger.error(LoggerFileConstant.SESSIONID.toString(), LoggerFileConstant.REGISTRATIONID.toString(), + registrationId, "Duplicate request received for same latest transaction id. This will be ignored."); - auditLogRequestBuilder.createAuditRequestBuilder(description.getMessage(), eventId, eventName, eventType, - moduleId, moduleName, registrationId); } return object; } diff --git a/registration-processor/registration-processor-core/src/main/java/io/mosip/registration/processor/core/constant/AbisConstant.java b/registration-processor/registration-processor-core/src/main/java/io/mosip/registration/processor/core/constant/AbisConstant.java index 80f6ea1c6d5..576ef9ee9f6 100644 --- a/registration-processor/registration-processor-core/src/main/java/io/mosip/registration/processor/core/constant/AbisConstant.java +++ b/registration-processor/registration-processor-core/src/main/java/io/mosip/registration/processor/core/constant/AbisConstant.java @@ -1,22 +1,24 @@ -package io.mosip.registration.processor.core.constant; - -public interface AbisConstant { - - static final String IDENTIFY = "IDENTIFY"; - - static final String TYPE = "type"; - - static final String ALL = "all"; - - static final String UIN = "UIN"; - - static final String PRE_ABIS_IDENTIFICATION = "PRE_ABIS_IDENTIFICATION"; - - static final String POST_ABIS_IDENTIFICATION = "POST_ABIS_IDENTIFICATION"; - - static final String PROCESSED = "PROCESSED"; - - static final String RE_REGISTER = "RE-REGISTER"; - - -} +package io.mosip.registration.processor.core.constant; + +public interface AbisConstant { + + static final String IDENTIFY = "IDENTIFY"; + + static final String TYPE = "type"; + + static final String ALL = "all"; + + static final String UIN = "UIN"; + + static final String PRE_ABIS_IDENTIFICATION = "PRE_ABIS_IDENTIFICATION"; + + static final String POST_ABIS_IDENTIFICATION = "POST_ABIS_IDENTIFICATION"; + + static final String DUPLICATE_FOR_SAME_TRANSACTION_ID = "DUPLICATE_FOR_SAME_TRANSACTION_ID"; + + static final String PROCESSED = "PROCESSED"; + + static final String RE_REGISTER = "RE-REGISTER"; + + +} diff --git a/registration-processor/registration-processor-info-storage-service/src/main/java/io/mosip/registration/processor/packet/storage/utils/ABISHandlerUtil.java b/registration-processor/registration-processor-info-storage-service/src/main/java/io/mosip/registration/processor/packet/storage/utils/ABISHandlerUtil.java index 43d97a830ee..285a7dc66f6 100644 --- a/registration-processor/registration-processor-info-storage-service/src/main/java/io/mosip/registration/processor/packet/storage/utils/ABISHandlerUtil.java +++ b/registration-processor/registration-processor-info-storage-service/src/main/java/io/mosip/registration/processor/packet/storage/utils/ABISHandlerUtil.java @@ -5,9 +5,11 @@ import java.util.LinkedHashMap; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; import io.mosip.kernel.core.util.exception.JsonProcessingException; import io.mosip.registration.processor.core.constant.ProviderStageName; +import io.mosip.registration.processor.core.code.AbisStatusCode; import io.mosip.registration.processor.core.exception.PacketManagerException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -119,31 +121,54 @@ public List getUniqueRegIds(String registrationId, String registrationTy * @return the packet status */ public String getPacketStatus(InternalRegistrationStatusDto registrationStatusDto) { - if (getMatchedRegIds(registrationStatusDto.getRegistrationId()).isEmpty()) { + // get all identify requests for latest transaction id + List identifyRequests = getAllIdentifyRequest(registrationStatusDto.getRegistrationId()); + + // if there are no identify requests present + if (CollectionUtils.isEmpty(identifyRequests)) return AbisConstant.PRE_ABIS_IDENTIFICATION; - } - return AbisConstant.POST_ABIS_IDENTIFICATION; + // if there are unprocessed pending identify request for same transaction id then consider it as duplicate + else if (isIdentifyRequestsPendingForLatestTransactionId(identifyRequests)) + return AbisConstant.DUPLICATE_FOR_SAME_TRANSACTION_ID; + // else if all the identify requests processed for latest transaction id + else + return AbisConstant.POST_ABIS_IDENTIFICATION; } /** - * Gets the matched reg ids. + * This method returns all identify requests * * @param registrationId * the registration id * @return the matched reg ids */ - private List getMatchedRegIds(String registrationId) { + private List getAllIdentifyRequest(String registrationId) { String latestTransactionId = utilities.getLatestTransactionId(registrationId); List regBioRefIds = packetInfoDao.getAbisRefMatchedRefIdByRid(registrationId); - List abisRequestDtoList = new ArrayList<>(); - if (!regBioRefIds.isEmpty()) { - abisRequestDtoList = packetInfoManager.getInsertOrIdentifyRequest(regBioRefIds.get(0), latestTransactionId); + List abisRequestDtoList = packetInfoManager.getInsertOrIdentifyRequest(regBioRefIds.get(0), latestTransactionId); + if (!CollectionUtils.isEmpty(abisRequestDtoList)) { + return abisRequestDtoList.stream().filter(reqDto -> + reqDto.getRequestType().equalsIgnoreCase(AbisStatusCode.IDENTIFY.toString())).collect(Collectors.toList()); + } } - return abisRequestDtoList; + return null; + } + + /** + * This method returns all unprocessed identify requests + * + * @param identifyRequests + * @return + */ + private boolean isIdentifyRequestsPendingForLatestTransactionId(List identifyRequests) { + // check if any of the identify request is not processed for same transaction id + return identifyRequests.stream().filter( + identifyReq -> !identifyReq.getStatusCode().equalsIgnoreCase(AbisStatusCode.PROCESSED.toString())) + .findAny().isPresent(); } /**