원천데이터테이블정보, 컬럼정보, 데이터정보 new 테이블 변경/ 테이블 변경에 따른 원천데이터 저장 로직 변경

This commit is contained in:
psh 2024-06-07 17:52:13 +09:00
parent 8421fb7edc
commit c548a9c1e2
9 changed files with 118 additions and 96 deletions

View File

@ -1,5 +1,6 @@
package egovframework.com.mtdata.comtsrcdata.mapper; package egovframework.com.mtdata.comtsrcdata.mapper;
import egovframework.com.mtdata.comtsrcdata.vo.ComtColVO;
import egovframework.com.mtdata.comtsrcdata.vo.ComtExtrtVO; import egovframework.com.mtdata.comtsrcdata.vo.ComtExtrtVO;
import egovframework.com.mtdata.comtsrcdata.vo.ComtTableVO; import egovframework.com.mtdata.comtsrcdata.vo.ComtTableVO;
import egovframework.com.mtdata.comtsrcdata.vo.ComtsrcdataVO; import egovframework.com.mtdata.comtsrcdata.vo.ComtsrcdataVO;
@ -17,14 +18,6 @@ public interface ComtsrcdataMapper {
*/ */
public int insertComtExtrtInfo(ComtExtrtVO vo) throws Exception; public int insertComtExtrtInfo(ComtExtrtVO vo) throws Exception;
/**
* 원천데이터를 [comtsrcdata]테이블에 저장
*
* @param vo
* @return
* @throws Exception
*/
public int insertComtSrcdataInfo(ComtsrcdataVO vo) throws Exception;
/** /**
* 원천데이터 테이블을 [comtsrcdatameta] 테이블에 저장 * 원천데이터 테이블을 [comtsrcdatameta] 테이블에 저장
@ -37,7 +30,7 @@ public interface ComtsrcdataMapper {
/** /**
* 원천데이터 테이블을 [comtsrcdatameta]테이블에 저장 * 원천데이터 [comtsrcdata] 테이블에 저장
* *
* @param vo * @param vo
* @return * @return
@ -45,6 +38,15 @@ public interface ComtsrcdataMapper {
*/ */
public int insertComtSrcdata(ComtsrcdataVO vo) throws Exception; public int insertComtSrcdata(ComtsrcdataVO vo) throws Exception;
/**
* 원천데이터의 컬럼정보 [comtsrcdatacol] 테이블에 저장
*
* @param vo
* @return
* @throws Exception
*/
public int insertComtSrcCol(ComtColVO vo) throws Exception;
// 원천데이터 jsonb type 테스트 샘플 // 원천데이터 jsonb type 테스트 샘플
public int updateDatasrc(ComtsrcdataVO vo) throws Exception; public int updateDatasrc(ComtsrcdataVO vo) throws Exception;

View File

@ -1,6 +1,7 @@
package egovframework.com.mtdata.comtsrcdata.service; package egovframework.com.mtdata.comtsrcdata.service;
import egovframework.com.mtdata.comtsrcdata.dto.ComtsrcdataDTO; import egovframework.com.mtdata.comtsrcdata.dto.ComtsrcdataDTO;
import egovframework.com.mtdata.comtsrcdata.vo.ComtColVO;
import egovframework.com.mtdata.comtsrcdata.vo.ComtExtrtVO; import egovframework.com.mtdata.comtsrcdata.vo.ComtExtrtVO;
import egovframework.com.mtdata.comtsrcdata.vo.ComtTableVO; import egovframework.com.mtdata.comtsrcdata.vo.ComtTableVO;
import egovframework.com.mtdata.comtsrcdata.vo.ComtsrcdataVO; import egovframework.com.mtdata.comtsrcdata.vo.ComtsrcdataVO;
@ -36,6 +37,15 @@ public interface ComtsrcdataService {
public int insertComtTabledataInfo(ComtTableVO vo) throws Exception; public int insertComtTabledataInfo(ComtTableVO vo) throws Exception;
/**
* 원천데이터의 컬럼정보 [comtsrcdatacol] 테이블에 저장
*
* @param vo
* @return
* @throws Exception
*/
public int insertComtSrcCol(ComtColVO vo) throws Exception;
/** /**
* test * test

View File

@ -3,6 +3,7 @@ package egovframework.com.mtdata.comtsrcdata.service.impl;
import egovframework.com.mtdata.comtsrcdata.dto.ComtsrcdataDTO; import egovframework.com.mtdata.comtsrcdata.dto.ComtsrcdataDTO;
import egovframework.com.mtdata.comtsrcdata.mapper.ComtsrcdataMapper; import egovframework.com.mtdata.comtsrcdata.mapper.ComtsrcdataMapper;
import egovframework.com.mtdata.comtsrcdata.service.ComtsrcdataService; import egovframework.com.mtdata.comtsrcdata.service.ComtsrcdataService;
import egovframework.com.mtdata.comtsrcdata.vo.ComtColVO;
import egovframework.com.mtdata.comtsrcdata.vo.ComtExtrtVO; import egovframework.com.mtdata.comtsrcdata.vo.ComtExtrtVO;
import egovframework.com.mtdata.comtsrcdata.vo.ComtTableVO; import egovframework.com.mtdata.comtsrcdata.vo.ComtTableVO;
import egovframework.com.mtdata.comtsrcdata.vo.ComtsrcdataVO; import egovframework.com.mtdata.comtsrcdata.vo.ComtsrcdataVO;
@ -33,6 +34,12 @@ public class ComtsrcdataServiceImpl extends EgovAbstractServiceImpl implements C
return comtsrcdataMapper.insertComtTabledataInfo(vo); return comtsrcdataMapper.insertComtTabledataInfo(vo);
} }
@Override
public int insertComtSrcCol(ComtColVO vo) throws Exception {
return comtsrcdataMapper.insertComtSrcCol(vo);
}
@Override @Override
public int updateDatasrc(ComtsrcdataVO vo) throws Exception { public int updateDatasrc(ComtsrcdataVO vo) throws Exception {
return comtsrcdataMapper.updateDatasrc(vo); return comtsrcdataMapper.updateDatasrc(vo);

View File

@ -7,10 +7,10 @@ import lombok.Setter;
@Getter @Getter
@Setter @Setter
public class ComtColVO { public class ComtColVO {
/** 원천데이터 테이블 ID */
private int srcDataMetaId;
/** 원천데이터 컬럼 ID*/ /** 원천데이터 컬럼 ID*/
private int srcDataColId; private int srcDataColId;
/** 원천데이터 테이블 ID */
private int srcDataMetaId;
/** 원천데이터 컬럼명 */ /** 원천데이터 컬럼명 */
private String srcDataColNm; private String srcDataColNm;
} }

