검증 프로그램
데이터 인터페이스 또는 데이터 유효성을 검증하는 프로그램
검증은 아래와 같이 두 가지 경우로 나눌 수 있다.
- 특정 검증 조건 / 유효성 검사
- TABLE 명, 검사할 조건이 담긴 SQL ID
- SQL에는 이상이 있는 조건을 걸어 COUNT(1)한다. 예를 들어 쿠폰 금액이 상이한 경우.
- 인터페이스 완료 후 인터페이스 소스/타겟 두 테이블 간 레코드 비교
- 소스/타겟 매퍼쌍, 소스/타겟 TABLE 소유자쌍, 소스/타겟 TABLE 명쌍, 검사할 검사할 조건이 담긴 SQL ID쌍
- SQL에는 비교할 대상의 COUNT(1), 또는 금액을 SUM 한다. 예를 들어 데이터 총건수, 이관된 금액의 합.
인터페이스 후의 검증에는 소스/타겟 테이블의 정보가 필요하다보니 많은 정보가 필요함.
1. 특정 검증 조건/유효성 검사
검사할 TABLE 명, 검사할 SQL ID
2. 인터페이스 후 소스/타겟 두 테이블 간 레코드 비교
검사할 TABLE 명
검증 목록 조회 서비스
검증 실행 서비스
batchGb: 1이면 특정 검증 조건으로 검사하는 것이고, 2이면 두 테이블간 데이터를 비교하는 것이다. mainSqlId: 소스 테이블을 검사할 SQL ID mainDbUser: 소스 테이블의 업무(모듈) 구분. 아래의 WM은 물류, SD는 영업, CM은 공통. 혹은 카카오나 외부 결제사 등의 이관데이터도 될 수 있다. targetSqlId: 타겟 테이블을 검사할 SQL ID targetDbUser: 타겟 테이블의 업무(모듈) 구분.
public void runValidJob(Map<String, Object> dsBatchCondMap, Map<String, Object> dsBatchParamMap) throws Exception{
Map<String, Object> batchInfo = selectBatchInfo(dsBatchCondMap);
String batchGb = (String) batchInfo.get("BATCH_GB");
String mainSqlId = (String) batchInfo.get("MAIN_SQL_ID");
String mainDbUser = (String) batchInfo.get("MAIN_DB_USER");
String targetSqlId = (String) batchInfo.get("TARGET_SQL_ID");
String targetDbUser = (String) batchInfo.get("TARGET_DB_USER");
String userId = (String) batchInfo.get("USER_ID");
List<Map<String, Object>> mainList = null;
List<Map<String, Object>> targetList = null;
StringBuffer batchStr = new StringBuffer(64);
for (String mainKey : dsBatchParamMap.keySet()) {
batchStr.append(mainKey).append("=").append(dsBatchParamMap.get(mainKey)).append(", ");
}
batchInfo.put("PARAM_VALS", batchStr.toString());
if( batchGb.equals("1") ) {
if( mainDbUser.equals("WM")){
commonMapper.exec(mainSqlId, dsBatchParamMap);
}else if( mainDbUser.equals("CM")){
cmboMapper.exec(mainSqlId, dsBatchParamMap);
}else if( mainDbUser.equals("SD")){
strMapper.exec(mainSqlId, dsBatchParamMap);
}
} else if( batchGb.equals("2") ) {
if( mainDbUser.equals("WM")){
mainList = commonMapper.selectList(mainSqlId, dsBatchParamMap);
}else if( mainDbUser.equals("CM")){
mainList = cmboMapper.selectList(mainSqlId, dsBatchParamMap);
}else if( mainDbUser.equals("SD")){
mainList = strMapper.selectList(mainSqlId, dsBatchParamMap);
}
if( targetDbUser.equals("WM")){
targetList = commonMapper.selectList(targetSqlId, dsBatchParamMap);
}else if( targetDbUser.equals("CM")){
targetList = cmboMapper.selectList(targetSqlId, dsBatchParamMap);
}else if( targetDbUser.equals("SD")){
targetList = strMapper.selectList(targetSqlId, dsBatchParamMap);
}
Map<String,Object> validateNoMap = selectBatchKey(batchInfo);
String validateNo = (String) validateNoMap.get("VALIDATE_NO");
batchInfo.put("VALIDATE_NO", validateNo);
batchInfo.put("UESR_ID", userId);
commonMapper.insert("saveValidateMst",batchInfo);
int seq = 0;
if(mainList.size() == targetList.size()){
//String validateNo = "";
for(int i=0; i<mainList.size(); i++){
Map<String, Object> mainMap = mainList.get(i);
Map<String, Object> targetMap = targetList.get(i);
/*if(i==0){
//commonMapper.exec("CmLg070.saveValidateMst", batchInfo);
Map<String,Object> validateNoMap = selectBatchKey(batchInfo);
validateNo = (String) validateNoMap.get("VALIDATE_NO");
batchInfo.put("VALIDATE_NO", validateNo);
batchInfo.put("UESR_ID", userId);
commonMapper.insert("saveValidateMst",batchInfo);
}*/
String valKeyNm = (String)mainMap.get("VAL_KEY");
Map<String, Object> saveMap = new HashMap();
for (String mainKey : mainMap.keySet()) {
if(mainKey.equals("VAL_KEY")){
continue;
}
if(mainMap.get(mainKey)==null){
continue;
}
seq++;
saveMap.put("VALIDATE_NO", validateNo);
saveMap.put("UESR_ID",userId);
saveMap.put("SEQ", seq);
saveMap.put("VALIDATE_NM", valKeyNm+" "+mainKey);
if( mainMap.get(mainKey) instanceof BigDecimal ){
BigDecimal sourceValue = (BigDecimal) mainMap.get(mainKey);
BigDecimal targetValue = (BigDecimal) targetMap.get(mainKey);
saveMap.put("SOURCE_VALUE", mainMap.get(mainKey));
saveMap.put("TARGET_VALUE", targetMap.get(mainKey));
if(sourceValue.compareTo(targetValue)==0){
saveMap.put("VALIDATE_YN", "1");
commonMapper.insert("saveValidateDtl", saveMap);
}else{
saveMap.put("VALIDATE_YN", "0");
commonMapper.insert("saveValidateDtl", saveMap);
}
}else{
String sourceValue = (String) mainMap.get(mainKey);
if(sourceValue==null){
sourceValue = "";
}
String targetValue = (String) targetMap.get(mainKey);
if(targetValue==null){
targetValue = "";
}
saveMap.put("SOURCE_VALUE", mainMap.get(mainKey));
saveMap.put("TARGET_VALUE", targetMap.get(mainKey));
if(sourceValue.equals(targetValue)){
saveMap.put("VALIDATE_YN", "1");
commonMapper.insert("saveValidateDtl", saveMap);
}else{
saveMap.put("VALIDATE_YN", "0");
commonMapper.insert("saveValidateDtl", saveMap);
}
}
}
}
Map<String,Object> validateCheckMap = selectBatchCheck(batchInfo);
commonMapper.update("CmLg070.saveValidateEnd",validateCheckMap);
//commonMapper.exec("CmLg070.saveValidateEnd", mstUpdateMap);
}else{
//throw new Exception("메인과 TARGET의 결과로우수가 일치 하지 않습니다.");
Map<String,Object> validateCheckMap = new HashMap();
validateCheckMap.put("VALIDATE_YN","0");
validateCheckMap.put("VALIDATE_RESULT_MSG","메인과 TARGET의 결과로우수가 일치 하지 않습니다.");
validateCheckMap.put("VALIDATE_NO",validateNo);
commonMapper.update("saveValidateEnd",validateCheckMap);
}
}
}