|
|
@@ -64,9 +64,9 @@ public class FactorEnchangeFactory {
|
|
|
@Autowired
|
|
|
IMidIncidentAuditDetailService midIncidentAuditDetailService;
|
|
|
|
|
|
- private Map<Integer, EventAttr> enchanceAttrMap = new HashMap<>();
|
|
|
+ public static Map<Integer, EventAttr> enchanceAttrMap = new HashMap<>();
|
|
|
|
|
|
- private Map<Integer, List<FactorCondRela>> factorCondRelaMap = new HashMap<>();
|
|
|
+ public static Map<Integer, List<FactorCondRela>> factorCondRelaMap = new HashMap<>();
|
|
|
|
|
|
@PostConstruct
|
|
|
public void init() {
|
|
|
@@ -77,7 +77,6 @@ public class FactorEnchangeFactory {
|
|
|
}
|
|
|
|
|
|
|
|
|
-
|
|
|
public boolean runFactorEnchange(Integer medicalInfoRuleInfoId, MedicalInsRuleInfo medicalInsRuleInfo, MidIncidentAudit midIncidentAudit, Map<String, Object> localMap, List<RuleFactorRela> ruleFactorRelaList, List<FactorEnchance> factorEnchanceList) {
|
|
|
Map<Integer, FactorEnchance> factorEnchanceMap = factorEnchanceList.stream().collect(Collectors.toMap(FactorEnchance::getId, v -> v, (v1, v2) -> v1));
|
|
|
boolean result = true;
|
|
|
@@ -106,17 +105,17 @@ public class FactorEnchangeFactory {
|
|
|
pluginInterface.plugin(localMap, ioTypeMap1, factorEnchance, medicalInfoRuleInfoId);
|
|
|
break;
|
|
|
case CONSTANT:
|
|
|
- localMap.put(factorEnchance.getEventAttrId().toString(), factorEnchance.getExtAttr1());
|
|
|
+ localMap.put(getParamName(factorEnchance.getEventAttrId()), factorEnchance.getExtAttr1());
|
|
|
break;
|
|
|
case LOGICAL_EXPRESSION:
|
|
|
// Map<Integer, List<FactorAttrRela>> ioTypeMap2 = getIoMap(factorEnchanceId);
|
|
|
- result = setLogicalExpressionResultByFactorEnchance(localMap, factorEnchance);
|
|
|
- if(Constant.WARING_EVENT_ATTR_ID == factorEnchance.getEventAttrId()){
|
|
|
- if(result){
|
|
|
+ result = setLogicalExpressionResultByFactorEnchance(localMap, factorEnchance);
|
|
|
+ if (Constant.WARING_EVENT_ATTR_ID == factorEnchance.getEventAttrId()) {
|
|
|
+ if (result) {
|
|
|
insertMidWarningDetail(localMap, medicalInsRuleInfo, midIncidentAudit);
|
|
|
}
|
|
|
- }else {
|
|
|
- localMap.put(factorEnchance.getEventAttrId().toString(), result);
|
|
|
+ } else {
|
|
|
+ localMap.put(getParamName(factorEnchance.getEventAttrId()), result);
|
|
|
}
|
|
|
break;
|
|
|
case PROPERTIES:
|
|
|
@@ -124,7 +123,7 @@ public class FactorEnchangeFactory {
|
|
|
if (null == valueTemp) {
|
|
|
log.error("要素提取:{} 规则ID:{} 常量赋值:{} 配置的属性:{}无值", factorEnchance.getId(), medicalInfoRuleInfoId, factorEnchance.getRuleEnchanceName(), factorEnchance.getExtAttr1());
|
|
|
} else {
|
|
|
- localMap.put(factorEnchance.getEventAttrId().toString(), valueTemp);
|
|
|
+ localMap.put(getParamName(factorEnchance.getEventAttrId()), valueTemp);
|
|
|
}
|
|
|
break;
|
|
|
default:
|
|
|
@@ -135,7 +134,7 @@ public class FactorEnchangeFactory {
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
- public Map<Integer, List<FactorAttrRela>> getIoMap(Integer factorEnchanceId){
|
|
|
+ public Map<Integer, List<FactorAttrRela>> getIoMap(Integer factorEnchanceId) {
|
|
|
LambdaQueryWrapper<FactorAttrRela> queryWrapper = new LambdaQueryWrapper();
|
|
|
queryWrapper.eq(FactorAttrRela::getFactorEnhanceId, factorEnchanceId);
|
|
|
queryWrapper.orderByAsc(FactorAttrRela::getSeqNum);
|
|
|
@@ -147,7 +146,7 @@ public class FactorEnchangeFactory {
|
|
|
return ioTypeMap;
|
|
|
}
|
|
|
|
|
|
- public void insertMidWarningDetail(Map<String,Object> itemMap, MedicalInsRuleInfo medicalInsRuleInfo,MidIncidentAudit midIncidentAudit){
|
|
|
+ public void insertMidWarningDetail(Map<String, Object> itemMap, MedicalInsRuleInfo medicalInsRuleInfo, MidIncidentAudit midIncidentAudit) {
|
|
|
MidIncidentWarningVO midIncidentWarningVO = RuleEngine.midIncidentWarningVOThreadLocal.get();
|
|
|
MidIncidentAuditDetail midIncidentAuditDetail = new MidIncidentAuditDetail();
|
|
|
midIncidentAuditDetail.setMedicalDeptCode(midIncidentWarningVO.getMedical_dept_code());
|
|
|
@@ -170,16 +169,14 @@ public class FactorEnchangeFactory {
|
|
|
midIncidentAuditDetail.setMedicalProejctName(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.setProjectType(itemMap.getOrDefault(Constant.PROJECT_TYPE_KEY, "default").toString());
|
|
|
midIncidentAuditDetail.setViolationLevel(medicalInsRuleInfo.getViolationLevel());
|
|
|
midIncidentAuditDetail.setTreatmentType(medicalInsRuleInfo.getTreatmentType());
|
|
|
midIncidentAuditDetail.setMidIncidentAuditId(midIncidentAudit.getId());
|
|
|
- midIncidentAuditService.save(midIncidentAudit);
|
|
|
+ midIncidentAuditDetailService.save(midIncidentAuditDetail);
|
|
|
}
|
|
|
|
|
|
|
|
|
-
|
|
|
-
|
|
|
/**
|
|
|
* 逻辑表达式
|
|
|
*
|
|
|
@@ -187,10 +184,10 @@ public class FactorEnchangeFactory {
|
|
|
* @param factorEnchance
|
|
|
*/
|
|
|
public boolean setLogicalExpressionResultByFactorEnchance(Map<String, Object> localMap, FactorEnchance factorEnchance) {
|
|
|
- if(StringUtils.isNotBlank(factorEnchance.getEnhanceValue())){
|
|
|
+ if (StringUtils.isNotBlank(factorEnchance.getEnhanceValue())) {
|
|
|
Boolean resultTemp = (Boolean) spelUtil.runSpelExpression(localMap, factorEnchance.getEnhanceValue());
|
|
|
return resultTemp;
|
|
|
- }else {
|
|
|
+ } else {
|
|
|
List<FactorCondRela> factorCondRelaList = factorCondRelaMap.get(factorEnchance.getId());
|
|
|
if (CollectionUtil.isNotEmpty(factorCondRelaList)) {
|
|
|
Boolean result = null;
|
|
|
@@ -201,7 +198,7 @@ public class FactorEnchangeFactory {
|
|
|
}
|
|
|
for (FactorCondRela factorCondRela : factorCondRelaList) {
|
|
|
if (!StringUtils.isNotBlank(factorCondRela.getCondStr())) {
|
|
|
- log.error("未正常生成表达式");
|
|
|
+ log.error("未正常生成表达式,逻辑表达式:{}", factorCondRela);
|
|
|
String condStr = spelUtil.getSPELString(factorCondRela, enchanceAttrMap);
|
|
|
factorCondRela.setCondStr(condStr);
|
|
|
}
|
|
|
@@ -219,7 +216,13 @@ public class FactorEnchangeFactory {
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
-
|
|
|
+ public static String getParamName(Integer eventAttrId) {
|
|
|
+ EventAttr eventAttr = enchanceAttrMap.get(eventAttrId);
|
|
|
+ if (null != eventAttr) {
|
|
|
+ return eventAttr.getEnName();
|
|
|
+ }
|
|
|
+ return null;
|
|
|
+ }
|
|
|
|
|
|
public void setSqlResultByFactorEnchance(Map<String, Object> localMap, Map<Integer, List<FactorAttrRela>> ioTypeMap, FactorEnchance factorEnchance, Integer medicalInsRuleInfoId) {
|
|
|
String dataSourceKey = factorEnchance.getExtAttr1();
|
|
|
@@ -229,11 +232,11 @@ public class FactorEnchangeFactory {
|
|
|
List<Integer> paramTypeList = new ArrayList<>();
|
|
|
if (CollectionUtil.isNotEmpty(factorAttrRelaList)) {
|
|
|
for (FactorAttrRela factorAttrRela : factorAttrRelaList) {
|
|
|
- paramNameList.add(factorAttrRela.getEventAttrId());
|
|
|
EventAttr eventAttr = enchanceAttrMap.get(factorAttrRela.getEventAttrId());
|
|
|
if (null == eventAttr) {
|
|
|
throw new NullPointerException("规则Id:" + medicalInsRuleInfoId + " 要素ID:" + factorAttrRela.getEventAttrId() + " 不在要素管理表中");
|
|
|
}
|
|
|
+ paramNameList.add(factorAttrRela.getEventAttrId());
|
|
|
paramTypeList.add(eventAttr.getDispType());
|
|
|
}
|
|
|
}
|
|
|
@@ -250,10 +253,10 @@ public class FactorEnchangeFactory {
|
|
|
} else {
|
|
|
SqlRowSet rs = jdbcTemplate.queryForRowSet(sql);
|
|
|
if (rs.first()) {
|
|
|
- for (int paramIndex = 1; paramIndex < factorAttrRelaOutList.size(); paramIndex++) {
|
|
|
+ for (int paramIndex = 1; paramIndex <= factorAttrRelaOutList.size(); paramIndex++) {
|
|
|
Object paramObj = rs.getObject(paramIndex);
|
|
|
FactorAttrRela factorAttrRela = factorAttrRelaOutList.get(paramIndex - 1);
|
|
|
- localMap.put(factorAttrRela.getEventAttrId().toString(), paramObj);
|
|
|
+ localMap.put(getParamName(factorAttrRela.getEventAttrId()), paramObj);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
@@ -278,25 +281,25 @@ public class FactorEnchangeFactory {
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
- public String getSqlText(Map<String, Object> localMap, String sql, List<Integer> paramNameList, List<Integer> paramTypeList, FactorEnchance factorEnchance, Integer medicalInsRuleInfoId) {
|
|
|
+ public String getSqlText(Map<String, Object> localMap, String sql, List<Integer> paramIdNameList, List<Integer> paramTypeList, FactorEnchance factorEnchance, Integer medicalInsRuleInfoId) {
|
|
|
List<String> paramValueList = new ArrayList<>();
|
|
|
- if (CollectionUtil.isNotEmpty(paramNameList)) {
|
|
|
- for (int indx = 0; indx < paramNameList.size(); indx++) {
|
|
|
- Integer name = paramNameList.get(indx);
|
|
|
+ if (CollectionUtil.isNotEmpty(paramIdNameList)) {
|
|
|
+ for (int indx = 0; indx < paramIdNameList.size(); indx++) {
|
|
|
+ Integer paramId = paramIdNameList.get(indx);
|
|
|
Integer type = paramTypeList.get(indx);
|
|
|
- Object paramObject = localMap.get(name.toString());
|
|
|
+ Object paramObject = localMap.get(getParamName(paramId));
|
|
|
if (null == paramObject) {
|
|
|
- throw new NullPointerException("医保规则:" + medicalInsRuleInfoId + " 要素提取:" + factorEnchance.getFactorCatalog() + " 参数key:" + name);
|
|
|
+ throw new NullPointerException("医保规则:" + medicalInsRuleInfoId + " 要素提取:" + factorEnchance.getFactorCatalog() + " 参数key:" + paramId + " 参数名:" + getParamName(paramId));
|
|
|
}
|
|
|
- log.info("规则ID:{} 入参:{} 类型:{} 值:{}", medicalInsRuleInfoId, name, type, paramObject);
|
|
|
+ log.info("规则ID:{} 入参:{} 类型:{} 值:{}", medicalInsRuleInfoId, paramId, type, paramObject);
|
|
|
String whereColumn = null;
|
|
|
switch (ColumnTypeEnum.getType(type)) {
|
|
|
case ARRAY:
|
|
|
List<Object> paramList = (List<Object>) paramObject;
|
|
|
- whereColumn = getInStr(name, paramList);
|
|
|
+ whereColumn = getInStr(paramId, paramList);
|
|
|
break;
|
|
|
case MAP:
|
|
|
- whereColumn = getMapStr(name, paramObject);
|
|
|
+ whereColumn = getMapStr(paramId, paramObject);
|
|
|
break;
|
|
|
case STRING:
|
|
|
whereColumn = "'" + paramObject + "'";
|
|
|
@@ -321,12 +324,12 @@ public class FactorEnchangeFactory {
|
|
|
return sql;
|
|
|
}
|
|
|
|
|
|
- public String getInStr(Integer name, List<Object> paramList) {
|
|
|
+ public String getInStr(Integer paramId, List<Object> paramList) {
|
|
|
StringBuffer wheColumnStr = new StringBuffer(" (");
|
|
|
for (Object param : paramList) {
|
|
|
- log.error("字段属性名为:{} value:{} 类型:{}", name, param, param.getClass());
|
|
|
+ log.error("字段属性名为:{} value:{} 类型:{}", paramId, param, param.getClass());
|
|
|
if (param instanceof Map) {
|
|
|
- EventAttr eventAttr = enchanceAttrMap.get(name);
|
|
|
+ EventAttr eventAttr = enchanceAttrMap.get(paramId);
|
|
|
String proKey = eventAttr.getDispArgs();
|
|
|
Object value = ((Map<?, ?>) param).get(proKey);
|
|
|
if (value instanceof String) {
|
|
|
@@ -349,8 +352,8 @@ public class FactorEnchangeFactory {
|
|
|
return wheColumnEndStr + ") ";
|
|
|
}
|
|
|
|
|
|
- public String getMapStr(Integer name, Object param) {
|
|
|
- EventAttr eventAttr = enchanceAttrMap.get(name);
|
|
|
+ public String getMapStr(Integer paramId, Object param) {
|
|
|
+ EventAttr eventAttr = enchanceAttrMap.get(paramId);
|
|
|
String proKey = eventAttr.getDispArgs();
|
|
|
Object value = ((Map<?, ?>) param).get(proKey);
|
|
|
if (value instanceof String) {
|