|
|
@@ -75,6 +75,8 @@ public class FactorEnchangeFactory {
|
|
|
IAfterwardsAuditService afterwardsAuditService;
|
|
|
@Autowired
|
|
|
IAfterwardsAuditDetailService afterwardsAuditDetailService;
|
|
|
+ @Autowired
|
|
|
+ SqlUtil sqlUtil;
|
|
|
|
|
|
public static Map<Integer, EventAttr> enchanceAttrMap = new HashMap<>();
|
|
|
|
|
|
@@ -103,7 +105,7 @@ public class FactorEnchangeFactory {
|
|
|
switch (enchanceTypeEnum) {
|
|
|
case SQL:
|
|
|
Map<Integer, List<FactorAttrRela>> ioTypeMap = getIoMap(factorEnchanceId);
|
|
|
- setSqlResultByFactorEnchance(localMap, ioTypeMap, factorEnchance, medicalInfoRuleInfoId);
|
|
|
+ sqlUtil.setSqlResultByFactorEnchance(localMap, ioTypeMap, factorEnchance, medicalInfoRuleInfoId);
|
|
|
break;
|
|
|
case EXPRESSION:
|
|
|
// setLogicalExpressionResultByFactorEnchance(localMap, ioTypeMap, factorEnchance, medicalInfoRuleInfoId);
|
|
|
@@ -374,145 +376,5 @@ public class FactorEnchangeFactory {
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
- public void setSqlResultByFactorEnchance(Map<String, Object> localMap, Map<Integer, List<FactorAttrRela>> ioTypeMap, FactorEnchance factorEnchance, Integer medicalInsRuleInfoId) {
|
|
|
- String dataSourceKey = factorEnchance.getExtAttr1();
|
|
|
- JdbcTemplate jdbcTemplate = DynamicDBUtil.getJdbcTemplate(dataSourceKey);
|
|
|
- List<FactorAttrRela> factorAttrRelaList = ioTypeMap.get(Constant.INPUT);
|
|
|
- List<Integer> paramNameList = new ArrayList<>();
|
|
|
- List<Integer> paramTypeList = new ArrayList<>();
|
|
|
- if (CollectionUtil.isNotEmpty(factorAttrRelaList)) {
|
|
|
- for (FactorAttrRela factorAttrRela : factorAttrRelaList) {
|
|
|
- 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());
|
|
|
- }
|
|
|
- }
|
|
|
- String sql = getSqlText(localMap, factorEnchance.getEnhanceValue(), paramNameList, paramTypeList, factorEnchance, medicalInsRuleInfoId);
|
|
|
-
|
|
|
- List<FactorAttrRela> factorAttrRelaOutList = ioTypeMap.get(Constant.OUTPUT);
|
|
|
- if (CollectionUtil.isNotEmpty(factorAttrRelaOutList)) {
|
|
|
- if (factorAttrRelaOutList.size() == 1 && checkEventAttrArr(factorAttrRelaOutList.get(0).getEventAttrId())) {
|
|
|
- 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(getParamName(factorAttrRelaOutList.get(0).getEventAttrId()), dataMap);
|
|
|
- } else {
|
|
|
- SqlRowSet rs = jdbcTemplate.queryForRowSet(sql);
|
|
|
- if (rs.first()) {
|
|
|
- for (int paramIndex = 1; paramIndex <= factorAttrRelaOutList.size(); paramIndex++) {
|
|
|
- Object paramObj = rs.getObject(paramIndex);
|
|
|
- FactorAttrRela factorAttrRela = factorAttrRelaOutList.get(paramIndex - 1);
|
|
|
- localMap.put(getParamName(factorAttrRela.getEventAttrId()), paramObj);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- public boolean checkEventAttrArr(Integer eventAttrId) {
|
|
|
- EventAttr eventAttr = enchanceAttrMap.get(eventAttrId);
|
|
|
- Integer dispType = eventAttr.getDispType();
|
|
|
- if (ColumnTypeEnum.getType(dispType) == ColumnTypeEnum.ARRAY) {
|
|
|
- return true;
|
|
|
- }
|
|
|
- return false;
|
|
|
- }
|
|
|
-
|
|
|
- public boolean checkEventAttrMap(Integer eventAttrId) {
|
|
|
- Integer dispType = enchanceAttrMap.get(eventAttrId).getDispType();
|
|
|
- if (ColumnTypeEnum.getType(dispType) == ColumnTypeEnum.MAP) {
|
|
|
- return true;
|
|
|
- }
|
|
|
- return false;
|
|
|
- }
|
|
|
-
|
|
|
- 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(paramIdNameList)) {
|
|
|
- for (int indx = 0; indx < paramIdNameList.size(); indx++) {
|
|
|
- Integer paramId = paramIdNameList.get(indx);
|
|
|
- Integer type = paramTypeList.get(indx);
|
|
|
- Object paramObject = localMap.get(getParamName(paramId));
|
|
|
- if (null == paramObject) {
|
|
|
- throw new NullPointerException("医保规则:" + medicalInsRuleInfoId + " 要素提取:" + factorEnchance.getFactorCatalog() + " 参数key:" + paramId + " 参数名:" + getParamName(paramId));
|
|
|
- }
|
|
|
- log.info("规则ID:{} 入参:{} 类型:{} 值:{}", medicalInsRuleInfoId, paramId, type, paramObject);
|
|
|
- String whereColumn = null;
|
|
|
- switch (ColumnTypeEnum.getType(type)) {
|
|
|
- case ARRAY:
|
|
|
- List<Object> paramList = (List<Object>) paramObject;
|
|
|
- whereColumn = getInStr(paramId, paramList);
|
|
|
- break;
|
|
|
- case MAP:
|
|
|
- whereColumn = getMapStr(paramId, paramObject);
|
|
|
- break;
|
|
|
- case STRING:
|
|
|
- whereColumn = "'" + paramObject + "'";
|
|
|
- break;
|
|
|
- case INTEGER:
|
|
|
- whereColumn = paramObject.toString();
|
|
|
- break;
|
|
|
- case DATETIME:
|
|
|
- Date paramDate = (Date) paramObject;
|
|
|
- whereColumn = DateUtil.formatDate(paramDate);
|
|
|
- break;
|
|
|
- default:
|
|
|
- log.error("数据类型超出范围,当作字符串处理,{} value:{}", type, paramObject);
|
|
|
- whereColumn = paramObject.toString();
|
|
|
- return whereColumn;
|
|
|
- }
|
|
|
- paramValueList.add(whereColumn);
|
|
|
- }
|
|
|
- }
|
|
|
- sql = String.format(sql, paramValueList.toArray(new String[0]));
|
|
|
- log.info("规则ID:{} 要素提取:{} sql:{}", medicalInsRuleInfoId, factorEnchance.getId(), sql);
|
|
|
- return sql;
|
|
|
- }
|
|
|
-
|
|
|
- public String getInStr(Integer paramId, List<Object> paramList) {
|
|
|
- StringBuffer wheColumnStr = new StringBuffer(" (");
|
|
|
- for (Object param : paramList) {
|
|
|
- log.error("字段属性名为:{} value:{} 类型:{}", paramId, param, param.getClass());
|
|
|
- if (param instanceof Map) {
|
|
|
- EventAttr eventAttr = enchanceAttrMap.get(paramId);
|
|
|
- String proKey = eventAttr.getDispArgs();
|
|
|
- Object value = ((Map<?, ?>) param).get(proKey);
|
|
|
- if (value instanceof String) {
|
|
|
- wheColumnStr.append("'").append(param).append("',");
|
|
|
- } else {
|
|
|
- wheColumnStr.append(value);
|
|
|
- }
|
|
|
- } else if (param instanceof String) {
|
|
|
- wheColumnStr.append("'").append(param).append("',");
|
|
|
- } else if (param instanceof Integer) {
|
|
|
- wheColumnStr.append(param).append(",");
|
|
|
- } else if (param instanceof Long) {
|
|
|
- wheColumnStr.append(param).append(",");
|
|
|
- } else {
|
|
|
- wheColumnStr.append("'").append(param).append("',");
|
|
|
- }
|
|
|
- }
|
|
|
- String wheColumnEndStr = wheColumnStr.substring(0, wheColumnStr.length() - 1);
|
|
|
-
|
|
|
- return wheColumnEndStr + ") ";
|
|
|
- }
|
|
|
-
|
|
|
- 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) {
|
|
|
- return "'" + value + "'";
|
|
|
- } else {
|
|
|
- return value.toString();
|
|
|
- }
|
|
|
- }
|
|
|
|
|
|
}
|