View File

@ -7,10 +7,10 @@ import lombok.Setter;
@Getter @Getter
@Setter @Setter
public class ComtTableVO { public class ComtTableVO {
/** 원천데이터 데이터 ID */
private int srcDataId ;
/** 원천데이터 테이블 ID */ /** 원천데이터 테이블 ID */
private int srcDataMetaId; private int srcDataMetaId;
/** 원천데이터 데이터 ID */
private int extrId ;
/** 원천데이터 테이블 이름 */ /** 원천데이터 테이블 이름 */
private String srcDataTblNm; private String srcDataTblNm;

View File

@ -7,10 +7,10 @@ import lombok.Setter;
@Getter @Getter
@Setter @Setter
public class ComtsrcdataVO { public class ComtsrcdataVO {
/** 원천데이터 데이터 ID */ /** ID */
private int srcDataId; private int srcDataId;
/** 추출 ID */ /** 원천데이터 테이블 정보 ID */
private int extrId; private int srcDataMetaId ;
/** 원천데이터 값 */ /** 원천데이터 값 */
private String srcDataVl; private String srcDataVl;
} }

View File

@ -70,9 +70,8 @@ public class ComtsrcdataController {
} }
obj.putAll(resultMap); obj.putAll(resultMap);
ComtsrcdataVO vo = new ComtsrcdataVO(); ComtsrcdataVO vo = new ComtsrcdataVO();
vo.setExtrId(6);
vo.setSrcDataVl(obj.toString()); vo.setSrcDataVl(obj.toString());
service.insertComtSrcdata(vo); // service.insertComtSrcdata(vo);
} }
return "원천데이터 컨트롤러 ::"; return "원천데이터 컨트롤러 ::";

View File

