fix: 검수등록대기 목록에서 등록 누를 때, RMR 유효성 (중복) 검사 로직 추가
parent
379a755d44
commit
ab91d39ac4
|
|
@ -343,6 +343,77 @@ public class WebConfirm
|
|||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* TEMP_RMR 테이블의 RMR 데이터 중복을 검사합니다.
|
||||
* (HOLE_CODE, DEPTH_FROM, DEPTH_TO 조합 중복 검사)
|
||||
*
|
||||
* @param request HttpServletRequest
|
||||
* @param PROJECT_CODE 검사할 프로젝트 코드
|
||||
* @return 유효성 검사 결과 (success: true/false, errorMessage: "...")
|
||||
*/
|
||||
private Map<String, Object> validationCheckTempRmr(HttpServletRequest request, final String PROJECT_CODE) {
|
||||
Map<String, Object> result = new HashMap<>();
|
||||
DatabaseQuery validationQuery = null;
|
||||
ResultSet rs = null;
|
||||
|
||||
// HOLE_CODE, DEPTH_FROM, DEPTH_TO 조합으로 중복 건 조회 SQL
|
||||
final String validationSql = "SELECT " +
|
||||
" HOLE_CODE, " +
|
||||
" DEPTH_FROM, " +
|
||||
" DEPTH_TO, " +
|
||||
" COUNT(1) AS \"COUNT\" " +
|
||||
"FROM " +
|
||||
" TEMP_RMR " +
|
||||
"WHERE " +
|
||||
" PROJECT_CODE = [PROJECT_CODE] " +
|
||||
"GROUP BY " +
|
||||
" HOLE_CODE, " +
|
||||
" DEPTH_FROM, " +
|
||||
" DEPTH_TO " +
|
||||
"HAVING " +
|
||||
" 1 < COUNT(1)";
|
||||
|
||||
try {
|
||||
validationQuery = new DatabaseQuery(validationSql);
|
||||
validationQuery.setParam("PROJECT_CODE", PROJECT_CODE);
|
||||
|
||||
rs = validationQuery.execute(connection);
|
||||
|
||||
StringBuilder errorMessages = new StringBuilder();
|
||||
|
||||
while (rs.next()) {
|
||||
String holeCode = rs.getString("HOLE_CODE");
|
||||
double depthFrom = rs.getDouble("DEPTH_FROM");
|
||||
double depthTo = rs.getDouble("DEPTH_TO");
|
||||
int count = rs.getInt("COUNT");
|
||||
|
||||
errorMessages.append("- " + holeCode + " 시추공의 RMR 심도구간 " + depthFrom + "m ~ " + depthTo + "m 데이터가 " + count + "개 중복됨.\\n");
|
||||
}
|
||||
|
||||
if (errorMessages.length() > 0) {
|
||||
result.put("success", false);
|
||||
result.put("errorMessage", errorMessages.toString().trim());
|
||||
} else {
|
||||
result.put("success", true);
|
||||
result.put("errorMessage", "");
|
||||
}
|
||||
|
||||
} catch (SQLException e) {
|
||||
logger.error("RMR validation check error", e);
|
||||
result.put("success", false);
|
||||
result.put("errorMessage", "RMR 유효성 검사 중 데이터베이스 오류가 발생했습니다: " + e.getMessage());
|
||||
} finally {
|
||||
try {
|
||||
if (rs != null) rs.close();
|
||||
if (validationQuery != null) validationQuery.close();
|
||||
} catch (SQLException sqle) {
|
||||
logger.error("Error closing validation resources", sqle);
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
@ -391,6 +462,25 @@ public class WebConfirm
|
|||
throw new SQLException("등록에 실패하였습니다.\\n\\n토사 압밀시험 정보(TEMP_CONSOLIDATION) 중 시료코드, 하중, 간극비 조합이 중복되었습니다. 데이터를 확인해 주세요:\\n\\n" + errorMessage);
|
||||
}
|
||||
// ==========================================================================
|
||||
|
||||
|
||||
// ==========================================================================
|
||||
// RMR 정보(TEMP_RMR) PK 중복 체크 수행
|
||||
// ==========================================================================
|
||||
Map<String, Object> rmrValidation = validationCheckTempRmr(request, PROJECT_CODE);
|
||||
|
||||
if (!(Boolean) rmrValidation.get("success")) {
|
||||
String errorMessage = (String) rmrValidation.get("errorMessage");
|
||||
logger.warn("RMR validation failed for PROJECT_CODE [{}]: {}", PROJECT_CODE, errorMessage);
|
||||
|
||||
// SQLException을 발생시켜 전체 트랜잭션을 롤백하고 사용자에게 에러 메시지 전달
|
||||
throw new SQLException("등록에 실패하였습니다.\\n\\nRMR(암반평가) 정보 중 동일한 시추공 내에 중복된 심도 구간이 존재합니다. 중복 제거 후 다시 시도해주세요:\\n\\n" + errorMessage);
|
||||
}
|
||||
// ==========================================================================
|
||||
|
||||
|
||||
|
||||
|
||||
// 유효성 체크 ▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲
|
||||
|
||||
|
||||
|
|
@ -525,7 +615,7 @@ public class WebConfirm
|
|||
logger.warn("Header Date validation failed for PROJECT_CODE [{}]: {}", PROJECT_CODE, errorMessage);
|
||||
|
||||
// SQLException을 발생시켜 롤백 처리 및 사용자에게 메시지 전달
|
||||
throw new SQLException("등록에 실패하였습니다.\\n\\n시추공 정보(TEMP_HEADER)의 조사기간 형식이 올바르지 않습니다.\\nYYYYMMDD 형식의 8자리 숫자여야 합니다. 데이터를 확인해 주세요:\\n\\n" + errorMessage);
|
||||
throw new SQLException("등록에 실패하였습니다.\\n\\n시추공 정보(TEMP_HEADER)의 조사기간 형식이 올바르지 않습니다.\\nYYYYMMDD 형식의 8자리 숫자가 아니거나 실제 존재하지 않는 날짜입니다. 데이터를 확인해 주세요:\\n\\n" + errorMessage);
|
||||
}
|
||||
// ==========================================================================
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue