|
@ -9,6 +9,7 @@ import io.sc.engine.rule.core.po.model.Parameter; |
|
|
import io.sc.engine.rule.core.po.model.processor.SqlParameterProcessor; |
|
|
import io.sc.engine.rule.core.po.model.processor.SqlParameterProcessor; |
|
|
import io.sc.engine.rule.core.util.GroovyExpressionReplacer; |
|
|
import io.sc.engine.rule.core.util.GroovyExpressionReplacer; |
|
|
import io.sc.engine.rule.core.util.IdReplacer; |
|
|
import io.sc.engine.rule.core.util.IdReplacer; |
|
|
|
|
|
import io.sc.engine.rule.core.util.ValueTypeUtil; |
|
|
import io.sc.platform.util.CollectionUtil; |
|
|
import io.sc.platform.util.CollectionUtil; |
|
|
import io.sc.platform.util.ObjectMapperUtil; |
|
|
import io.sc.platform.util.ObjectMapperUtil; |
|
|
import io.sc.platform.util.PlaceHolderExpressionUtil; |
|
|
import io.sc.platform.util.PlaceHolderExpressionUtil; |
|
@ -19,33 +20,34 @@ import java.util.List; |
|
|
|
|
|
|
|
|
public class SqlFieldMapping { |
|
|
public class SqlFieldMapping { |
|
|
private String parameter; |
|
|
private String parameter; |
|
|
|
|
|
private String parameterValueType; |
|
|
private String field; |
|
|
private String field; |
|
|
|
|
|
|
|
|
public List<SqlFieldMapping> parse(String json) throws Exception{ |
|
|
public List<SqlFieldMapping> parse(String json) throws Exception{ |
|
|
return ObjectMapperUtil.json().readValue(json, new TypeReference<List<SqlFieldMapping>>(){}); |
|
|
return ObjectMapperUtil.json().readValue(json, new TypeReference<List<SqlFieldMapping>>(){}); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
public String groovy(Parameter parameter, SqlParameterProcessor processor, Model model) throws Exception{ |
|
|
public String groovy(Parameter parameter, SqlParameterProcessor processor) throws Exception{ |
|
|
if(parameter==null || processor==null){ return null; } |
|
|
if(parameter==null || processor==null){ return null; } |
|
|
try { |
|
|
try { |
|
|
List<SqlFieldMapping> sqlFieldMappings =parse(processor.getSqlFieldMapping()); |
|
|
List<SqlFieldMapping> sqlFieldMappings =parse(processor.getSqlFieldMapping()); |
|
|
return groovyParameter(parameter.getCode(),parameter.getValueType(),processor.getSqlDatasourceName(),processor.getSql(),sqlFieldMappings,model); |
|
|
return groovyParameter(parameter.getCode(),parameter.getValueType(),processor.getSqlDatasourceName(),processor.getSql(),sqlFieldMappings); |
|
|
}catch(Exception e) { |
|
|
}catch(Exception e) { |
|
|
throw new RuntimeException("There was a Error when generate " + parameter.getName()+ "'s SqlFieldMapping groovy source code.", e); |
|
|
throw new RuntimeException("There was a Error when generate " + parameter.getName()+ "'s SqlFieldMapping groovy source code.", e); |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
public String groovy(Indicator indicator, SqlIndicatorProcessor processor, IndicatorLib lib) throws Exception{ |
|
|
public String groovy(Indicator indicator, SqlIndicatorProcessor processor) throws Exception{ |
|
|
if(indicator==null || processor==null){ return null; } |
|
|
if(indicator==null || processor==null){ return null; } |
|
|
try { |
|
|
try { |
|
|
List<SqlFieldMapping> sqlFieldMappings =parse(processor.getSqlFieldMapping()); |
|
|
List<SqlFieldMapping> sqlFieldMappings =parse(processor.getSqlFieldMapping()); |
|
|
return groovyIndicator(indicator.getCode(),indicator.getValueType(),processor.getSqlDatasourceName(),processor.getSql(),sqlFieldMappings,lib); |
|
|
return groovyIndicator(indicator.getCode(),indicator.getValueType(),processor.getSqlDatasourceName(),processor.getSql(),sqlFieldMappings); |
|
|
}catch(Exception e) { |
|
|
}catch(Exception e) { |
|
|
throw new RuntimeException("There was a Error when generate " + indicator.getName()+ "'s SqlFieldMapping groovy source code.", e); |
|
|
throw new RuntimeException("There was a Error when generate " + indicator.getName()+ "'s SqlFieldMapping groovy source code.", e); |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
private String groovyParameter(String code, String valueType,String sqlDatasourceName,String sql,List<SqlFieldMapping> sqlFieldMappings,Model model){ |
|
|
private String groovyParameter(String code, String valueType,String sqlDatasourceName,String sql,List<SqlFieldMapping> sqlFieldMappings){ |
|
|
if(!StringUtils.hasText(sql) || !CollectionUtil.hasElements(sqlFieldMappings)){ |
|
|
if(!StringUtils.hasText(sql) || !CollectionUtil.hasElements(sqlFieldMappings)){ |
|
|
return null; |
|
|
return null; |
|
|
} |
|
|
} |
|
@ -63,16 +65,19 @@ public class SqlFieldMapping { |
|
|
sb.append(" ResultSet rs =ps.executeQuery();").append("\n"); |
|
|
sb.append(" ResultSet rs =ps.executeQuery();").append("\n"); |
|
|
sb.append("){").append("\n"); |
|
|
sb.append("){").append("\n"); |
|
|
sb.append(" if (rs.next()) {").append("\n"); |
|
|
sb.append(" if (rs.next()) {").append("\n"); |
|
|
List<Parameter> parameters =model.getAllParameters(); |
|
|
|
|
|
for(SqlFieldMapping sqlFieldMapping : sqlFieldMappings) { |
|
|
for(SqlFieldMapping sqlFieldMapping : sqlFieldMappings) { |
|
|
sb.append(" "); |
|
|
sb.append(" "); |
|
|
sb.append(PlaceHolderExpressionUtil.replace(sqlFieldMapping.parameter, "arg.","")); |
|
|
sb.append(PlaceHolderExpressionUtil.replace(sqlFieldMapping.parameter, "arg.","")); |
|
|
sb.append(" ="); |
|
|
sb.append(" ="); |
|
|
for(Parameter parameter : parameters){ |
|
|
if(ValueTypeUtil.isLong(sqlFieldMapping.getParameterValueType())){ |
|
|
if(("${" + parameter.getCode() + "}").equals(sqlFieldMapping.parameter)){ |
|
|
String format =StringUtil.format("TypeConvertor.getValue(rs.getString(\"${0}\"),${1}.class);\n",sqlFieldMapping.getField(),"Long"); |
|
|
sb.append(getValueExpression(sqlFieldMapping.getField(), parameter.getValueType())); |
|
|
sb.append(format); |
|
|
break; |
|
|
}else if(ValueTypeUtil.isDecimal(sqlFieldMapping.getParameterValueType())){ |
|
|
} |
|
|
String format =StringUtil.format("TypeConvertor.getValue(rs.getString(\"${0}\"),${1}.class);\n",sqlFieldMapping.getField(),"Double"); |
|
|
|
|
|
sb.append(format); |
|
|
|
|
|
}else{ |
|
|
|
|
|
String format =StringUtil.format("TypeConvertor.getValue(rs.getString(\"${0}\"),${1}.class);\n",sqlFieldMapping.getField(),sqlFieldMapping.getParameterValueType()); |
|
|
|
|
|
sb.append(format); |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
sb.append(" }").append("\n"); |
|
|
sb.append(" }").append("\n"); |
|
@ -80,7 +85,7 @@ public class SqlFieldMapping { |
|
|
return sb.toString(); |
|
|
return sb.toString(); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
private String groovyIndicator(String code, String valueType,String sqlDatasourceName,String sql,List<SqlFieldMapping> sqlFieldMappings,IndicatorLib lib){ |
|
|
private String groovyIndicator(String code, String valueType,String sqlDatasourceName,String sql,List<SqlFieldMapping> sqlFieldMappings){ |
|
|
if(!StringUtils.hasText(sql) || !CollectionUtil.hasElements(sqlFieldMappings)){ |
|
|
if(!StringUtils.hasText(sql) || !CollectionUtil.hasElements(sqlFieldMappings)){ |
|
|
return null; |
|
|
return null; |
|
|
} |
|
|
} |
|
@ -98,16 +103,19 @@ public class SqlFieldMapping { |
|
|
sb.append(" ResultSet rs =ps.executeQuery();").append("\n"); |
|
|
sb.append(" ResultSet rs =ps.executeQuery();").append("\n"); |
|
|
sb.append("){").append("\n"); |
|
|
sb.append("){").append("\n"); |
|
|
sb.append(" if (rs.next()) {").append("\n"); |
|
|
sb.append(" if (rs.next()) {").append("\n"); |
|
|
List<Indicator> indicators =lib.getIndicators(); |
|
|
|
|
|
for(SqlFieldMapping sqlFieldMapping : sqlFieldMappings) { |
|
|
for(SqlFieldMapping sqlFieldMapping : sqlFieldMappings) { |
|
|
sb.append(" "); |
|
|
sb.append(" "); |
|
|
sb.append(PlaceHolderExpressionUtil.replace(sqlFieldMapping.parameter, "arg.","")); |
|
|
sb.append(PlaceHolderExpressionUtil.replace(sqlFieldMapping.parameter, "arg.","")); |
|
|
sb.append(" ="); |
|
|
sb.append(" ="); |
|
|
for(Indicator indicator : indicators){ |
|
|
if(ValueTypeUtil.isLong(sqlFieldMapping.getParameterValueType())){ |
|
|
if(("${" + indicator.getCode() + "}").equals(sqlFieldMapping.parameter)){ |
|
|
String format =StringUtil.format("TypeConvertor.getValue(rs.getString(\"${0}\"),${1}.class);\n",sqlFieldMapping.getField(),"Long"); |
|
|
sb.append(getValueExpression(sqlFieldMapping.getField(), indicator.getValueType())); |
|
|
sb.append(format); |
|
|
break; |
|
|
}else if(ValueTypeUtil.isDecimal(sqlFieldMapping.getParameterValueType())){ |
|
|
} |
|
|
String format =StringUtil.format("TypeConvertor.getValue(rs.getString(\"${0}\"),${1}.class);\n",sqlFieldMapping.getField(),"Double"); |
|
|
|
|
|
sb.append(format); |
|
|
|
|
|
}else{ |
|
|
|
|
|
String format =StringUtil.format("TypeConvertor.getValue(rs.getString(\"${0}\"),${1}.class);\n",sqlFieldMapping.getField(),sqlFieldMapping.getParameterValueType()); |
|
|
|
|
|
sb.append(format); |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
sb.append(" }").append("\n"); |
|
|
sb.append(" }").append("\n"); |
|
@ -115,10 +123,6 @@ public class SqlFieldMapping { |
|
|
return sb.toString(); |
|
|
return sb.toString(); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
private String getValueExpression(String sqlFieldName,String valueType){ |
|
|
|
|
|
return StringUtil.format("TypeConvertor.getValue(rs.getString(\"${0}\"),${1}.class);\n",sqlFieldName,valueType); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
public String getParameter() { |
|
|
public String getParameter() { |
|
|
return parameter; |
|
|
return parameter; |
|
|
} |
|
|
} |
|
@ -127,6 +131,14 @@ public class SqlFieldMapping { |
|
|
this.parameter = parameter; |
|
|
this.parameter = parameter; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
public String getParameterValueType() { |
|
|
|
|
|
return parameterValueType; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
public void setParameterValueType(String parameterValueType) { |
|
|
|
|
|
this.parameterValueType = parameterValueType; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
public String getField() { |
|
|
public String getField() { |
|
|
return field; |
|
|
return field; |
|
|
} |
|
|
} |
|
|