|
|
@@ -494,7 +494,7 @@ public class RuleEngine {
|
|
|
// MedicalInsRuleInfo medicalInsRuleInfo = medicalInsRuleInfoService.getById(medicalRuleInsInfoId);
|
|
|
MedicalInsRuleInfo medicalInsRuleInfo = allMedicalMap.get(medicalRuleInsInfoId);
|
|
|
paramMap.put(SystemEventAttrConstant.PRE_ADVANCEWARNINGAUDIT_ID_KEY, advanceWarningAudit.getId());
|
|
|
- runAdvanceWaringEngine(paramMap, medicalInsRuleInfo, advanceWarningAudit);
|
|
|
+ runAdvanceWaringEngine(paramMap, medicalInsRuleInfo, advanceWarningAudit, null);
|
|
|
}
|
|
|
|
|
|
sendJson.put("id", advanceWarningAudit.getId());
|
|
|
@@ -505,6 +505,29 @@ public class RuleEngine {
|
|
|
return Result.ok(sendJson);
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+ public void dealAfterAdvance(AfterIncidentLog afterIncidentLog,Map<String,Object> paramMap, List<Integer> ruleIdList, List<Map<String, Object>> itemList) {
|
|
|
+ if (CollectionUtil.isEmpty(ruleIdList)) {
|
|
|
+ log.error("事后提醒未配置对应的提醒规则");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ try {
|
|
|
+// String jsonStr = JSON.toJSONString(afterIncidentLog);
|
|
|
+// log.info("事后提醒接收报文:{}", jsonStr);
|
|
|
+// JSONObject paramMap = JSON.parseObject(jsonStr);
|
|
|
+ AfterwardsAudit afterwardsAudit = queryOrAddAfterWarning(afterIncidentLog);
|
|
|
+ for (Integer medicalRuleInsInfoId : ruleIdList) {
|
|
|
+ MedicalInsRuleInfo medicalInsRuleInfo = allMedicalMap.get(medicalRuleInsInfoId);
|
|
|
+ boolean auditFlag = runAdvanceWaringEngine(paramMap, medicalInsRuleInfo, afterwardsAudit, itemList);
|
|
|
+ if (Constant.VALIDATION_HANDER_METHOD_RETURN.equals(medicalInsRuleInfo.getViolationHandingMethod()) && auditFlag) {
|
|
|
+ log.info("提醒完成 入库完成 事后工单:{}", afterwardsAudit);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error(e.getMessage(), e);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 事前提醒接口
|
|
|
*
|
|
|
@@ -527,7 +550,7 @@ public class RuleEngine {
|
|
|
for (Integer medicalRuleInsInfoId : advanceWaringRuleIdList) {
|
|
|
MedicalInsRuleInfo medicalInsRuleInfo = medicalInsRuleInfoService.getById(medicalRuleInsInfoId);
|
|
|
paramMap.put(SystemEventAttrConstant.PRE_ADVANCEWARNINGAUDIT_ID_KEY, advanceWarningAudit.getId());
|
|
|
- runAdvanceWaringEngine(paramMap, medicalInsRuleInfo, advanceWarningAudit);
|
|
|
+ runAdvanceWaringEngine(paramMap, medicalInsRuleInfo, advanceWarningAudit, null);
|
|
|
}
|
|
|
JSONObject sendJson = new JSONObject();
|
|
|
sendJson.put("id", advanceWarningAudit.getId());
|
|
|
@@ -845,14 +868,18 @@ public class RuleEngine {
|
|
|
* 把当前明细记录的主单下的所有项目编码设置到当前项目记录
|
|
|
*/
|
|
|
public void setItemCodeListToItemMap(List<Map<String, Object>> itemList, Map<String, Object> itemMap) {
|
|
|
- List<String> medicalProjectCodeList = new ArrayList<>();
|
|
|
+ Set<String> medicalProjectCodeList = new HashSet<>();
|
|
|
+ Set<String> medicalProjectNameList = new HashSet<>();
|
|
|
for (Map<String, Object> itemTempMap : itemList) {
|
|
|
Object medicalProjectCode = itemTempMap.get(SystemEventAttrConstant.MEDICAL_PROJECT_CODE_KEY);
|
|
|
+ Object medicalProjectName = itemTempMap.get(SystemEventAttrConstant.MEDICAL_PROJECT_NAME_KEY);
|
|
|
if (null != medicalProjectCode) {
|
|
|
medicalProjectCodeList.add(medicalProjectCode.toString());
|
|
|
+ medicalProjectNameList.add(medicalProjectName.toString());
|
|
|
}
|
|
|
}
|
|
|
- itemMap.put(SystemEventAttrConstant.MEDICAL_PROJECT_CODE_LSIT, medicalProjectCodeList);
|
|
|
+ itemMap.put(SystemEventAttrConstant.MEDICAL_PROJECT_NAME_LIST, new ArrayList<>(medicalProjectNameList));
|
|
|
+ itemMap.put(SystemEventAttrConstant.MEDICAL_PROJECT_CODE_LSIT, new ArrayList<>(medicalProjectCodeList));
|
|
|
}
|
|
|
|
|
|
|
|
|
@@ -1052,6 +1079,13 @@ public class RuleEngine {
|
|
|
return midIncidentAudit;
|
|
|
}
|
|
|
|
|
|
+ public AfterwardsAudit queryOrAddAfterWarning(AfterIncidentLog afterIncidentLog) {
|
|
|
+ List<AfterwardsAudit> afterwardsAuditList = afterwardsAuditService.lambdaQuery().eq(AfterwardsAudit::getPrescriptionNumber, afterIncidentLog.getDoctorAdviceNo()).list();
|
|
|
+ if (CollectionUtil.isEmpty(afterwardsAuditList)) {
|
|
|
+ return insertAfterWarning(afterIncidentLog);
|
|
|
+ }
|
|
|
+ return afterwardsAuditList.get(0);
|
|
|
+ }
|
|
|
|
|
|
public AfterwardsAudit insertAfterWarning(AfterIncidentLog afterIncidentLog) {
|
|
|
AfterwardsAudit afterwardsAudit = new AfterwardsAudit();
|
|
|
@@ -1106,25 +1140,33 @@ public class RuleEngine {
|
|
|
*
|
|
|
* @param paramMap
|
|
|
*/
|
|
|
- public void runAdvanceWaringEngine(Map<String, Object> paramMap, MedicalInsRuleInfo medicalInsRuleInfo, Object audit) {
|
|
|
+ public boolean runAdvanceWaringEngine(Map<String, Object> paramMap, MedicalInsRuleInfo medicalInsRuleInfo, Object audit, List<Map<String, Object>> itemList) {
|
|
|
if (null == medicalInsRuleInfo) {
|
|
|
log.error("未有对应的规则,接口数据:{}", paramMap);
|
|
|
- return;
|
|
|
+ return false;
|
|
|
}
|
|
|
Integer medicalRuleInsInfoId = medicalInsRuleInfo.getId();
|
|
|
List<RuleFactorRela> ruleFactorRelaList = ruleIdAndFatorEnchanceIdMap.get(medicalRuleInsInfoId);
|
|
|
List<FactorEnchance> factorEnchanceList = allEnchanceTypeMap.get(medicalRuleInsInfoId);
|
|
|
- try {
|
|
|
- paramMap.put(SystemEventAttrConstant.MEDICAL_INS_RULE_INFO_ID, medicalRuleInsInfoId);
|
|
|
- paramMap.put(SystemEventAttrConstant.MEDICAL_INS_RULE_INFO_CODE, medicalInsRuleInfo.getRuleCode());
|
|
|
- paramMap.put(SystemEventAttrConstant.MEDICAL_INS_RULE_INFO_NAME, medicalInsRuleInfo.getRuleName());
|
|
|
- paramMap.put(SystemEventAttrConstant.MEDICAL_INS_RULE_INFO_DESC, medicalInsRuleInfo.getDescription());
|
|
|
- factorEnchangeFactory.runFactorEnchange(medicalRuleInsInfoId, medicalInsRuleInfo, audit, paramMap, ruleFactorRelaList, factorEnchanceList, null);
|
|
|
- } catch (Exception e) {
|
|
|
- log.error(e.getMessage(), e);
|
|
|
+ if (CollectionUtil.isEmpty(factorEnchanceList)) {
|
|
|
+ log.error("提醒规则id:{} 对应的规则处理逻辑源表factor_enchance 数据丢失", medicalInsRuleInfo.getId());
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ if (CollectionUtil.isNotEmpty(ruleFactorRelaList)) {
|
|
|
+ try {
|
|
|
+ paramMap.put(SystemEventAttrConstant.MEDICAL_INS_RULE_INFO_ID, medicalRuleInsInfoId);
|
|
|
+ paramMap.put(SystemEventAttrConstant.MEDICAL_INS_RULE_INFO_CODE, medicalInsRuleInfo.getRuleCode());
|
|
|
+ paramMap.put(SystemEventAttrConstant.MEDICAL_INS_RULE_INFO_NAME, medicalInsRuleInfo.getRuleName());
|
|
|
+ paramMap.put(SystemEventAttrConstant.MEDICAL_INS_RULE_INFO_DESC, medicalInsRuleInfo.getDescription());
|
|
|
+ return factorEnchangeFactory.runFactorEnchange(medicalRuleInsInfoId, medicalInsRuleInfo, audit, paramMap, ruleFactorRelaList, factorEnchanceList, itemList);
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error(e.getMessage(), e);
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ log.error("提醒规则id:{} 未配置对应的规则逻辑", medicalInsRuleInfo.getId());
|
|
|
}
|
|
|
|
|
|
-
|
|
|
+ return false;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -1132,37 +1174,36 @@ public class RuleEngine {
|
|
|
*
|
|
|
* @param paramMap
|
|
|
*/
|
|
|
- public void runStatictisEngine(Map<String, Object> paramMap, MedicalInsRuleInfo medicalInsRuleInfo) {
|
|
|
+ public boolean runStatictisEngine(Map<String, Object> paramMap, MedicalInsRuleInfo medicalInsRuleInfo) {
|
|
|
if (null == medicalInsRuleInfo) {
|
|
|
log.error("未有对应的规则,接口数据:{}", paramMap);
|
|
|
- return;
|
|
|
+ return false;
|
|
|
}
|
|
|
- LambdaQueryWrapper<RuleFactorRela> query = new LambdaQueryWrapper<RuleFactorRela>();
|
|
|
- query.eq(RuleFactorRela::getDelFlag, CommonConstant.DEL_FLAG_0);
|
|
|
- query.eq(RuleFactorRela::getMedicalInsRuleInfoId, medicalInsRuleInfo.getId());
|
|
|
- query.orderByAsc(RuleFactorRela::getSeqNum);
|
|
|
- List<RuleFactorRela> ruleFactorRelaList = ruleFactorRelaService.list(query);
|
|
|
+ Integer medicalRuleInsInfoId = medicalInsRuleInfo.getId();
|
|
|
+ List<RuleFactorRela> ruleFactorRelaList = ruleIdAndFatorEnchanceIdMap.get(medicalRuleInsInfoId);
|
|
|
|
|
|
if (CollectionUtil.isNotEmpty(ruleFactorRelaList)) {
|
|
|
- Set<Integer> factorEnchangeIdList = ruleFactorRelaList.stream().map(RuleFactorRela::getFactorEnhanceId).collect(Collectors.toSet());
|
|
|
- List<FactorEnchance> factorEnchanceList = factorEnchanceService.listByIds(factorEnchangeIdList);
|
|
|
- Map<Integer, List<FactorEnchance>> enchanceTypeMap = factorEnchanceList.stream().collect(Collectors.groupingBy(FactorEnchance::getFactorCatalog));
|
|
|
- for (Integer medicalRuleInsInfoId : enchanceTypeMap.keySet()) {
|
|
|
- try {
|
|
|
- List<FactorEnchance> factorEnchanceListTemp = enchanceTypeMap.get(medicalRuleInsInfoId);
|
|
|
- paramMap.put(SystemEventAttrConstant.MEDICAL_INS_RULE_INFO_ID, medicalRuleInsInfoId);
|
|
|
- paramMap.put(SystemEventAttrConstant.MEDICAL_INS_RULE_INFO_CODE, medicalInsRuleInfo.getRuleCode());
|
|
|
- paramMap.put(SystemEventAttrConstant.MEDICAL_INS_RULE_INFO_NAME, medicalInsRuleInfo.getRuleName());
|
|
|
- boolean auditFlag = factorEnchangeFactory.runFactorEnchange(medicalRuleInsInfoId, medicalInsRuleInfo, null, paramMap, ruleFactorRelaList, factorEnchanceListTemp, null);
|
|
|
- if (Constant.VALIDATION_HANDER_METHOD_RETURN.equals(medicalInsRuleInfo.getViolationHandingMethod()) && auditFlag) {
|
|
|
- log.error("事后统计数据:{} 规则名:{} 触发诊断类规则,直接全金额,后续规则无需再跑", paramMap, medicalInsRuleInfo);
|
|
|
- return;
|
|
|
- }
|
|
|
- } catch (Exception e) {
|
|
|
- log.error(e.getMessage(), e);
|
|
|
+ try {
|
|
|
+ List<FactorEnchance> factorEnchanceListTemp = allEnchanceTypeMap.get(medicalRuleInsInfoId);
|
|
|
+ if (CollectionUtil.isEmpty(factorEnchanceListTemp)) {
|
|
|
+ log.error("提醒规则id:{} 对应的规则处理逻辑源表factor_enchance 数据丢失", medicalInsRuleInfo.getId());
|
|
|
+ return false;
|
|
|
}
|
|
|
+ paramMap.put(SystemEventAttrConstant.MEDICAL_INS_RULE_INFO_ID, medicalRuleInsInfoId);
|
|
|
+ paramMap.put(SystemEventAttrConstant.MEDICAL_INS_RULE_INFO_CODE, medicalInsRuleInfo.getRuleCode());
|
|
|
+ paramMap.put(SystemEventAttrConstant.MEDICAL_INS_RULE_INFO_NAME, medicalInsRuleInfo.getRuleName());
|
|
|
+ boolean auditFlag = factorEnchangeFactory.runFactorEnchange(medicalRuleInsInfoId, medicalInsRuleInfo, null, paramMap, ruleFactorRelaList, factorEnchanceListTemp, null);
|
|
|
+ return auditFlag;
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error(e.getMessage(), e);
|
|
|
}
|
|
|
+ } else {
|
|
|
+ log.error("该医保规则ID:{} 未有配置医保规则处理流程-请到规则配置页面进行配置", medicalRuleInsInfoId);
|
|
|
+ paramMap.put(Constant.SPEL_LOG, "该医保规则ID:" + medicalRuleInsInfoId + "未有配置医保规则处理流程-请到规则配置页面进行配置");
|
|
|
}
|
|
|
+
|
|
|
+ return false;
|
|
|
+
|
|
|
}
|
|
|
|
|
|
|
|
|
@@ -1179,6 +1220,10 @@ public class RuleEngine {
|
|
|
if (allEnchanceTypeMap.containsKey(medicalRuleInsInfoId)) {
|
|
|
MedicalInsRuleInfo medicalInsRuleInfo = allMedicalMap.get(medicalRuleInsInfoId);
|
|
|
List<FactorEnchance> factorEnchanceListTemp = allEnchanceTypeMap.get(medicalRuleInsInfoId);
|
|
|
+ if (CollectionUtil.isEmpty(factorEnchanceListTemp)) {
|
|
|
+ log.error("提醒规则id:{} 对应的规则处理逻辑源表factor_enchance 数据丢失", medicalInsRuleInfo.getId());
|
|
|
+ return false;
|
|
|
+ }
|
|
|
paramMap.put(SystemEventAttrConstant.MEDICAL_INS_RULE_INFO_ID, medicalRuleInsInfoId);
|
|
|
paramMap.put(SystemEventAttrConstant.MEDICAL_INS_RULE_INFO_CODE, medicalInsRuleInfo.getRuleCode());
|
|
|
paramMap.put(SystemEventAttrConstant.MEDICAL_INS_RULE_INFO_NAME, medicalInsRuleInfo.getRuleName());
|
|
|
@@ -1189,7 +1234,7 @@ public class RuleEngine {
|
|
|
return auditFlag;
|
|
|
} else {
|
|
|
log.error("该医保规则ID:{} 未有配置医保规则处理流程-请到规则配置页面进行配置", medicalRuleInsInfoId);
|
|
|
- paramMap.put(Constant.SPEL_LOG, "该医保规则ID:"+medicalRuleInsInfoId+"未有配置医保规则处理流程-请到规则配置页面进行配置");
|
|
|
+ paramMap.put(Constant.SPEL_LOG, "该医保规则ID:" + medicalRuleInsInfoId + "未有配置医保规则处理流程-请到规则配置页面进行配置");
|
|
|
}
|
|
|
return false;
|
|
|
}
|