diff --git a/irbs.feature/src/main/java/irbs/feature/service/impl/CustFeatureCalcBatchServiceImpl.java b/irbs.feature/src/main/java/irbs/feature/service/impl/CustFeatureCalcBatchServiceImpl.java index 0d844cc..9d7312d 100644 --- a/irbs.feature/src/main/java/irbs/feature/service/impl/CustFeatureCalcBatchServiceImpl.java +++ b/irbs.feature/src/main/java/irbs/feature/service/impl/CustFeatureCalcBatchServiceImpl.java @@ -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> 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 res){ + private BatchSqlUpdate generateShrcbCorpCreateSqlDm(CustFeatureParamsVo custFeatureParams, List 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 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 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"); diff --git a/irbs.frontend/src/menus/menus.json b/irbs.frontend/src/menus/menus.json index da00774..b68bcea 100644 --- a/irbs.frontend/src/menus/menus.json +++ b/irbs.frontend/src/menus/menus.json @@ -63,7 +63,7 @@ /*查询管理/债项评级历史查询*/ {"type":"ROUTE", "order":600, "parentId":"menu.irbs.query", "id":"menu.irbs.query.pingAnLgdHist", "titleI18nKey":"menu.irbs.query.pingAnLgdHist", "icon":"eva-shake", "routeName":"route.irbs.query.pingAnLgdHist"}, /*查询管理/上农内评企业客户特征变量查询*/ - {"type":"ROUTE", "order":700, "parentId":"menu.irbs.query", "id":"menu.irbs.config.shrcbCorpCustFeature", "titleI18nKey":"menu.irbs.config.shrcbCorpCustFeature", "icon":"bi-file-earmark-ruled-fill", "routeName":"route.sys.comm.page", "routeQuery": {"id": "1a50a840-0e62-41b5-b952-9bd77a3775c2"}}, + {"type":"ROUTE", "order":700, "parentId":"menu.irbs.query", "id":"menu.irbs.query.shrcbCorpCustFeature", "titleI18nKey":"menu.irbs.query.shrcbCorpCustFeature", "icon":"bi-file-earmark-ruled-fill", "routeName":"route.sys.comm.page", "routeQuery": {"id": "1a50a840-0e62-41b5-b952-9bd77a3775c2"}}, {"type":"GROUP", "order":700, "parentId":"menu.irbs", "id":"menu.irbs.config", "titleI18nKey":"menu.irbs.config", "icon":"display_settings"}, /*系统配置/评级调整项定义*/ {"type":"ROUTE", "order":100, "parentId":"menu.irbs.config", "id":"menu.irbs.config.ratingAdjustment", "titleI18nKey":"menu.irbs.config.ratingAdjustment", "icon":"eva-map", "routeName":"route.sys.comm.page", "routeQuery": {"id": "9a803997-ee15-47cc-bed2-872ec92be17e"}},