|
@@ -12,6 +12,11 @@ import org.jeecg.common.util.DateUtils;
|
|
|
import org.jeecg.modules.medical.Constant;
|
|
import org.jeecg.modules.medical.Constant;
|
|
|
import org.jeecg.modules.medical.SystemEventAttrConstant;
|
|
import org.jeecg.modules.medical.SystemEventAttrConstant;
|
|
|
import org.jeecg.modules.medical.entity.AdviceDetailsVO;
|
|
import org.jeecg.modules.medical.entity.AdviceDetailsVO;
|
|
|
|
|
+import org.jeecg.modules.medical.entity.AfterIncidentDetailLog;
|
|
|
|
|
+import org.jeecg.modules.medical.entity.AfterIncidentLog;
|
|
|
|
|
+import org.jeecg.modules.medical.entity.AfterwardsAudit;
|
|
|
|
|
+import org.jeecg.modules.medical.entity.AfterwardsAuditDetail;
|
|
|
|
|
+import org.jeecg.modules.medical.entity.AfterwardsIncidentAuditDiagnose;
|
|
|
import org.jeecg.modules.medical.entity.DiagnosesVO;
|
|
import org.jeecg.modules.medical.entity.DiagnosesVO;
|
|
|
import org.jeecg.modules.medical.entity.FactorEnchance;
|
|
import org.jeecg.modules.medical.entity.FactorEnchance;
|
|
|
import org.jeecg.modules.medical.entity.MedicalInsRuleInfo;
|
|
import org.jeecg.modules.medical.entity.MedicalInsRuleInfo;
|
|
@@ -25,6 +30,9 @@ import org.jeecg.modules.medical.entity.RuleAttr;
|
|
|
import org.jeecg.modules.medical.entity.RuleFactorRela;
|
|
import org.jeecg.modules.medical.entity.RuleFactorRela;
|
|
|
import org.jeecg.modules.medical.ruleengine.dict.DictUtil;
|
|
import org.jeecg.modules.medical.ruleengine.dict.DictUtil;
|
|
|
import org.jeecg.modules.medical.ruleengine.plugin.InterfItemListPlugin;
|
|
import org.jeecg.modules.medical.ruleengine.plugin.InterfItemListPlugin;
|
|
|
|
|
+import org.jeecg.modules.medical.service.IAfterwardsAuditDetailService;
|
|
|
|
|
+import org.jeecg.modules.medical.service.IAfterwardsAuditService;
|
|
|
|
|
+import org.jeecg.modules.medical.service.IAfterwardsIncidentAuditDiagnoseService;
|
|
|
import org.jeecg.modules.medical.service.IEventAttrService;
|
|
import org.jeecg.modules.medical.service.IEventAttrService;
|
|
|
import org.jeecg.modules.medical.service.IFactorAttrRelaService;
|
|
import org.jeecg.modules.medical.service.IFactorAttrRelaService;
|
|
|
import org.jeecg.modules.medical.service.IFactorCondRelaService;
|
|
import org.jeecg.modules.medical.service.IFactorCondRelaService;
|
|
@@ -46,6 +54,7 @@ import javax.annotation.PostConstruct;
|
|
|
import java.math.BigDecimal;
|
|
import java.math.BigDecimal;
|
|
|
import java.text.ParseException;
|
|
import java.text.ParseException;
|
|
|
import java.util.ArrayList;
|
|
import java.util.ArrayList;
|
|
|
|
|
+import java.util.Arrays;
|
|
|
import java.util.Date;
|
|
import java.util.Date;
|
|
|
import java.util.HashMap;
|
|
import java.util.HashMap;
|
|
|
import java.util.HashSet;
|
|
import java.util.HashSet;
|
|
@@ -91,6 +100,12 @@ public class RuleEngine {
|
|
|
@Autowired
|
|
@Autowired
|
|
|
IMidIncidentVisitDetailLogService midIncidentVisitDetailLogService;
|
|
IMidIncidentVisitDetailLogService midIncidentVisitDetailLogService;
|
|
|
@Autowired
|
|
@Autowired
|
|
|
|
|
+ IAfterwardsAuditService afterwardsAuditService;
|
|
|
|
|
+ @Autowired
|
|
|
|
|
+ IAfterwardsAuditDetailService afterwardsAuditDetailService;
|
|
|
|
|
+ @Autowired
|
|
|
|
|
+ IAfterwardsIncidentAuditDiagnoseService afterwardsIncidentAuditDiagnoseService;
|
|
|
|
|
+ @Autowired
|
|
|
DictUtil dictUtil;
|
|
DictUtil dictUtil;
|
|
|
@Autowired
|
|
@Autowired
|
|
|
WebSocket webSocket;
|
|
WebSocket webSocket;
|
|
@@ -152,6 +167,10 @@ public class RuleEngine {
|
|
|
itemCodeAndRuleIdMap.put(medicalInsRuleProject.getCorrelationProjectCode(), ruleIdSet);
|
|
itemCodeAndRuleIdMap.put(medicalInsRuleProject.getCorrelationProjectCode(), ruleIdSet);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+// if(StringUtils.isNotBlank(medicalInsRuleProject.get)){
|
|
|
|
|
+//
|
|
|
|
|
+// }
|
|
|
// setMIDProjectCodeToRedis(medicalInsRuleProject);
|
|
// setMIDProjectCodeToRedis(medicalInsRuleProject);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
@@ -231,6 +250,47 @@ public class RuleEngine {
|
|
|
return Result.ok();
|
|
return Result.ok();
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+
|
|
|
|
|
+ public Result dealAfterInterfaceEngin(String intefName, AfterIncidentLog afterIncidentLog, AfterIncidentDetailLog afterIncidentDetailLog) {
|
|
|
|
|
+
|
|
|
|
|
+ try {
|
|
|
|
|
+ List<RuleAttr> ruleAttrList = interfRuleAttrList.get(intefName);
|
|
|
|
|
+ if (null == ruleAttrList) {
|
|
|
|
|
+ return Result.error("接口:" + intefName + " 未配置 对应的规则属性");
|
|
|
|
|
+ }
|
|
|
|
|
+ dictUtil.transferAfterIncidentWarning(afterIncidentDetailLog);
|
|
|
|
|
+ String jsonStr = JSON.toJSONString(afterIncidentDetailLog);
|
|
|
|
|
+ log.info("事后处理日志:{}", jsonStr);
|
|
|
|
|
+ JSONObject paramMap = JSON.parseObject(jsonStr);
|
|
|
|
|
+ List<Map<String, Object>> itemList = interfItemListPlugin.findProIntersection(paramMap, ruleAttrList);
|
|
|
|
|
+ AfterwardsAudit afterwardsAudit = insertAfterWarning(afterIncidentLog);
|
|
|
|
|
+// insertAfterWarning(afterwardsAudit);
|
|
|
|
|
+// midIncidentAudit.setInterfName(intefName);
|
|
|
|
|
+ Set<String> auditDetailSet = new HashSet<>();
|
|
|
|
|
+ for (Map<String, Object> itemMap : itemList) {
|
|
|
|
|
+ Set<Integer> medicalInsRuleInfoIdList = itemCodeAndRuleIdMap.get(itemMap.get(Constant.MEDICAL_PROJECT_CODE_KEY));
|
|
|
|
|
+ if (CollectionUtil.isEmpty(medicalInsRuleInfoIdList)) {
|
|
|
|
|
+ log.error("项目编码未匹配到对应的医保规则:{}", itemMap.get(Constant.MEDICAL_PROJECT_CODE_KEY));
|
|
|
|
|
+ continue;
|
|
|
|
|
+ }
|
|
|
|
|
+ Object diagnose = itemMap.get(Constant.MEDICAL_DIAGNOSE_CODE_KEY);
|
|
|
|
|
+ if (null != diagnose) {
|
|
|
|
|
+ //获取诊断编码配置的规则ID,加入需要执行的规则
|
|
|
|
|
+ Set<Integer> diagnoseMedicalInsRuleInfoIdList = itemCodeAndRuleIdMap.get(diagnose.toString());
|
|
|
|
|
+ if (CollectionUtil.isNotEmpty(diagnoseMedicalInsRuleInfoIdList)) {
|
|
|
|
|
+ medicalInsRuleInfoIdList.addAll(diagnoseMedicalInsRuleInfoIdList);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+// runAfterEngine(auditDetailSet, itemMap, medicalInsRuleInfoIdList, midIncidentAudit, ipStr);
|
|
|
|
|
+ }
|
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
|
+ log.error(e.getMessage(), e);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ return Result.ok();
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
public void insertLog(MidIncidentWarningVO midIncidentWarningVO) {
|
|
public void insertLog(MidIncidentWarningVO midIncidentWarningVO) {
|
|
|
MidIncidentVisitLog midIncidentVisitLog = new MidIncidentVisitLog();
|
|
MidIncidentVisitLog midIncidentVisitLog = new MidIncidentVisitLog();
|
|
|
midIncidentVisitLog.setDoctorId(midIncidentWarningVO.getDoctor_code());
|
|
midIncidentVisitLog.setDoctorId(midIncidentWarningVO.getDoctor_code());
|
|
@@ -334,6 +394,52 @@ public class RuleEngine {
|
|
|
return midIncidentAudit;
|
|
return midIncidentAudit;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+
|
|
|
|
|
+ public AfterwardsAudit insertAfterWarning(AfterIncidentLog afterIncidentLog) {
|
|
|
|
|
+ AfterwardsAudit afterwardsAudit = new AfterwardsAudit();
|
|
|
|
|
+ afterwardsAudit.setMedicalDeptCode(afterIncidentLog.getMedicalDeptCode());
|
|
|
|
|
+ afterwardsAudit.setMedicalDeptName(afterIncidentLog.getMedicalDeptName());
|
|
|
|
|
+ Date date = new Date(System.currentTimeMillis());
|
|
|
|
|
+ afterwardsAudit.setCreateTime(date);
|
|
|
|
|
+ afterwardsAudit.setDoctorName(afterIncidentLog.getDoctorName());
|
|
|
|
|
+ afterwardsAudit.setDoctorId(afterIncidentLog.getDoctorId());
|
|
|
|
|
+ afterwardsAudit.setPatientId(afterIncidentLog.getPatientId());
|
|
|
|
|
+ afterwardsAudit.setPatientName(afterIncidentLog.getPatientName());
|
|
|
|
|
+ afterwardsAudit.setTreatmentType(afterIncidentLog.getVisitType());
|
|
|
|
|
+ afterwardsAudit.setPrescriptionNumber(afterIncidentLog.getDoctorAdviceNo());
|
|
|
|
|
+ afterwardsAudit.setOutpatientNumber(afterIncidentLog.getVisitNo());
|
|
|
|
|
+ afterwardsAudit.setNoticeType("事后预警");
|
|
|
|
|
+ afterwardsAuditService.save(afterwardsAudit);
|
|
|
|
|
+ if (StringUtils.isNotBlank(afterIncidentLog.getDiagnoses())) {
|
|
|
|
|
+ List<String> diagonseCodeList = Arrays.asList(afterIncidentLog.getDiagnoses().split(","));
|
|
|
|
|
+// List<String> diagonseNameList = Arrays.asList(afterIncidentDetailLog.getDiagnose_desc().split(","));
|
|
|
|
|
+ List<AfterwardsIncidentAuditDiagnose> afterIncidentAuditDiagnoseList = new ArrayList<>();
|
|
|
|
|
+ for (int i = 0; i < diagonseCodeList.size(); i++) {
|
|
|
|
|
+ String diagonseCode = diagonseCodeList.get(i);
|
|
|
|
|
+// String diagonseName = diagonseNameList.get(i);
|
|
|
|
|
+// Object value = redisTemplate.opsForHash().get(Constant.HIS_MEDICAL_DICT_KEY, afterIncidentDetailLog.getDiagnose_code());
|
|
|
|
|
+ String medicalDiagonseCode = dictUtil.getMedicalDiagnoseCode(diagonseCode);
|
|
|
|
|
+ String medicalDiagnoseName = dictUtil.getMedicalDiagnoseName(medicalDiagonseCode);
|
|
|
|
|
+ AfterwardsIncidentAuditDiagnose afterIncidentAuditDiagnose = new AfterwardsIncidentAuditDiagnose();
|
|
|
|
|
+ afterIncidentAuditDiagnose.setAfterwardsAuditId(afterwardsAudit.getId());
|
|
|
|
|
+ afterIncidentAuditDiagnose.setDiagnoseCode(diagonseCode);
|
|
|
|
|
+// afterIncidentAuditDiagnose.setDiagnoseDesc(diagonseName);
|
|
|
|
|
+ afterIncidentAuditDiagnose.setMedDiagnoseCode(medicalDiagonseCode);
|
|
|
|
|
+ afterIncidentAuditDiagnose.setMedDiagnoseDesc(medicalDiagnoseName);
|
|
|
|
|
+ afterIncidentAuditDiagnose.setCreateTime(date);
|
|
|
|
|
+ afterIncidentAuditDiagnose.setOutpatientNumber(afterwardsAudit.getOutpatientNumber());
|
|
|
|
|
+ afterIncidentAuditDiagnose.setPrescriptionNumber(afterwardsAudit.getPrescriptionNumber());
|
|
|
|
|
+ afterIncidentAuditDiagnoseList.add(afterIncidentAuditDiagnose);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ afterwardsIncidentAuditDiagnoseService.saveBatch(afterIncidentAuditDiagnoseList);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ return afterwardsAudit;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
public List<Integer> getMedicalInsRuleInfoIdByIntef(String intefName, Map<String, Object> paramMap, List<RuleAttr> ruleAttrList) {
|
|
public List<Integer> getMedicalInsRuleInfoIdByIntef(String intefName, Map<String, Object> paramMap, List<RuleAttr> ruleAttrList) {
|
|
|
|
|
|
|
|
List<Integer> medicalIdList = new ArrayList<>();
|
|
List<Integer> medicalIdList = new ArrayList<>();
|
|
@@ -385,6 +491,45 @@ public class RuleEngine {
|
|
|
return medicalIdList;
|
|
return medicalIdList;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 事中跑批规则引擎
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param paramMap
|
|
|
|
|
+ */
|
|
|
|
|
+ public void runAfterEngine(Set<String> auditDetailSet, Map<String, Object> paramMap, Set<Integer> medicalInsRuleInfoIdList, MidIncidentAudit midIncidentAudit, String ipStr) {
|
|
|
|
|
+ if (CollectionUtil.isEmpty(medicalInsRuleInfoIdList)) {
|
|
|
|
|
+ log.error("未有对应的规则,接口数据:{}", paramMap);
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+ LambdaQueryWrapper<RuleFactorRela> query = new LambdaQueryWrapper<RuleFactorRela>();
|
|
|
|
|
+ query.eq(RuleFactorRela::getDelFlag, CommonConstant.DEL_FLAG_0);
|
|
|
|
|
+ query.in(RuleFactorRela::getMedicalInsRuleInfoId, medicalInsRuleInfoIdList);
|
|
|
|
|
+ query.orderByAsc(RuleFactorRela::getSeqNum);
|
|
|
|
|
+ List<RuleFactorRela> ruleFactorRelaList = ruleFactorRelaService.list(query);
|
|
|
|
|
+
|
|
|
|
|
+ if (CollectionUtil.isNotEmpty(ruleFactorRelaList)) {
|
|
|
|
|
+ Map<Integer, List<RuleFactorRela>> ruleIdAndFatorEnchanceIdMap = ruleFactorRelaList.stream().collect(Collectors.groupingBy(RuleFactorRela::getMedicalInsRuleInfoId));
|
|
|
|
|
+// Map<Integer, RuleFactorRela> factorEnchanceRuleIdMap = ruleFactorRelaList.stream().collect(Collectors.toMap(RuleFactorRela::getFactorEnhanceId, v -> v, (v1, v2) -> v1));
|
|
|
|
|
+ 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()) {
|
|
|
|
|
+ String auditDetailKeyStr = paramMap.get(Constant.MEDICAL_PROJECT_NAME_KEY) + "_" + medicalRuleInsInfoId;
|
|
|
|
|
+ if (auditDetailSet.contains(auditDetailKeyStr)) {
|
|
|
|
|
+ log.error("项目编码:{} 规则ID:{} 已经执行过规则引擎,此次忽略", paramMap.get(Constant.MEDICAL_PROJECT_NAME_KEY), medicalRuleInsInfoId);
|
|
|
|
|
+ continue;
|
|
|
|
|
+ }
|
|
|
|
|
+ auditDetailSet.add(auditDetailKeyStr);
|
|
|
|
|
+ MedicalInsRuleInfo medicalInsRuleInfo = medicalInsRuleInfoService.getById(medicalRuleInsInfoId);
|
|
|
|
|
+ List<FactorEnchance> factorEnchanceListTemp = enchanceTypeMap.get(medicalRuleInsInfoId);
|
|
|
|
|
+ paramMap.put(SystemEventAttrConstant.MEDICAL_INS_RULE_INFO_ID, medicalRuleInsInfoId);
|
|
|
|
|
+ List<RuleFactorRela> ruleFactorRelaSortList = ruleIdAndFatorEnchanceIdMap.get(medicalRuleInsInfoId);
|
|
|
|
|
+
|
|
|
|
|
+ factorEnchangeFactory.runFactorEnchange(medicalRuleInsInfoId, medicalInsRuleInfo, midIncidentAudit, paramMap, ruleFactorRelaSortList, factorEnchanceListTemp);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ webSocket.pushMessage(ipStr, JSON.toJSONString(midIncidentAudit));
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
* 事中跑批规则引擎
|
|
* 事中跑批规则引擎
|