@ -14,6 +14,7 @@ import io.sc.engine.rule.server.dictionary.entity.UserDefinedJavaClassDictionary
import io.sc.engine.rule.server.dictionary.entity.UserDefinedJavaClassFieldEntity ;
import io.sc.engine.rule.server.dictionary.repository.UserDefinedJavaClassFieldRepository ;
import io.sc.engine.rule.server.dictionary.service.UserDefinedJavaClassFieldService ;
import io.sc.platform.jdbc.DatabaseType ;
import io.sc.platform.orm.service.support.OperatorType ;
import io.sc.platform.orm.service.support.QueryParameter ;
import io.sc.platform.orm.service.support.criteria.Criteria ;
@ -50,6 +51,8 @@ public class CustFeatureCalcBatchServiceImpl implements CustFeatureCalcBatchServ
private JdbcTemplate jdbcTemplate ;
@Autowired
private ExecutorFactoryService executorFactoryService ;
@Autowired
private DataSource dataSource ;
private GroovyScriptEngineService groovyScriptEngineService = new GroovyScriptEngineServiceImpl ( ) ;
@ -67,6 +70,8 @@ public class CustFeatureCalcBatchServiceImpl implements CustFeatureCalcBatchServ
String sql = "SELECT ID_ as CUST_ID, CUSTOMER_ID as CUST_NO, CUSTOMER_CHINESE_NAME as CUST_NAME, CUSTOMER_TYPE AS CUST_TYPE FROM ESB_RATING_CUSTOMER" ;
List < Map < String , Object > > list = jdbcTemplate . queryForList ( sql ) ;
if ( list ! = null ) {
DatabaseType type = DatabaseType . fromMetaData ( dataSource ) ;
String dbType = type . getProductName ( ) ;
Executor executor = executorFactoryService . getExecutor ( ) ;
ResourceWrapper resourceWrapper = executor . getLoader ( ) . getResourceByCode ( SHRCB_LIB_CODE , null ) ;
SourceCode groovySourceCode = new GroovySourceCodeGenerator ( ) . generateSourceCodeByCode ( SHRCB_LIB_CODE , null , resourceWrapper ) ;
@ -102,7 +107,11 @@ public class CustFeatureCalcBatchServiceImpl implements CustFeatureCalcBatchServ
}
//第一次需要创建表
if ( i = = 1 ) {
bsu = generateShrcbCorpCreateSql ( custFeatureParams , res ) ;
if ( dbType . startsWith ( "DM" ) ) {
bsu = generateShrcbCorpCreateSqlDm ( custFeatureParams , res ) ;
} else if ( dbType . equals ( "MySQL" ) ) {
bsu = generateShrcbCorpCreateSqlMySql ( custFeatureParams , res ) ;
}
}
//插入数据
insertShrcbCorpCustFeatureResult ( custFeatureParams , res , bsu ) ;
@ -117,7 +126,112 @@ public class CustFeatureCalcBatchServiceImpl implements CustFeatureCalcBatchServ
* @param custFeatureParams
* @param res
* /
private BatchSqlUpdate generateShrcbCorpCreateSql ( CustFeatureParamsVo custFeatureParams , List < CustFeatureRet > res ) {
private BatchSqlUpdate generateShrcbCorpCreateSqlDm ( CustFeatureParamsVo custFeatureParams , List < CustFeatureRet > res ) {
StringBuffer createSql = new StringBuffer ( "create table P_IRS_SHRCB_CORP_FEATURE_RET(\n" ) ;
createSql . append ( "id varchar(60),\n" ) ;
createSql . append ( "data_dt varchar(20),\n" ) ;
createSql . append ( "cust_id varchar(60),\n" ) ;
createSql . append ( "cust_no varchar(60),\n" ) ;
createSql . append ( "cust_name varchar(200),\n" ) ;
createSql . append ( "cust_type varchar(20),\n" ) ;
String columns = "id,data_dt,cust_id,cust_no,cust_name,cust_type,DATA_COME_FROM_,CREATOR_,CREATE_DATE_,LAST_MODIFIER_,LAST_MODIFYDATE_,CORP_CODE_," ;
String colDataTypeStr = "varchar,varchar,varchar,varchar,varchar,varchar,varchar,varchar,date,varchar,date,varchar," ;
for ( CustFeatureRet r : res ) {
columns + = r . getFeatureCode ( ) + "," ;
colDataTypeStr + = "decimal," ;
createSql . append ( r . getFeatureCode ( ) ) . append ( " decimal(30,6),\n" ) ;
}
columns = columns . endsWith ( "," ) ? columns . substring ( 0 , columns . length ( ) - 1 ) : columns ;
colDataTypeStr = colDataTypeStr . endsWith ( "," ) ? colDataTypeStr . substring ( 0 , colDataTypeStr . length ( ) - 1 ) : colDataTypeStr ;
createSql . append ( "DATA_COME_FROM_ varchar(10),\n" ) ;
createSql . append ( "CREATOR_ varchar(255),\n" ) ;
createSql . append ( "CREATE_DATE_ date,\n" ) ;
createSql . append ( "LAST_MODIFIER_ varchar(255),\n" ) ;
createSql . append ( "LAST_MODIFYDATE_ date,\n" ) ;
createSql . append ( "CORP_CODE_ varchar(255)\n" ) ;
createSql . append ( ")" ) ;
StringBuffer commentSql = new StringBuffer ( ) ;
commentSql . append ( "comment on column P_IRS_SHRCB_CORP_FEATURE_RET.id is 'id';" ) ;
commentSql . append ( "comment on column P_IRS_SHRCB_CORP_FEATURE_RET.data_dt is '数据日期';" ) ;
commentSql . append ( "comment on column P_IRS_SHRCB_CORP_FEATURE_RET.cust_id is '客户ID';" ) ;
commentSql . append ( "comment on column P_IRS_SHRCB_CORP_FEATURE_RET.cust_no is '客户编号';" ) ;
commentSql . append ( "comment on column P_IRS_SHRCB_CORP_FEATURE_RET.cust_name is '客户名称';" ) ;
commentSql . append ( "comment on column P_IRS_SHRCB_CORP_FEATURE_RET.cust_type is '客户类型';" ) ;
commentSql . append ( "comment on column P_IRS_SHRCB_CORP_FEATURE_RET.DATA_COME_FROM_ is '数据来源';" ) ;
commentSql . append ( "comment on column P_IRS_SHRCB_CORP_FEATURE_RET.CREATOR_ is '创建人';" ) ;
commentSql . append ( "comment on column P_IRS_SHRCB_CORP_FEATURE_RET.CREATE_DATE_ is '创建日期';" ) ;
commentSql . append ( "comment on column P_IRS_SHRCB_CORP_FEATURE_RET.LAST_MODIFIER_ is '最后修改人';" ) ;
commentSql . append ( "comment on column P_IRS_SHRCB_CORP_FEATURE_RET.LAST_MODIFYDATE_ is '最后修改日期';" ) ;
commentSql . append ( "comment on column P_IRS_SHRCB_CORP_FEATURE_RET.CORP_CODE_ is '所属法人代码';" ) ;
for ( CustFeatureRet r : res ) {
commentSql . append ( "comment on column P_IRS_SHRCB_CORP_FEATURE_RET." ) . append ( r . getFeatureCode ( ) ) . append ( " is '" ) . append ( r . getFeatureName ( ) ) . append ( "';" ) ;
}
//判断表是否存在
try {
String querySql = "select count(1) from P_IRS_SHRCB_CORP_FEATURE_RET" ;
jdbcTemplate . execute ( querySql ) ;
} catch ( Exception e ) {
log . error ( MessageFormat . format ( "{0} 表未创建!" , "P_IRS_SHRCB_CORP_FEATURE_RET" ) ) ;
//创建表
jdbcTemplate . execute ( createSql . toString ( ) ) ;
//添加注释
jdbcTemplate . execute ( commentSql . toString ( ) ) ;
}
//判断表字段是否有变化
try {
String querySql = "select " + columns + " from P_IRS_SHRCB_CORP_FEATURE_RET" ;
jdbcTemplate . execute ( querySql ) ;
} catch ( Exception e ) {
log . error ( MessageFormat . format ( "{0} 表字段有变更,需要重建!" , "P_IRS_SHRCB_CORP_FEATURE_RET" ) ) ;
//重新创建表
jdbcTemplate . execute ( "drop table P_IRS_SHRCB_CORP_FEATURE_RET" ) ;
jdbcTemplate . execute ( createSql . toString ( ) ) ;
//添加注释
jdbcTemplate . execute ( commentSql . toString ( ) ) ;
}
//判断相同数据日期是否已存在数据
String querySql = "select count(1) as CNT from P_IRS_SHRCB_CORP_FEATURE_RET where data_dt = '" + custFeatureParams . getDataDt ( ) + "'" ;
Map < String , Object > map = jdbcTemplate . queryForMap ( querySql ) ;
int cnt = map . get ( "CNT" ) = = null ? 0 : Integer . valueOf ( map . get ( "CNT" ) . toString ( ) ) ;
if ( cnt > 0 ) {
//删除旧数据,避免插入重复数据
jdbcTemplate . execute ( "delete from P_IRS_SHRCB_CORP_FEATURE_RET" ) ;
}
//生成insert语句
StringBuffer insertSql = new StringBuffer ( "insert into P_IRS_SHRCB_CORP_FEATURE_RET(" ) . append ( columns ) . append ( ") values(" ) ;
String [ ] colArr = columns . split ( "," ) ;
String cols = "" ;
for ( int i = 0 ; i < colArr . length ; i + + ) {
cols + = "?," ;
}
insertSql . append ( cols . endsWith ( "," ) ? cols . substring ( 0 , cols . length ( ) - 1 ) : cols ) . append ( ")" ) ;
//设置批量参数
DataSource dataSource = jdbcTemplate . getDataSource ( ) ;
BatchSqlUpdate bsu = new BatchSqlUpdate ( dataSource , insertSql . toString ( ) ) ;
bsu . setBatchSize ( 1000 ) ;
String [ ] colDataTypeArr = colDataTypeStr . split ( "," ) ;
int [ ] colDataTypes = new int [ colDataTypeArr . length ] ;
for ( int i = 0 ; i < colDataTypeArr . length ; i + + ) {
if ( colDataTypeArr [ i ] . equals ( "varchar" ) ) {
colDataTypes [ i ] = Types . VARCHAR ;
} else if ( colDataTypeArr [ i ] . equals ( "decimal" ) ) {
colDataTypes [ i ] = Types . DECIMAL ;
} else if ( colDataTypeArr [ i ] . equals ( "date" ) | | colDataTypeArr [ i ] . equals ( "datetime" ) ) {
colDataTypes [ i ] = Types . DATE ;
} else {
colDataTypes [ i ] = Types . VARCHAR ;
}
}
bsu . setTypes ( colDataTypes ) ;
return bsu ;
}
/ * *
* 创建上农内评POC项目的客户特征库计算结果表
* @param custFeatureParams
* @param res
* /
private BatchSqlUpdate generateShrcbCorpCreateSqlMySql ( CustFeatureParamsVo custFeatureParams , List < CustFeatureRet > res ) {
StringBuffer createSql = new StringBuffer ( "create table P_IRS_SHRCB_CORP_FEATURE_RET(\n" ) ;
createSql . append ( "id varchar(60) comment 'ID',\n" ) ;
createSql . append ( "data_dt varchar(20) comment '数据日期',\n" ) ;