Initial fix
This commit is contained in:
parent
dc97c1ba02
commit
7a9514b94a
|
@ -134,6 +134,11 @@ public class MdmEidUpdateService {
|
||||||
ourLog.debug(theMessage);
|
ourLog.debug(theMessage);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void applySurvivorshipRulesAndSaveGoldenResource(IAnyResource theTargetResource, IAnyResource theGoldenResource, MdmTransactionContext theMdmTransactionContext) {
|
||||||
|
myMdmSurvivorshipService.applySurvivorshipRulesToGoldenResource(theTargetResource, theGoldenResource, theMdmTransactionContext);
|
||||||
|
myMdmResourceDaoSvc.upsertGoldenResource(theGoldenResource, theMdmTransactionContext.getResourceType());
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Data class to hold context surrounding an update operation for an MDM target.
|
* Data class to hold context surrounding an update operation for an MDM target.
|
||||||
*/
|
*/
|
||||||
|
@ -162,7 +167,7 @@ public class MdmEidUpdateService {
|
||||||
if (theExistingMatchLink.isPresent()) {
|
if (theExistingMatchLink.isPresent()) {
|
||||||
MdmLink mdmLink = theExistingMatchLink.get();
|
MdmLink mdmLink = theExistingMatchLink.get();
|
||||||
Long existingGoldenResourcePid = mdmLink.getGoldenResourcePid();
|
Long existingGoldenResourcePid = mdmLink.getGoldenResourcePid();
|
||||||
myExistingGoldenResource = myMdmResourceDaoSvc.readGoldenResourceByPid(new ResourcePersistentId(existingGoldenResourcePid), resourceType);
|
myExistingGoldenResource = myMdmResourceDaoSvc.readGoldenResourceByPid(new ResourcePersistentId(existingGoldenResourcePid), resourceType);
|
||||||
myRemainsMatchedToSameGoldenResource = candidateIsSameAsMdmLinkGoldenResource(mdmLink, theMatchedGoldenResourceCandidate);
|
myRemainsMatchedToSameGoldenResource = candidateIsSameAsMdmLinkGoldenResource(mdmLink, theMatchedGoldenResourceCandidate);
|
||||||
} else {
|
} else {
|
||||||
myRemainsMatchedToSameGoldenResource = false;
|
myRemainsMatchedToSameGoldenResource = false;
|
||||||
|
|
|
@ -46,6 +46,7 @@ import java.util.List;
|
||||||
*/
|
*/
|
||||||
@Service
|
@Service
|
||||||
public class MdmMatchLinkSvc {
|
public class MdmMatchLinkSvc {
|
||||||
|
|
||||||
private static final Logger ourLog = Logs.getMdmTroubleshootingLog();
|
private static final Logger ourLog = Logs.getMdmTroubleshootingLog();
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
|
@ -62,7 +63,7 @@ public class MdmMatchLinkSvc {
|
||||||
* or create one if one does not exist. Performs matching based on rules defined in mdm-rules.json.
|
* or create one if one does not exist. Performs matching based on rules defined in mdm-rules.json.
|
||||||
* Does nothing if resource is determined to be not managed by MDM.
|
* Does nothing if resource is determined to be not managed by MDM.
|
||||||
*
|
*
|
||||||
* @param theResource the incoming MDM source, which can be any supported MDM type.
|
* @param theResource the incoming MDM source, which can be any supported MDM type.
|
||||||
* @param theMdmTransactionContext
|
* @param theMdmTransactionContext
|
||||||
* @return an {@link TransactionLogMessages} which contains all informational messages related to MDM processing of this resource.
|
* @return an {@link TransactionLogMessages} which contains all informational messages related to MDM processing of this resource.
|
||||||
*/
|
*/
|
||||||
|
@ -130,20 +131,21 @@ public class MdmMatchLinkSvc {
|
||||||
myMdmLinkSvc.updateLink(newGoldenResource, theResource, MdmMatchOutcome.NEW_GOLDEN_RESOURCE_MATCH, MdmLinkSourceEnum.AUTO, theMdmTransactionContext);
|
myMdmLinkSvc.updateLink(newGoldenResource, theResource, MdmMatchOutcome.NEW_GOLDEN_RESOURCE_MATCH, MdmLinkSourceEnum.AUTO, theMdmTransactionContext);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void handleMdmCreate(IAnyResource theSourceResource, MatchedGoldenResourceCandidate theGoldenResourceCandidate, MdmTransactionContext theMdmTransactionContext) {
|
private void handleMdmCreate(IAnyResource theTargetResource, MatchedGoldenResourceCandidate theGoldenResourceCandidate, MdmTransactionContext theMdmTransactionContext) {
|
||||||
log(theMdmTransactionContext, "MDM has narrowed down to one candidate for matching.");
|
log(theMdmTransactionContext, "MDM has narrowed down to one candidate for matching.");
|
||||||
IAnyResource golenResource = myMdmGoldenResourceFindingSvc.getGoldenResourceFromMatchedGoldenResourceCandidate(theGoldenResourceCandidate, theMdmTransactionContext.getResourceType());
|
IAnyResource goldenResource = myMdmGoldenResourceFindingSvc.getGoldenResourceFromMatchedGoldenResourceCandidate(theGoldenResourceCandidate, theMdmTransactionContext.getResourceType());
|
||||||
|
|
||||||
if (myGoldenResourceHelper.isPotentialDuplicate(golenResource, theSourceResource)) {
|
if (myGoldenResourceHelper.isPotentialDuplicate(goldenResource, theTargetResource)) {
|
||||||
log(theMdmTransactionContext, "Duplicate detected based on the fact that both resources have different external EIDs.");
|
log(theMdmTransactionContext, "Duplicate detected based on the fact that both resources have different external EIDs.");
|
||||||
IAnyResource newGoldenResource = myGoldenResourceHelper.createGoldenResourceFromMdmSourceResource(theSourceResource, theMdmTransactionContext);
|
IAnyResource newGoldenResource = myGoldenResourceHelper.createGoldenResourceFromMdmSourceResource(theTargetResource, theMdmTransactionContext);
|
||||||
myMdmLinkSvc.updateLink(newGoldenResource, theSourceResource, MdmMatchOutcome.NEW_GOLDEN_RESOURCE_MATCH, MdmLinkSourceEnum.AUTO, theMdmTransactionContext);
|
myMdmLinkSvc.updateLink(newGoldenResource, theTargetResource, MdmMatchOutcome.NEW_GOLDEN_RESOURCE_MATCH, MdmLinkSourceEnum.AUTO, theMdmTransactionContext);
|
||||||
myMdmLinkSvc.updateLink(newGoldenResource, golenResource, MdmMatchOutcome.POSSIBLE_DUPLICATE, MdmLinkSourceEnum.AUTO, theMdmTransactionContext);
|
myMdmLinkSvc.updateLink(newGoldenResource, goldenResource, MdmMatchOutcome.POSSIBLE_DUPLICATE, MdmLinkSourceEnum.AUTO, theMdmTransactionContext);
|
||||||
} else {
|
} else {
|
||||||
if (theGoldenResourceCandidate.isMatch()) {
|
if (theGoldenResourceCandidate.isMatch()) {
|
||||||
myGoldenResourceHelper.handleExternalEidAddition(golenResource, theSourceResource, theMdmTransactionContext);
|
myGoldenResourceHelper.handleExternalEidAddition(goldenResource, theTargetResource, theMdmTransactionContext);
|
||||||
|
myEidUpdateService.applySurvivorshipRulesAndSaveGoldenResource(theTargetResource, goldenResource, theMdmTransactionContext);
|
||||||
}
|
}
|
||||||
myMdmLinkSvc.updateLink(golenResource, theSourceResource, theGoldenResourceCandidate.getMatchResult(), MdmLinkSourceEnum.AUTO, theMdmTransactionContext);
|
myMdmLinkSvc.updateLink(goldenResource, theTargetResource, theGoldenResourceCandidate.getMatchResult(), MdmLinkSourceEnum.AUTO, theMdmTransactionContext);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,25 @@
|
||||||
package ca.uhn.fhir.mdm.rules.matcher;
|
package ca.uhn.fhir.mdm.rules.matcher;
|
||||||
|
|
||||||
|
/*-
|
||||||
|
* #%L
|
||||||
|
* HAPI FHIR - Master Data Management
|
||||||
|
* %%
|
||||||
|
* Copyright (C) 2014 - 2021 Smile CDR, Inc.
|
||||||
|
* %%
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
* #L%
|
||||||
|
*/
|
||||||
|
|
||||||
import ca.uhn.fhir.context.FhirContext;
|
import ca.uhn.fhir.context.FhirContext;
|
||||||
import ca.uhn.fhir.util.ExtensionUtil;
|
import ca.uhn.fhir.util.ExtensionUtil;
|
||||||
import org.hl7.fhir.instance.model.api.IBase;
|
import org.hl7.fhir.instance.model.api.IBase;
|
||||||
|
|
Loading…
Reference in New Issue