|
@@ -1,19 +1,27 @@
|
|
|
package org.jeecg.modules.medical.ruleengine;
|
|
package org.jeecg.modules.medical.ruleengine;
|
|
|
|
|
|
|
|
import cn.hutool.core.collection.CollectionUtil;
|
|
import cn.hutool.core.collection.CollectionUtil;
|
|
|
|
|
+import com.alibaba.fastjson.JSON;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.apache.commons.lang.StringUtils;
|
|
import org.apache.commons.lang.StringUtils;
|
|
|
import org.jeecg.common.api.vo.Result;
|
|
import org.jeecg.common.api.vo.Result;
|
|
|
import org.jeecg.common.constant.CommonConstant;
|
|
import org.jeecg.common.constant.CommonConstant;
|
|
|
|
|
+import org.jeecg.common.util.DateUtils;
|
|
|
import org.jeecg.modules.medical.Constant;
|
|
import org.jeecg.modules.medical.Constant;
|
|
|
|
|
+import org.jeecg.modules.medical.entity.AdviceDetailsVO;
|
|
|
|
|
+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;
|
|
|
import org.jeecg.modules.medical.entity.MedicalInsRuleProject;
|
|
import org.jeecg.modules.medical.entity.MedicalInsRuleProject;
|
|
|
import org.jeecg.modules.medical.entity.MidIncidentAudit;
|
|
import org.jeecg.modules.medical.entity.MidIncidentAudit;
|
|
|
|
|
+import org.jeecg.modules.medical.entity.MidIncidentAuditDiagnose;
|
|
|
|
|
+import org.jeecg.modules.medical.entity.MidIncidentVisitDetailLog;
|
|
|
|
|
+import org.jeecg.modules.medical.entity.MidIncidentVisitLog;
|
|
|
import org.jeecg.modules.medical.entity.MidIncidentWarningVO;
|
|
import org.jeecg.modules.medical.entity.MidIncidentWarningVO;
|
|
|
import org.jeecg.modules.medical.entity.RuleAttr;
|
|
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.plugin.InterfItemListPlugin;
|
|
import org.jeecg.modules.medical.ruleengine.plugin.InterfItemListPlugin;
|
|
|
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;
|
|
@@ -21,25 +29,32 @@ import org.jeecg.modules.medical.service.IFactorCondRelaService;
|
|
|
import org.jeecg.modules.medical.service.IFactorEnchanceService;
|
|
import org.jeecg.modules.medical.service.IFactorEnchanceService;
|
|
|
import org.jeecg.modules.medical.service.IMedicalInsRuleInfoService;
|
|
import org.jeecg.modules.medical.service.IMedicalInsRuleInfoService;
|
|
|
import org.jeecg.modules.medical.service.IMedicalInsRuleProjectService;
|
|
import org.jeecg.modules.medical.service.IMedicalInsRuleProjectService;
|
|
|
|
|
+import org.jeecg.modules.medical.service.IMidIncidentAuditDiagnoseService;
|
|
|
import org.jeecg.modules.medical.service.IMidIncidentAuditService;
|
|
import org.jeecg.modules.medical.service.IMidIncidentAuditService;
|
|
|
|
|
+import org.jeecg.modules.medical.service.IMidIncidentVisitDetailLogService;
|
|
|
|
|
+import org.jeecg.modules.medical.service.IMidIncidentVisitLogService;
|
|
|
import org.jeecg.modules.medical.service.IRuleAttrService;
|
|
import org.jeecg.modules.medical.service.IRuleAttrService;
|
|
|
import org.jeecg.modules.medical.service.IRuleFactorRelaService;
|
|
import org.jeecg.modules.medical.service.IRuleFactorRelaService;
|
|
|
|
|
+import org.jeecg.modules.message.websocket.WebSocket;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
-import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
|
|
|
|
import org.springframework.data.redis.core.RedisTemplate;
|
|
import org.springframework.data.redis.core.RedisTemplate;
|
|
|
import org.springframework.stereotype.Component;
|
|
import org.springframework.stereotype.Component;
|
|
|
|
|
|
|
|
import javax.annotation.PostConstruct;
|
|
import javax.annotation.PostConstruct;
|
|
|
|
|
+import java.math.BigDecimal;
|
|
|
|
|
+import java.text.ParseException;
|
|
|
import java.util.ArrayList;
|
|
import java.util.ArrayList;
|
|
|
import java.util.Date;
|
|
import java.util.Date;
|
|
|
import java.util.HashMap;
|
|
import java.util.HashMap;
|
|
|
|
|
+import java.util.HashSet;
|
|
|
import java.util.List;
|
|
import java.util.List;
|
|
|
import java.util.Map;
|
|
import java.util.Map;
|
|
|
|
|
+import java.util.Set;
|
|
|
import java.util.stream.Collectors;
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
|
|
@Slf4j
|
|
@Slf4j
|
|
|
@Component
|
|
@Component
|
|
|
-@ConditionalOnProperty(name = "module", havingValue = Constant.MODULE_RULEENGINE_NAME)
|
|
|
|
|
|
|
+//@ConditionalOnProperty(name = "module", havingValue = Constant.MODULE_RULEENGINE_NAME)
|
|
|
public class RuleEngine {
|
|
public class RuleEngine {
|
|
|
private List<MedicalInsRuleInfo> medicalInsRuleInfoList = new ArrayList();
|
|
private List<MedicalInsRuleInfo> medicalInsRuleInfoList = new ArrayList();
|
|
|
@Autowired
|
|
@Autowired
|
|
@@ -67,9 +82,23 @@ public class RuleEngine {
|
|
|
InterfItemListPlugin interfItemListPlugin;
|
|
InterfItemListPlugin interfItemListPlugin;
|
|
|
@Autowired
|
|
@Autowired
|
|
|
IMidIncidentAuditService midIncidentAuditService;
|
|
IMidIncidentAuditService midIncidentAuditService;
|
|
|
|
|
+ @Autowired
|
|
|
|
|
+ IMidIncidentAuditDiagnoseService midIncidentAuditDiagnoseService;
|
|
|
|
|
+ @Autowired
|
|
|
|
|
+ IMidIncidentVisitLogService midIncidentVisitLogService;
|
|
|
|
|
+ @Autowired
|
|
|
|
|
+ IMidIncidentVisitDetailLogService midIncidentVisitDetailLogService;
|
|
|
|
|
+ @Autowired
|
|
|
|
|
+ DictUtil dictUtil;
|
|
|
|
|
+ @Autowired
|
|
|
|
|
+ WebSocket webSocket;
|
|
|
|
|
|
|
|
public static ThreadLocal<MidIncidentWarningVO> midIncidentWarningVOThreadLocal = new ThreadLocal<>();
|
|
public static ThreadLocal<MidIncidentWarningVO> midIncidentWarningVOThreadLocal = new ThreadLocal<>();
|
|
|
|
|
|
|
|
|
|
+ public static Map<String, Set<Integer>> itemCodeAndRuleIdMap = new HashMap<>();
|
|
|
|
|
+ public static Map<String, List<RuleAttr>> interfRuleAttrList = new HashMap<>();
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
@PostConstruct
|
|
@PostConstruct
|
|
|
public void initMedicalInsRule() {
|
|
public void initMedicalInsRule() {
|
|
|
List<MedicalInsRuleInfo> medicalInsRuleInfoList = medicalInsRuleInfoService.lambdaQuery().eq(MedicalInsRuleInfo::getState, Constant.EFF_STATE).list();
|
|
List<MedicalInsRuleInfo> medicalInsRuleInfoList = medicalInsRuleInfoService.lambdaQuery().eq(MedicalInsRuleInfo::getState, Constant.EFF_STATE).list();
|
|
@@ -95,13 +124,32 @@ public class RuleEngine {
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
try {
|
|
try {
|
|
|
|
|
+
|
|
|
MemeryPageUtil.batchDeal(medicalInsRuleInfoIdList, 1000, pageDataList -> {
|
|
MemeryPageUtil.batchDeal(medicalInsRuleInfoIdList, 1000, pageDataList -> {
|
|
|
List<MedicalInsRuleProject> medicalInsRuleProjectList = medicalInsRuleProjectService.lambdaQuery().in(MedicalInsRuleProject::getMedicineInsRuleInfoId, pageDataList).list();
|
|
List<MedicalInsRuleProject> medicalInsRuleProjectList = medicalInsRuleProjectService.lambdaQuery().in(MedicalInsRuleProject::getMedicineInsRuleInfoId, pageDataList).list();
|
|
|
if (CollectionUtil.isNotEmpty(medicalInsRuleProjectList)) {
|
|
if (CollectionUtil.isNotEmpty(medicalInsRuleProjectList)) {
|
|
|
MedicalInsRuleProject medicalInsRuleProject = null;
|
|
MedicalInsRuleProject medicalInsRuleProject = null;
|
|
|
for (int index = 0; index < medicalInsRuleProjectList.size(); index++) {
|
|
for (int index = 0; index < medicalInsRuleProjectList.size(); index++) {
|
|
|
medicalInsRuleProject = medicalInsRuleProjectList.get(index);
|
|
medicalInsRuleProject = medicalInsRuleProjectList.get(index);
|
|
|
- setMIDProjectCodeToRedis(medicalInsRuleProject);
|
|
|
|
|
|
|
+ if (StringUtils.isNotBlank(medicalInsRuleProject.getProejctCode())) {
|
|
|
|
|
+ if (itemCodeAndRuleIdMap.containsKey(medicalInsRuleProject.getProejctCode())) {
|
|
|
|
|
+ itemCodeAndRuleIdMap.get(medicalInsRuleProject.getProejctCode()).add(medicalInsRuleProject.getMedicineInsRuleInfoId());
|
|
|
|
|
+ } else {
|
|
|
|
|
+ Set<Integer> ruleIdSet = new HashSet<>();
|
|
|
|
|
+ ruleIdSet.add(medicalInsRuleProject.getMedicineInsRuleInfoId());
|
|
|
|
|
+ itemCodeAndRuleIdMap.put(medicalInsRuleProject.getProejctCode(), ruleIdSet);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ if (StringUtils.isNotBlank(medicalInsRuleProject.getCorrelationProjectCode())) {
|
|
|
|
|
+ if (itemCodeAndRuleIdMap.containsKey(medicalInsRuleProject.getCorrelationProjectCode())) {
|
|
|
|
|
+ itemCodeAndRuleIdMap.get(medicalInsRuleProject.getCorrelationProjectCode()).add(medicalInsRuleProject.getMedicineInsRuleInfoId());
|
|
|
|
|
+ } else {
|
|
|
|
|
+ Set<Integer> ruleIdSet = new HashSet<>();
|
|
|
|
|
+ ruleIdSet.add(medicalInsRuleProject.getMedicineInsRuleInfoId());
|
|
|
|
|
+ itemCodeAndRuleIdMap.put(medicalInsRuleProject.getCorrelationProjectCode(), ruleIdSet);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+// setMIDProjectCodeToRedis(medicalInsRuleProject);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
});
|
|
});
|
|
@@ -109,6 +157,12 @@ public class RuleEngine {
|
|
|
log.error(e.getMessage(), e);
|
|
log.error(e.getMessage(), e);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ List<RuleAttr> ruleAttrList = ruleAttrService.list();
|
|
|
|
|
+ interfRuleAttrList = ruleAttrList.stream().collect(Collectors.groupingBy(RuleAttr::getInterfName));
|
|
|
|
|
+// for(Map.Entry<String,List<RuleAttr>> map : interfRuleAttrList.entrySet()){
|
|
|
|
|
+// redisTemplate.opsForValue().append(map.getKey(), JSON.toJSONString(map.getValue()));
|
|
|
|
|
+// }
|
|
|
|
|
+
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -126,31 +180,109 @@ public class RuleEngine {
|
|
|
|
|
|
|
|
public Integer getMIDMedicalId(String itemCode) {
|
|
public Integer getMIDMedicalId(String itemCode) {
|
|
|
Object medicineInsRuleId = redisTemplate.opsForHash().get(Constant.MEDICAL_RULE_CACHE_KEY, itemCode);
|
|
Object medicineInsRuleId = redisTemplate.opsForHash().get(Constant.MEDICAL_RULE_CACHE_KEY, itemCode);
|
|
|
|
|
+// redisTemplate.opsForSet().add(Constant.MEDICAL_RULE_CACHE_KEY)
|
|
|
if (null != medicineInsRuleId) {
|
|
if (null != medicineInsRuleId) {
|
|
|
return (Integer) medicineInsRuleId;
|
|
return (Integer) medicineInsRuleId;
|
|
|
}
|
|
}
|
|
|
return null;
|
|
return null;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- public Result dealMidInterfaceEngin(String intefName, Map<String, Object> paramMap, MidIncidentWarningVO midIncidentWarningVO) {
|
|
|
|
|
|
|
+ public Result dealMidInterfaceEngin(String intefName, Map<String, Object> paramMap, MidIncidentWarningVO midIncidentWarningVO, String ipStr) {
|
|
|
midIncidentWarningVOThreadLocal.set(midIncidentWarningVO);
|
|
midIncidentWarningVOThreadLocal.set(midIncidentWarningVO);
|
|
|
try {
|
|
try {
|
|
|
- List<RuleAttr> ruleAttrList = ruleAttrService.lambdaQuery().eq(RuleAttr::getInterfName, intefName).list();
|
|
|
|
|
- List<Integer> medicalInsRuleInfoIdList = getMedicalInsRuleInfoIdByIntef(intefName, paramMap, ruleAttrList);
|
|
|
|
|
|
|
+ List<RuleAttr> ruleAttrList = interfRuleAttrList.get(intefName);
|
|
|
|
|
+ if (null == ruleAttrList) {
|
|
|
|
|
+ return Result.error("接口:" + intefName + " 未配置 对应的规则属性");
|
|
|
|
|
+ }
|
|
|
|
|
+ dictUtil.transferMidIncidentWarningVO(midIncidentWarningVO);
|
|
|
List<Map<String, Object>> itemList = interfItemListPlugin.findProIntersection(paramMap, ruleAttrList);
|
|
List<Map<String, Object>> itemList = interfItemListPlugin.findProIntersection(paramMap, ruleAttrList);
|
|
|
|
|
|
|
|
|
|
+ MidIncidentAudit midIncidentAudit = insertMidWarning(midIncidentWarningVO);
|
|
|
|
|
+ insertLog(midIncidentWarningVO);
|
|
|
|
|
+ midIncidentAudit.setInterfName(intefName);
|
|
|
for (Map<String, Object> itemMap : itemList) {
|
|
for (Map<String, Object> itemMap : itemList) {
|
|
|
- runEngine(itemMap, medicalInsRuleInfoIdList);
|
|
|
|
|
|
|
+ Set<Integer> medicalInsRuleInfoIdList = itemCodeAndRuleIdMap.get(itemMap.get(Constant.MEDICAL_PROJECT_CODE_KEY));
|
|
|
|
|
+ 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);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ runEngine(itemMap, medicalInsRuleInfoIdList, midIncidentAudit, ipStr);
|
|
|
}
|
|
}
|
|
|
- }finally {
|
|
|
|
|
|
|
+ } finally {
|
|
|
midIncidentWarningVOThreadLocal.remove();
|
|
midIncidentWarningVOThreadLocal.remove();
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
return Result.ok();
|
|
return Result.ok();
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- public void insertMidWarning(){
|
|
|
|
|
- MidIncidentWarningVO midIncidentWarningVO = RuleEngine.midIncidentWarningVOThreadLocal.get();
|
|
|
|
|
|
|
+ public void insertLog(MidIncidentWarningVO midIncidentWarningVO) {
|
|
|
|
|
+ MidIncidentVisitLog midIncidentVisitLog = new MidIncidentVisitLog();
|
|
|
|
|
+ midIncidentVisitLog.setDoctorId(midIncidentWarningVO.getDoctor_code());
|
|
|
|
|
+ midIncidentVisitLog.setDoctorName(midIncidentWarningVO.getDoctor_name());
|
|
|
|
|
+ midIncidentVisitLog.setVisitNo(midIncidentWarningVO.getVisit_no());
|
|
|
|
|
+ midIncidentVisitLog.setPatientId(midIncidentWarningVO.getPatient_id());
|
|
|
|
|
+ midIncidentVisitLog.setPatientName(midIncidentWarningVO.getPatient_name());
|
|
|
|
|
+ if (CollectionUtil.isNotEmpty(midIncidentWarningVO.getDiagnoses())) {
|
|
|
|
|
+ midIncidentVisitLog.setDiagnoses(JSON.toJSONString(midIncidentWarningVO.getDiagnoses()));
|
|
|
|
|
+ }
|
|
|
|
|
+ midIncidentVisitLog.setDoctorAdviceNo(midIncidentWarningVO.getDoctor_advice_no());
|
|
|
|
|
+ try {
|
|
|
|
|
+ Date inHospDate = DateUtils.parseDate(midIncidentWarningVO.getIn_hosp_date(), "yyyyMMdd");
|
|
|
|
|
+ midIncidentVisitLog.setInHospDate(inHospDate);
|
|
|
|
|
+ } catch (ParseException e) {
|
|
|
|
|
+ log.error(e.getMessage(), e);
|
|
|
|
|
+ }
|
|
|
|
|
+ Date now = new Date(System.currentTimeMillis());
|
|
|
|
|
+ midIncidentVisitLog.setCreateTime(now);
|
|
|
|
|
+ midIncidentVisitLog.setMedicalDeptCode(midIncidentWarningVO.getMedical_dept_code());
|
|
|
|
|
+ midIncidentVisitLog.setMedicalDeptName(midIncidentWarningVO.getMedical_dept_name());
|
|
|
|
|
+ midIncidentVisitLog.setVisitType(midIncidentWarningVO.getVisit_type());
|
|
|
|
|
+ midIncidentVisitLogService.save(midIncidentVisitLog);
|
|
|
|
|
+ if (CollectionUtil.isNotEmpty(midIncidentWarningVO.getAdvice_details())) {
|
|
|
|
|
+ List<MidIncidentVisitDetailLog> midIncidentVisitDetailLogList = new ArrayList<>();
|
|
|
|
|
+ MidIncidentVisitDetailLog midIncidentVisitDetailLog = null;
|
|
|
|
|
+ for (AdviceDetailsVO adviceDetailsVO : midIncidentWarningVO.getAdvice_details()) {
|
|
|
|
|
+ midIncidentVisitDetailLog = new MidIncidentVisitDetailLog();
|
|
|
|
|
+ midIncidentVisitDetailLog.setAmount(new BigDecimal(adviceDetailsVO.getAmount()));
|
|
|
|
|
+ midIncidentVisitDetailLog.setCreateTime(now);
|
|
|
|
|
+ midIncidentVisitDetailLog.setMidIncidentVisitLogId(midIncidentVisitLog.getId());
|
|
|
|
|
+ midIncidentVisitDetailLog.setDoctorId(midIncidentVisitLog.getDoctorId());
|
|
|
|
|
+ midIncidentVisitDetailLog.setDoctorName(midIncidentVisitLog.getDoctorName());
|
|
|
|
|
+ midIncidentVisitDetailLog.setDoseDay(adviceDetailsVO.getDose_day());
|
|
|
|
|
+ midIncidentVisitDetailLog.setDoseForm(adviceDetailsVO.getDose_form());
|
|
|
|
|
+ midIncidentVisitDetailLog.setDoseUnit(adviceDetailsVO.getDose_unit());
|
|
|
|
|
+ midIncidentVisitDetailLog.setExpenseCategory(adviceDetailsVO.getExpense_category());
|
|
|
|
|
+ midIncidentVisitDetailLog.setVisitNo(midIncidentVisitLog.getVisitNo());
|
|
|
|
|
+ midIncidentVisitDetailLog.setVisitType(midIncidentVisitLog.getVisitType());
|
|
|
|
|
+ midIncidentVisitDetailLog.setInspectionSite(adviceDetailsVO.getInspection_site());
|
|
|
|
|
+ midIncidentVisitDetailLog.setInvoiceProject(adviceDetailsVO.getInvoice_project());
|
|
|
|
|
+ midIncidentVisitDetailLog.setMedicalInsuranceMark(adviceDetailsVO.getMedical_insurance_mark());
|
|
|
|
|
+ midIncidentVisitDetailLog.setMedicalNumber(adviceDetailsVO.getMedical_number());
|
|
|
|
|
+ midIncidentVisitDetailLog.setOrderType(adviceDetailsVO.getOrder_type());
|
|
|
|
|
+ midIncidentVisitDetailLog.setOrderCatalog(adviceDetailsVO.getOrder_catalog());
|
|
|
|
|
+ midIncidentVisitDetailLog.setSingleDoseNumber(adviceDetailsVO.getSingle_dose_number());
|
|
|
|
|
+ midIncidentVisitDetailLog.setSingleDoseUnit(adviceDetailsVO.getSingle_dose_unit());
|
|
|
|
|
+ midIncidentVisitDetailLog.setMedicalDeptCode(adviceDetailsVO.getMedical_project_code());
|
|
|
|
|
+ midIncidentVisitDetailLog.setMedicalProjectName(adviceDetailsVO.getMedical_project_name());
|
|
|
|
|
+ midIncidentVisitDetailLog.setTakeFrequence(adviceDetailsVO.getTake_frequence());
|
|
|
|
|
+ midIncidentVisitDetailLog.setMedicalSpecification(adviceDetailsVO.getMedical_specification());
|
|
|
|
|
+ midIncidentVisitDetailLog.setPrice(new BigDecimal(adviceDetailsVO.getPrice()));
|
|
|
|
|
+ midIncidentVisitDetailLog.setRecipeNo(adviceDetailsVO.getRecipe_no());
|
|
|
|
|
+ midIncidentVisitDetailLog.setUseDay(adviceDetailsVO.getUse_day());
|
|
|
|
|
+ midIncidentVisitDetailLog.setProjectType(adviceDetailsVO.getProject_type());
|
|
|
|
|
+ midIncidentVisitDetailLog.setProejctCode(adviceDetailsVO.getProject_code());
|
|
|
|
|
+ midIncidentVisitDetailLog.setProejctName(adviceDetailsVO.getProject_name());
|
|
|
|
|
+ midIncidentVisitDetailLogList.add(midIncidentVisitDetailLog);
|
|
|
|
|
+ }
|
|
|
|
|
+ midIncidentVisitDetailLogService.saveBatch(midIncidentVisitDetailLogList);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ public MidIncidentAudit insertMidWarning(MidIncidentWarningVO midIncidentWarningVO) {
|
|
|
MidIncidentAudit midIncidentAudit = new MidIncidentAudit();
|
|
MidIncidentAudit midIncidentAudit = new MidIncidentAudit();
|
|
|
midIncidentAudit.setMedicalDeptCode(midIncidentWarningVO.getMedical_dept_code());
|
|
midIncidentAudit.setMedicalDeptCode(midIncidentWarningVO.getMedical_dept_code());
|
|
|
midIncidentAudit.setMedicalDeptName(midIncidentWarningVO.getMedical_dept_name());
|
|
midIncidentAudit.setMedicalDeptName(midIncidentWarningVO.getMedical_dept_name());
|
|
@@ -164,12 +296,31 @@ public class RuleEngine {
|
|
|
midIncidentAudit.setPrescriptionNumber(midIncidentWarningVO.getDoctor_advice_no());
|
|
midIncidentAudit.setPrescriptionNumber(midIncidentWarningVO.getDoctor_advice_no());
|
|
|
midIncidentAudit.setNoticeType("事中预警");
|
|
midIncidentAudit.setNoticeType("事中预警");
|
|
|
midIncidentAuditService.save(midIncidentAudit);
|
|
midIncidentAuditService.save(midIncidentAudit);
|
|
|
|
|
+ if (CollectionUtil.isNotEmpty(midIncidentWarningVO.getDiagnoses())) {
|
|
|
|
|
+ List<MidIncidentAuditDiagnose> midIncidentAuditDiagnoseList = new ArrayList<>();
|
|
|
|
|
+ for (DiagnosesVO diagnosesVO : midIncidentWarningVO.getDiagnoses()) {
|
|
|
|
|
+ MidIncidentAuditDiagnose midIncidentAuditDiagnose = new MidIncidentAuditDiagnose();
|
|
|
|
|
+ midIncidentAuditDiagnose.setMidIncidentAuditId(midIncidentAudit.getId());
|
|
|
|
|
+ midIncidentAuditDiagnose.setDiagnoseCode(diagnosesVO.getDiagnose_code());
|
|
|
|
|
+ midIncidentAuditDiagnose.setDiagnoseDesc(diagnosesVO.getDiagnose_desc());
|
|
|
|
|
+ midIncidentAuditDiagnose.setMedDiagnoseCode(diagnosesVO.getMedical_diagnose_code());
|
|
|
|
|
+ midIncidentAuditDiagnose.setMedDiagnoseDesc(diagnosesVO.getMedical_diagnose_name());
|
|
|
|
|
+ midIncidentAuditDiagnose.setCreateTime(date);
|
|
|
|
|
+ midIncidentAuditDiagnose.setOutpatientNumber(midIncidentWarningVO.getVisit_no());
|
|
|
|
|
+ midIncidentAuditDiagnose.setPrescriptionNumber(midIncidentWarningVO.getDoctor_advice_no());
|
|
|
|
|
+ midIncidentAuditDiagnoseList.add(midIncidentAuditDiagnose);
|
|
|
|
|
+ }
|
|
|
|
|
+ midIncidentAuditDiagnoseService.saveBatch(midIncidentAuditDiagnoseList);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ return midIncidentAudit;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
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<>();
|
|
|
-
|
|
|
|
|
|
|
+ Map<String, List<Integer>> itemCodeAndRuleIdMap = new HashMap<>();
|
|
|
for (RuleAttr ruleAttr : ruleAttrList) {
|
|
for (RuleAttr ruleAttr : ruleAttrList) {
|
|
|
String itemCode = null;
|
|
String itemCode = null;
|
|
|
if (StringUtils.isNotBlank(ruleAttr.getAttrPath())) {
|
|
if (StringUtils.isNotBlank(ruleAttr.getAttrPath())) {
|
|
@@ -223,7 +374,7 @@ public class RuleEngine {
|
|
|
*
|
|
*
|
|
|
* @param paramMap
|
|
* @param paramMap
|
|
|
*/
|
|
*/
|
|
|
- public void runEngine(Map<String, Object> paramMap, List<Integer> medicalInsRuleInfoIdList) {
|
|
|
|
|
|
|
+ public void runEngine(Map<String, Object> paramMap, Set<Integer> medicalInsRuleInfoIdList, MidIncidentAudit midIncidentAudit, String ipStr) {
|
|
|
LambdaQueryWrapper<RuleFactorRela> query = new LambdaQueryWrapper<RuleFactorRela>();
|
|
LambdaQueryWrapper<RuleFactorRela> query = new LambdaQueryWrapper<RuleFactorRela>();
|
|
|
query.eq(RuleFactorRela::getDelFlag, CommonConstant.DEL_FLAG_0);
|
|
query.eq(RuleFactorRela::getDelFlag, CommonConstant.DEL_FLAG_0);
|
|
|
query.in(RuleFactorRela::getMedicalInsRuleInfoId, medicalInsRuleInfoIdList);
|
|
query.in(RuleFactorRela::getMedicalInsRuleInfoId, medicalInsRuleInfoIdList);
|
|
@@ -240,18 +391,10 @@ public class RuleEngine {
|
|
|
MedicalInsRuleInfo medicalInsRuleInfo = medicalInsRuleInfoService.getById(medicalRuleInsInfoId);
|
|
MedicalInsRuleInfo medicalInsRuleInfo = medicalInsRuleInfoService.getById(medicalRuleInsInfoId);
|
|
|
List<FactorEnchance> factorEnchanceListTemp = enchanceTypeMap.get(medicalRuleInsInfoId);
|
|
List<FactorEnchance> factorEnchanceListTemp = enchanceTypeMap.get(medicalRuleInsInfoId);
|
|
|
|
|
|
|
|
- factorEnchangeFactory.runFactorEnchange(medicalRuleInsInfoId, medicalInsRuleInfo, paramMap, factorEnchangeIdList, factorEnchanceListTemp);
|
|
|
|
|
|
|
+ factorEnchangeFactory.runFactorEnchange(medicalRuleInsInfoId, medicalInsRuleInfo, midIncidentAudit, paramMap, factorEnchangeIdList, factorEnchanceListTemp);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- /**
|
|
|
|
|
- * 调用规则引擎之后需要异步通知websocket服务
|
|
|
|
|
- *
|
|
|
|
|
- * @param paramMap
|
|
|
|
|
- */
|
|
|
|
|
- public void sendEnginResultToWebSocket(Map<String, Object> paramMap) {
|
|
|
|
|
-
|
|
|
|
|
|
|
+ webSocket.pushMessage(ipStr, JSON.toJSONString(midIncidentAudit));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|