|
|
@@ -3,8 +3,10 @@ package org.jeecg.modules.medical.ruleengine;
|
|
|
import cn.hutool.core.collection.CollectionUtil;
|
|
|
import cn.hutool.core.date.DateUtil;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.apache.commons.lang.StringUtils;
|
|
|
+import org.apache.poi.ss.formula.functions.Even;
|
|
|
import org.jeecg.common.constant.CommonConstant;
|
|
|
import org.jeecg.common.util.SpringContextUtils;
|
|
|
import org.jeecg.common.util.dynamic.db.DynamicDBUtil;
|
|
|
@@ -87,7 +89,7 @@ public class FactorEnchangeFactory {
|
|
|
}
|
|
|
|
|
|
|
|
|
- public boolean runFactorEnchange(Integer medicalInfoRuleInfoId, MedicalInsRuleInfo medicalInsRuleInfo, Object audit, Map<String, Object> localMap, List<RuleFactorRela> ruleFactorRelaList, List<FactorEnchance> factorEnchanceList) {
|
|
|
+ public boolean runFactorEnchange(Integer medicalInfoRuleInfoId, MedicalInsRuleInfo medicalInsRuleInfo, Object audit, Map<String, Object> localMap, List<RuleFactorRela> ruleFactorRelaList, List<FactorEnchance> factorEnchanceList,List<Map<String,Object>> itemList) {
|
|
|
Map<Integer, FactorEnchance> factorEnchanceMap = factorEnchanceList.stream().collect(Collectors.toMap(FactorEnchance::getId, v -> v, (v1, v2) -> v1));
|
|
|
boolean result = false;
|
|
|
for (RuleFactorRela ruleFactorRela : ruleFactorRelaList) {
|
|
|
@@ -122,7 +124,7 @@ public class FactorEnchangeFactory {
|
|
|
result = setLogicalExpressionResultByFactorEnchance(localMap, factorEnchance);
|
|
|
if (Constant.WARING_EVENT_ATTR_ID == factorEnchance.getEventAttrId()) {
|
|
|
if (result) {
|
|
|
- insertWarningDetail(localMap, medicalInsRuleInfo, audit);
|
|
|
+ insertWarningDetail(localMap, medicalInsRuleInfo, audit, itemList);
|
|
|
}
|
|
|
} else {
|
|
|
localMap.put(getParamName(factorEnchance.getEventAttrId()), result);
|
|
|
@@ -156,23 +158,68 @@ public class FactorEnchangeFactory {
|
|
|
return ioTypeMap;
|
|
|
}
|
|
|
|
|
|
- public void insertWarningDetail(Map<String, Object> itemMap, MedicalInsRuleInfo medicalInsRuleInfo, Object audit){
|
|
|
+ public void insertWarningDetail(Map<String, Object> itemMap, MedicalInsRuleInfo medicalInsRuleInfo, Object audit,List<Map<String,Object>> itemList){
|
|
|
if(audit instanceof MidIncidentAudit) {
|
|
|
MidIncidentAudit midIncidentAudit = (MidIncidentAudit) audit;
|
|
|
- insertMidWarningDetail(itemMap, medicalInsRuleInfo, midIncidentAudit);
|
|
|
+ insertMidWarningDetail(itemMap, medicalInsRuleInfo, midIncidentAudit, itemList);
|
|
|
}else{
|
|
|
AfterwardsAudit afterwardsAudit = (AfterwardsAudit) audit;
|
|
|
- insertAfterWarningDetail(itemMap, medicalInsRuleInfo, afterwardsAudit);
|
|
|
+ insertAfterWarningDetail(itemMap, medicalInsRuleInfo, afterwardsAudit, itemList);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- public void insertAfterWarningDetail(Map<String, Object> itemMap, MedicalInsRuleInfo medicalInsRuleInfo, AfterwardsAudit afterwardsAudit) {
|
|
|
- Double amount = (Double) itemMap.get(Constant.AMOUNT_KEY);
|
|
|
+ public void insertAfterWarningDetail(Map<String, Object> itemMap, MedicalInsRuleInfo medicalInsRuleInfo, AfterwardsAudit afterwardsAudit, List<Map<String,Object>> itemList) {
|
|
|
+
|
|
|
if(Constant.VALIDATION_HANDER_METHOD_RETURN.equals(medicalInsRuleInfo.getViolationHandingMethod())) {
|
|
|
afterwardsAuditService.lambdaUpdate().set(AfterwardsAudit::getAmount, afterwardsAudit.getAmount()).eq(AfterwardsAudit::getId, afterwardsAudit.getId()).update();
|
|
|
+ List<AfterwardsAuditDetail> afterwardsAuditDetailList = new ArrayList<>();
|
|
|
+ QueryWrapper queryWrapper = new QueryWrapper();
|
|
|
+ queryWrapper.eq("afterwards_audit_id", afterwardsAudit.getId());
|
|
|
+ afterwardsAuditDetailService.remove(queryWrapper);
|
|
|
+ Date date = new Date(System.currentTimeMillis());
|
|
|
+ for(Map<String,Object> otherMap : itemList){
|
|
|
+ AfterwardsAuditDetail afterwardsAuditDetail = new AfterwardsAuditDetail();
|
|
|
+ Double amount = (Double) otherMap.getOrDefault(Constant.AMOUNT_KEY, 0);
|
|
|
+ afterwardsAuditDetail.setAmount(new BigDecimal(amount));
|
|
|
+ afterwardsAuditDetail.setProejctCode(otherMap.get(Constant.PROJECT_CODE_KEY).toString());
|
|
|
+ afterwardsAuditDetail.setProejctName(otherMap.get(Constant.PROJECT_NAME_KEY).toString());
|
|
|
+ afterwardsAuditDetail.setMedicalProjectCode(otherMap.get(Constant.MEDICAL_PROJECT_CODE_KEY).toString());
|
|
|
+ afterwardsAuditDetail.setMedicalProjectName(otherMap.get(Constant.MEDICAL_PROJECT_NAME_KEY).toString());
|
|
|
+ afterwardsAuditDetail.setProjectType(otherMap.getOrDefault(Constant.PROJECT_TYPE_KEY, "default").toString());
|
|
|
+ afterwardsAuditDetail.setMedicalDeptCode(afterwardsAudit.getMedicalDeptCode());
|
|
|
+ afterwardsAuditDetail.setMedicalDeptName(afterwardsAudit.getMedicalDeptName());
|
|
|
+
|
|
|
+ afterwardsAuditDetail.setCreateTime(date);
|
|
|
+ afterwardsAuditDetail.setDoctorName(afterwardsAudit.getDoctorName());
|
|
|
+ afterwardsAuditDetail.setDoctorId(afterwardsAudit.getDoctorId());
|
|
|
+ afterwardsAuditDetail.setPatientId(afterwardsAudit.getPatientId());
|
|
|
+ afterwardsAuditDetail.setPatientName(afterwardsAudit.getPatientName());
|
|
|
+ afterwardsAuditDetail.setTreatmentType(medicalInsRuleInfo.getTreatmentType());
|
|
|
+ afterwardsAuditDetail.setNoticeType("事后预警");
|
|
|
+ afterwardsAuditDetail.setMedicalInsRuleInfoCode(medicalInsRuleInfo.getRuleCode());
|
|
|
+ afterwardsAuditDetail.setMedicalInsRuleInfoId(medicalInsRuleInfo.getId());
|
|
|
+ afterwardsAuditDetail.setMedicalInsRuleInfoName(medicalInsRuleInfo.getRuleName());
|
|
|
+ afterwardsAuditDetail.setDescription(medicalInsRuleInfo.getDescription());
|
|
|
+ afterwardsAuditDetail.setOutpatientNumber(afterwardsAudit.getOutpatientNumber());
|
|
|
+ afterwardsAuditDetail.setPrescriptionNumber(afterwardsAudit.getPrescriptionNumber());
|
|
|
+
|
|
|
+ afterwardsAuditDetail.setViolationLevel(medicalInsRuleInfo.getViolationLevel());
|
|
|
+ afterwardsAuditDetail.setTreatmentType(medicalInsRuleInfo.getTreatmentType());
|
|
|
+ afterwardsAuditDetail.setAfterwardsAuditId(afterwardsAudit.getId());
|
|
|
+ afterwardsAuditDetailList.add(afterwardsAuditDetail);
|
|
|
+
|
|
|
+ }
|
|
|
+ afterwardsAuditDetailService.saveBatch(afterwardsAuditDetailList);
|
|
|
}else {
|
|
|
-// MidIncidentWarningVO midIncidentWarningVO = RuleEngine.midIncidentWarningVOThreadLocal.get();
|
|
|
+ Double amount = (Double) itemMap.getOrDefault(Constant.AMOUNT_KEY, 0);
|
|
|
AfterwardsAuditDetail afterwardsAuditDetail = new AfterwardsAuditDetail();
|
|
|
+ afterwardsAuditDetail.setProejctCode(itemMap.get(Constant.PROJECT_CODE_KEY).toString());
|
|
|
+ afterwardsAuditDetail.setProejctName(itemMap.get(Constant.PROJECT_NAME_KEY).toString());
|
|
|
+ afterwardsAuditDetail.setMedicalProjectCode(itemMap.get(Constant.MEDICAL_PROJECT_CODE_KEY).toString());
|
|
|
+ afterwardsAuditDetail.setMedicalProjectName(itemMap.get(Constant.MEDICAL_PROJECT_NAME_KEY).toString());
|
|
|
+ afterwardsAuditDetail.setProjectType(itemMap.getOrDefault(Constant.PROJECT_TYPE_KEY, "default").toString());
|
|
|
+ afterwardsAuditDetail.setAmount(new BigDecimal(amount));
|
|
|
+
|
|
|
afterwardsAuditDetail.setMedicalDeptCode(afterwardsAudit.getMedicalDeptCode());
|
|
|
afterwardsAuditDetail.setMedicalDeptName(afterwardsAudit.getMedicalDeptName());
|
|
|
Date date = new Date(System.currentTimeMillis());
|
|
|
@@ -187,32 +234,65 @@ public class FactorEnchangeFactory {
|
|
|
afterwardsAuditDetail.setMedicalInsRuleInfoId(medicalInsRuleInfo.getId());
|
|
|
afterwardsAuditDetail.setMedicalInsRuleInfoName(medicalInsRuleInfo.getRuleName());
|
|
|
afterwardsAuditDetail.setDescription(medicalInsRuleInfo.getDescription());
|
|
|
- afterwardsAuditDetail.setProejctCode(itemMap.get(Constant.PROJECT_CODE_KEY).toString());
|
|
|
- afterwardsAuditDetail.setProejctName(itemMap.get(Constant.PROJECT_NAME_KEY).toString());
|
|
|
- afterwardsAuditDetail.setMedicalProjectCode(itemMap.get(Constant.MEDICAL_PROJECT_CODE_KEY).toString());
|
|
|
- afterwardsAuditDetail.setMedicalProjectName(itemMap.get(Constant.MEDICAL_PROJECT_NAME_KEY).toString());
|
|
|
afterwardsAuditDetail.setOutpatientNumber(afterwardsAudit.getOutpatientNumber());
|
|
|
afterwardsAuditDetail.setPrescriptionNumber(afterwardsAudit.getPrescriptionNumber());
|
|
|
- afterwardsAuditDetail.setProjectType(itemMap.getOrDefault(Constant.PROJECT_TYPE_KEY, "default").toString());
|
|
|
+
|
|
|
afterwardsAuditDetail.setViolationLevel(medicalInsRuleInfo.getViolationLevel());
|
|
|
afterwardsAuditDetail.setTreatmentType(medicalInsRuleInfo.getTreatmentType());
|
|
|
afterwardsAuditDetail.setAfterwardsAuditId(afterwardsAudit.getId());
|
|
|
- afterwardsAuditDetail.setAmount(new BigDecimal(amount));
|
|
|
+
|
|
|
afterwardsAuditService.lambdaUpdate().setSql("amount +"+amount).eq(AfterwardsAudit::getId, afterwardsAudit.getId()).update();
|
|
|
afterwardsAuditDetailService.save(afterwardsAuditDetail);
|
|
|
}
|
|
|
|
|
|
|
|
|
+
|
|
|
}
|
|
|
|
|
|
- public void insertMidWarningDetail(Map<String, Object> itemMap, MedicalInsRuleInfo medicalInsRuleInfo, MidIncidentAudit midIncidentAudit) {
|
|
|
+ public void insertMidWarningDetail(Map<String, Object> itemMap, MedicalInsRuleInfo medicalInsRuleInfo, MidIncidentAudit midIncidentAudit,List<Map<String,Object>> itemList) {
|
|
|
+ MidIncidentWarningVO midIncidentWarningVO = RuleEngine.midIncidentWarningVOThreadLocal.get();
|
|
|
|
|
|
- Double amount = (Double) itemMap.get(Constant.AMOUNT_KEY);
|
|
|
if(Constant.VALIDATION_HANDER_METHOD_RETURN.equals(medicalInsRuleInfo.getViolationHandingMethod())) {
|
|
|
midIncidentAuditService.lambdaUpdate().set(MidIncidentAudit::getAmount, midIncidentAudit.getAmount()).eq(MidIncidentAudit::getId, midIncidentAudit.getId()).update();
|
|
|
+ QueryWrapper<MidIncidentAuditDetail> queryWrapper = new QueryWrapper();
|
|
|
+ queryWrapper.eq("mid_incident_audit_id", midIncidentAudit.getId());
|
|
|
+ midIncidentAuditDetailService.remove(queryWrapper);
|
|
|
+ List<MidIncidentAuditDetail> otherList = new ArrayList();
|
|
|
+ for(Map<String,Object> otherItemMap : itemList){
|
|
|
+ MidIncidentAuditDetail midIncidentAuditDetail = new MidIncidentAuditDetail();
|
|
|
+ midIncidentAuditDetail.setMedicalDeptCode(midIncidentWarningVO.getMedical_dept_code());
|
|
|
+ midIncidentAuditDetail.setMedicalDeptName(midIncidentWarningVO.getMedical_dept_name());
|
|
|
+ Date date = new Date(System.currentTimeMillis());
|
|
|
+ midIncidentAuditDetail.setCreateTime(date);
|
|
|
+ midIncidentAuditDetail.setDoctorName(midIncidentWarningVO.getDoctor_name());
|
|
|
+ midIncidentAuditDetail.setDoctorId(midIncidentWarningVO.getDoctor_code());
|
|
|
+ midIncidentAuditDetail.setPatientId(midIncidentWarningVO.getPatient_id());
|
|
|
+ midIncidentAuditDetail.setPatientName(midIncidentWarningVO.getPatient_name());
|
|
|
+ midIncidentAuditDetail.setTreatmentType(medicalInsRuleInfo.getTreatmentType());
|
|
|
+ midIncidentAuditDetail.setNoticeType("事中预警");
|
|
|
+ midIncidentAuditDetail.setMedicalInsRuleInfoCode(medicalInsRuleInfo.getRuleCode());
|
|
|
+ midIncidentAuditDetail.setMedicalInsRuleInfoId(medicalInsRuleInfo.getId());
|
|
|
+ midIncidentAuditDetail.setMedicalInsRuleInfoName(medicalInsRuleInfo.getRuleName());
|
|
|
+ midIncidentAuditDetail.setDescription(medicalInsRuleInfo.getDescription());
|
|
|
+ midIncidentAuditDetail.setOutpatientNumber(midIncidentAudit.getOutpatientNumber());
|
|
|
+ midIncidentAuditDetail.setPrescriptionNumber(midIncidentAudit.getPrescriptionNumber());
|
|
|
+ midIncidentAuditDetail.setViolationLevel(medicalInsRuleInfo.getViolationLevel());
|
|
|
+ midIncidentAuditDetail.setTreatmentType(medicalInsRuleInfo.getTreatmentType());
|
|
|
+ midIncidentAuditDetail.setMidIncidentAuditId(midIncidentAudit.getId());
|
|
|
+ midIncidentAuditDetail.setProejctCode(otherItemMap.get(Constant.PROJECT_CODE_KEY).toString());
|
|
|
+ midIncidentAuditDetail.setProejctName(otherItemMap.get(Constant.PROJECT_NAME_KEY).toString());
|
|
|
+ midIncidentAuditDetail.setMedicalProjectCode(otherItemMap.get(Constant.MEDICAL_PROJECT_CODE_KEY).toString());
|
|
|
+ midIncidentAuditDetail.setMedicalProjectName(otherItemMap.get(Constant.MEDICAL_PROJECT_NAME_KEY).toString());
|
|
|
+ Double otherAmount = (Double) otherItemMap.getOrDefault(Constant.AMOUNT_KEY, 0);
|
|
|
+ midIncidentAuditDetail.setAmount(otherAmount);
|
|
|
+ midIncidentAuditDetail.setProjectType(otherItemMap.getOrDefault(Constant.PROJECT_TYPE_KEY, "default").toString());
|
|
|
+ otherList.add(midIncidentAuditDetail);
|
|
|
+ }
|
|
|
+ midIncidentAuditDetailService.saveBatch(otherList);
|
|
|
}else {
|
|
|
- MidIncidentWarningVO midIncidentWarningVO = RuleEngine.midIncidentWarningVOThreadLocal.get();
|
|
|
MidIncidentAuditDetail midIncidentAuditDetail = new MidIncidentAuditDetail();
|
|
|
+ midIncidentAuditDetail.setAmount(midIncidentAudit.getAmount());
|
|
|
+ Double amount = (Double) itemMap.getOrDefault(Constant.AMOUNT_KEY, 0);
|
|
|
midIncidentAuditDetail.setMedicalDeptCode(midIncidentWarningVO.getMedical_dept_code());
|
|
|
midIncidentAuditDetail.setMedicalDeptName(midIncidentWarningVO.getMedical_dept_name());
|
|
|
Date date = new Date(System.currentTimeMillis());
|
|
|
@@ -227,18 +307,19 @@ public class FactorEnchangeFactory {
|
|
|
midIncidentAuditDetail.setMedicalInsRuleInfoId(medicalInsRuleInfo.getId());
|
|
|
midIncidentAuditDetail.setMedicalInsRuleInfoName(medicalInsRuleInfo.getRuleName());
|
|
|
midIncidentAuditDetail.setDescription(medicalInsRuleInfo.getDescription());
|
|
|
- midIncidentAuditDetail.setProejctCode(itemMap.get(Constant.PROJECT_CODE_KEY).toString());
|
|
|
- midIncidentAuditDetail.setProejctName(itemMap.get(Constant.PROJECT_NAME_KEY).toString());
|
|
|
- midIncidentAuditDetail.setMedicalProjectCode(itemMap.get(Constant.MEDICAL_PROJECT_CODE_KEY).toString());
|
|
|
- midIncidentAuditDetail.setMedicalProjectName(itemMap.get(Constant.MEDICAL_PROJECT_NAME_KEY).toString());
|
|
|
midIncidentAuditDetail.setOutpatientNumber(midIncidentAudit.getOutpatientNumber());
|
|
|
midIncidentAuditDetail.setPrescriptionNumber(midIncidentAudit.getPrescriptionNumber());
|
|
|
- midIncidentAuditDetail.setProjectType(itemMap.getOrDefault(Constant.PROJECT_TYPE_KEY, "default").toString());
|
|
|
midIncidentAuditDetail.setViolationLevel(medicalInsRuleInfo.getViolationLevel());
|
|
|
midIncidentAuditDetail.setTreatmentType(medicalInsRuleInfo.getTreatmentType());
|
|
|
midIncidentAuditDetail.setMidIncidentAuditId(midIncidentAudit.getId());
|
|
|
- midIncidentAuditDetail.setAmount(amount);
|
|
|
+ midIncidentAuditDetail.setProejctCode(itemMap.get(Constant.PROJECT_CODE_KEY).toString());
|
|
|
+ midIncidentAuditDetail.setProejctName(itemMap.get(Constant.PROJECT_NAME_KEY).toString());
|
|
|
+ midIncidentAuditDetail.setMedicalProjectCode(itemMap.get(Constant.MEDICAL_PROJECT_CODE_KEY).toString());
|
|
|
+ midIncidentAuditDetail.setMedicalProjectName(itemMap.get(Constant.MEDICAL_PROJECT_NAME_KEY).toString());
|
|
|
+
|
|
|
+ midIncidentAuditDetail.setProjectType(itemMap.getOrDefault(Constant.PROJECT_TYPE_KEY, "default").toString());
|
|
|
midIncidentAuditService.lambdaUpdate().setSql("amount +"+amount).eq(MidIncidentAudit::getId, midIncidentAudit.getId()).update();
|
|
|
+
|
|
|
midIncidentAuditDetailService.save(midIncidentAuditDetail);
|
|
|
}
|
|
|
|
|
|
@@ -314,11 +395,12 @@ public class FactorEnchangeFactory {
|
|
|
List<FactorAttrRela> factorAttrRelaOutList = ioTypeMap.get(Constant.OUTPUT);
|
|
|
if (CollectionUtil.isNotEmpty(factorAttrRelaOutList)) {
|
|
|
if (factorAttrRelaOutList.size() == 1 && checkEventAttrArr(factorAttrRelaOutList.get(0).getEventAttrId())) {
|
|
|
- List<Map<String, Object>> dataList = jdbcTemplate.queryForList(sql, new Object[]{});
|
|
|
- localMap.put(factorAttrRelaOutList.get(0).getEventAttrId().toString(), dataList);
|
|
|
+ List<Object> dataList = jdbcTemplate.queryForList(sql,Object.class);
|
|
|
+// jdbcTemplate.queryForList()
|
|
|
+ localMap.put(getParamName(factorAttrRelaOutList.get(0).getEventAttrId()), dataList);
|
|
|
} else if (factorAttrRelaOutList.size() == 1 && checkEventAttrMap(factorAttrRelaOutList.get(0).getEventAttrId())) {
|
|
|
Map<String, Object> dataMap = jdbcTemplate.queryForMap(sql);
|
|
|
- localMap.put(factorAttrRelaOutList.get(0).getEventAttrId().toString(), dataMap);
|
|
|
+ localMap.put(getParamName(factorAttrRelaOutList.get(0).getEventAttrId()), dataMap);
|
|
|
} else {
|
|
|
SqlRowSet rs = jdbcTemplate.queryForRowSet(sql);
|
|
|
if (rs.first()) {
|
|
|
@@ -335,7 +417,8 @@ public class FactorEnchangeFactory {
|
|
|
}
|
|
|
|
|
|
public boolean checkEventAttrArr(Integer eventAttrId) {
|
|
|
- Integer dispType = enchanceAttrMap.get(eventAttrId).getDispType();
|
|
|
+ EventAttr eventAttr = enchanceAttrMap.get(eventAttrId);
|
|
|
+ Integer dispType = eventAttr.getDispType();
|
|
|
if (ColumnTypeEnum.getType(dispType) == ColumnTypeEnum.ARRAY) {
|
|
|
return true;
|
|
|
}
|
|
|
@@ -381,7 +464,7 @@ public class FactorEnchangeFactory {
|
|
|
whereColumn = DateUtil.formatDate(paramDate);
|
|
|
break;
|
|
|
default:
|
|
|
- log.error("数据类型超出范围");
|
|
|
+ log.error("数据类型超出范围,当作字符串处理,{} value:{}", type, paramObject);
|
|
|
whereColumn = paramObject.toString();
|
|
|
return whereColumn;
|
|
|
}
|