@ -1,14 +1,19 @@
package egovframework.com.mtdata.schema.service.impl; package egovframework.com.mtdata.schema.service.impl;
import java.sql.*; import java.sql.*;
import java.util.HashMap;
import java.util.Map;
import javax.annotation.Resource; import javax.annotation.Resource;
import egovframework.com.mtdata.comtsrcdata.service.ComtsrcdataService; import egovframework.com.mtdata.comtsrcdata.service.ComtsrcdataService;
import egovframework.com.mtdata.comtsrcdata.vo.ComtColVO;
import egovframework.com.mtdata.comtsrcdata.vo.ComtExtrtVO; import egovframework.com.mtdata.comtsrcdata.vo.ComtExtrtVO;
import egovframework.com.mtdata.comtsrcdata.vo.ComtTableVO;
import egovframework.com.mtdata.comtsrcdata.vo.ComtsrcdataVO; import egovframework.com.mtdata.comtsrcdata.vo.ComtsrcdataVO;
import egovframework.com.mtdata.database.vo.ColumnInfoVO; import egovframework.com.mtdata.database.vo.ColumnInfoVO;
import egovframework.com.mtdata.database.vo.TableInfoVO; import egovframework.com.mtdata.database.vo.TableInfoVO;
import org.json.simple.JSONObject;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -90,6 +95,7 @@ public class MySQLSchemaViewerImpl implements DatabaseSchemaViewer {
// } // }
} }
// 기관정보 스키마
private void processDatabases(Connection conn, DatabaseInfoVO dbConnInfoVO) { private void processDatabases(Connection conn, DatabaseInfoVO dbConnInfoVO) {
String selectDbSql = "SELECT SCHEMA_NAME AS `Database` FROM information_schema.SCHEMATA WHERE SCHEMA_NAME NOT IN ('information_schema', 'mysql', 'performance_schema', 'sys')"; String selectDbSql = "SELECT SCHEMA_NAME AS `Database` FROM information_schema.SCHEMATA WHERE SCHEMA_NAME NOT IN ('information_schema', 'mysql', 'performance_schema', 'sys')";
try (Statement stmt = conn.createStatement(); ResultSet databases = stmt.executeQuery(selectDbSql)) { try (Statement stmt = conn.createStatement(); ResultSet databases = stmt.executeQuery(selectDbSql)) {
@ -111,7 +117,7 @@ public class MySQLSchemaViewerImpl implements DatabaseSchemaViewer {
if (insertDbList > 0) { if (insertDbList > 0) {
dbVo.setSysId(dbConnInfoVO.getSysId()); dbVo.setSysId(dbConnInfoVO.getSysId());
tableProcess(conn, dbVo); tableProcess(conn, dbVo);
comtProcess(conn, dbVo);
log.info("Database info successfully inserted for: {}", dbNm); log.info("Database info successfully inserted for: {}", dbNm);
} else { } else {
log.warn("No database info was inserted for: {}", dbNm); log.warn("No database info was inserted for: {}", dbNm);
@ -123,7 +129,7 @@ public class MySQLSchemaViewerImpl implements DatabaseSchemaViewer {
} }
//psh // 기관정보 테이블+컬럼
private void tableProcess(Connection conn, DatabaseInfoVO dbVo) throws SQLException { private void tableProcess(Connection conn, DatabaseInfoVO dbVo) throws SQLException {
// String selectTableSql = "SELECT TABLE_NAME AS `TableName` FROM information_schema.tables WHERE table_schema="+dbNm+"and table_type=`BASE TABLE`"; // String selectTableSql = "SELECT TABLE_NAME AS `TableName` FROM information_schema.tables WHERE table_schema="+dbNm+"and table_type=`BASE TABLE`";
DatabaseMetaData metaData = conn.getMetaData(); DatabaseMetaData metaData = conn.getMetaData();
@ -144,6 +150,7 @@ public class MySQLSchemaViewerImpl implements DatabaseSchemaViewer {
tbVo.setTableNm(tbNm); tbVo.setTableNm(tbNm);
log.info("TableName :", tbNm); log.info("TableName :", tbNm);
int insertTbCnt = dbService.insertDbTblInfo(tbVo); int insertTbCnt = dbService.insertDbTblInfo(tbVo);
comtProcess(conn, dbVo, tbVo);
if (insertTbCnt > 0) { if (insertTbCnt > 0) {
log.info("TABLE info successfully inserted for: {}", tbNm); log.info("TABLE info successfully inserted for: {}", tbNm);
@ -185,69 +192,70 @@ public class MySQLSchemaViewerImpl implements DatabaseSchemaViewer {
//psh // 원천데이터 처리
private void comtProcess(Connection conn, DatabaseInfoVO dbVo) throws SQLException { private void comtProcess(Connection conn, DatabaseInfoVO dbVo, TableInfoVO tbVo) throws SQLException {
DatabaseMetaData metaData = conn.getMetaData(); try {
try (ResultSet tables = metaData.getTables(null, dbVo.getDbNm(), null, new String[]{"TABLE"})){ // [ comtextrtblinfo ] 원천데이터 추출 정보 저장
// 원천데이터 추출 정보 저장
ComtExtrtVO comExVo = new ComtExtrtVO(); ComtExtrtVO comExVo = new ComtExtrtVO();
comExVo.setSysId(dbVo.getSysId()); comExVo.setSysId(dbVo.getSysId());
int extCnt = comtsrcdataService.insertComtExtrtInfo(comExVo); int extCnt = comtsrcdataService.insertComtExtrtInfo(comExVo);
if (extCnt > 0) { if (extCnt > 0) {
int checkSysId = dbVo.getSysId();
log.info("comtExInfo insert success : ", checkSysId);
String dbNm = dbVo.getDbNm(); String dbNm = dbVo.getDbNm();
String tbNm = tbVo.getTableNm();
while (tables.next()) { // [ comtsrcdatameta_new ] 원천테이블의 테이블 정보 저장
String tbNm = tables.getString("TABLE_NAME"); ComtTableVO comtTableVo = new ComtTableVO();
if(tbNm.equals("sys_config")){ comtTableVo.setExtrId(comExVo.getExtrId());
break; comtTableVo.setSrcDataTblNm(tbNm);
} int insertTbCnt = comtsrcdataService.insertComtTabledataInfo(comtTableVo);
// 원천데이터 저장 if (insertTbCnt > 0) {
String selectTableSql = "SELECT * FROM "+dbNm+"."+tbNm; String selectTableSql = "SELECT * FROM "+dbNm+"."+tbNm;
Statement stmt = conn.createStatement(); Statement stmt = conn.createStatement();
ResultSet datas = stmt.executeQuery(selectTableSql); ResultSet datas = stmt.executeQuery(selectTableSql);
ResultSetMetaData rsmd = datas.getMetaData();
int colCnt = rsmd.getColumnCount();
JSONObject obj = new JSONObject();
int insertDataCnt = 0;
int insertColCnt = 0;
// [ comtsrcdatacol_new ] 원천테이블의 컬럼 정보 저장
for (int i=0; i<colCnt; i++) {
ComtColVO colVo = new ComtColVO();
colVo.setSrcDataColNm(rsmd.getColumnLabel(i+1));
colVo.setSrcDataMetaId(comtTableVo.getSrcDataMetaId());
insertColCnt = comtsrcdataService.insertComtSrcCol(colVo);
}
// [ comtsrcdata_new ] 원천데이터 저장
if(insertColCnt > 0){
while (datas.next()){ while (datas.next()){
int i = 0; Map<String, String> dataVlMap = new HashMap<>();
ComtsrcdataVO comSrcVo = new ComtsrcdataVO(); for (int i=0; i<colCnt; i++) {
comSrcVo.setExtrId(comExVo.getExtrId()); String columnName = rsmd.getColumnLabel(i+1);
String value = datas.getObject(i).toString(); String value = datas.getString(i+1);
// comSrcVo.setSrcDataVl(); dataVlMap.put(columnName, value);
}
obj.putAll(dataVlMap);
ComtsrcdataVO srcVo = new ComtsrcdataVO();
srcVo.setSrcDataVl(obj.toString());
srcVo.setSrcDataMetaId(comtTableVo.getSrcDataMetaId());
insertDataCnt = comtsrcdataService.insertComtSrcdata(srcVo);
int insertTbCnt = comtsrcdataService.insertComtSrcdataInfo(comSrcVo); if(insertDataCnt > 0){
i++; log.info("all data insert SUCCESS!!!!!!");
}else{
log.warn("No DATA was inserted for: {}", tbNm);
}
}
}else{
log.warn("No COLUMN info was inserted for: {}", tbNm);
} }
}else{
log.warn("No Table info was inserted for: {}", tbNm);
// if (insertTbCnt > 0) {
//
// log.info("COMTSRCDATA successfully inserted for: {}", tbNm);
// ResultSet columns = metaData.getColumns(null, dbVo.getDbNm(), tbNm, "%");
// ResultSet pk = metaData.getPrimaryKeys(null, dbVo.getDbNm(), tbNm);
// 컬럼
// while (columns.next()) {
// String columnName = columns.getString(4);
// String columnType = columns.getString(6);
// boolean nullable = columns.getInt(11) == 0 ? false : true;;
//
// ColumnInfoVO colVo = new ColumnInfoVO();
// dbService.insertTblColInfo(colVo);
// System.out.println("\tColumn: " + columnName+ " (" + columnType + ")");
// }
// } else {
// log.warn("No TABLE info was inserted for: {}", tbNm);
// }
} }
} }
} catch (Exception e) { } catch (Exception e) {

View File

@ -26,35 +26,31 @@
(#{extrId}, CURRENT_TIMESTAMP, #{sysId}) (#{extrId}, CURRENT_TIMESTAMP, #{sysId})
</insert> </insert>
<insert id="insertComtSrcdataInfo" parameterType="ComtsrcdataVO">
<selectKey resultType="int" keyProperty="srcDataId" order="BEFORE">
SELECT nextval('comtsrcdata_extr_tbl_id_seq') as srcDataId
</selectKey>
insert into comtsrcdata
(src_data_id, extr_id, src_data_vl)
values
(#{srcDataId}, #{extrId}, #{srcDataVl})
</insert>
<insert id="insertComtTabledataInfo" parameterType="ComtTableVO"> <insert id="insertComtTabledataInfo" parameterType="ComtTableVO">
<selectKey resultType="int" keyProperty="srcDataId" order="BEFORE"> <selectKey resultType="int" keyProperty="srcDataMetaId" order="BEFORE">
SELECT nextval('comtsrcdatameta_src_data_meta_id_seq') as srcDataId SELECT nextval('comtsrcdatameta_new_src_data_meta_id_seq') as srcDataMetaId
</selectKey> </selectKey>
insert into comtsrcdatameta (src_data_meta_id, src_data_id, src_data_tbl_nm) insert into comtsrcdatameta_new (src_data_meta_id, extr_id, src_data_tbl_nm)
values (#{srcDataMetaId}, #{srcDataId}, #{srcDataTblNm}) values (#{srcDataMetaId}, #{extrId}, #{srcDataTblNm})
</insert> </insert>
<insert id="insertComtSrcdata" parameterType="ComtsrcdataVO"> <insert id="insertComtSrcdata" parameterType="ComtsrcdataVO">
<selectKey resultType="int" keyProperty="srcDataId" order="BEFORE"> <selectKey resultType="int" keyProperty="srcDataId" order="BEFORE">
SELECT nextval('comtsrcdata_extr_tbl_id_seq') as srcDataId SELECT nextval('comtsrcdata_new_src_data_id_seq') as srcDataId
</selectKey> </selectKey>
insert into comtsrcdata (src_data_id, extr_id, src_data_vl) insert into comtsrcdata_new (src_data_id, src_data_meta_id, src_data_vl)
values (#{srcDataId}, #{extrId}, ( (#{srcDataVl})::jsonb ) ) values (#{srcDataId}, #{srcDataMetaId}, ( (#{srcDataVl})::jsonb ) )
</insert> </insert>
<insert id="insertComtSrcCol" parameterType="ComtColVO">
<selectKey resultType="int" keyProperty="srcDataColId" order="BEFORE">
SELECT nextval('comtsrcdatacol_new_src_data_col_id_seq') as srcDataColId
</selectKey>
insert into comtsrcdatacol_new (src_data_col_id, src_data_meta_id, src_data_col_nm)
values (#{srcDataColId}, #{srcDataMetaId}, #{srcDataColNm} )
</insert>
<!--sample-->
<update id="updateDatasrc" parameterType="ComtsrcdataVO"> <update id="updateDatasrc" parameterType="ComtsrcdataVO">
update comtsrcdata update comtsrcdata
set src_data_vl= ( (#{srcDataVl})::jsonb ) set src_data_vl= ( (#{srcDataVl})::jsonb )