feat: 검수시스템 > 검수등록대기 목록에서 등록 시, 불연속면 정보(TEMP_DSF) PK 중복 유효성 체크 추가

main
thkim 2026-03-17 14:46:02 +09:00
parent 1f2198e11f
commit 055e3dac75
1 changed files with 94 additions and 0 deletions

View File

@ -415,6 +415,86 @@ public class WebConfirm
}
/**
* TEMP_DSF (DSF) .
* (DSF_DEPTH_FROM, DSF_DEPTH_TO, DSF_DECOMPOSITION, DSF_STRENGTH, DSF_FRACTURING, HOLE_CODE )
*
* @param request HttpServletRequest
* @param PROJECT_CODE
* @return (success: true/false, errorMessage: "...")
*/
private Map<String, Object> validationCheckTempDsf(HttpServletRequest request, final String PROJECT_CODE) {
Map<String, Object> result = new HashMap<>();
DatabaseQuery validationQuery = null;
ResultSet rs = null;
// PK 구성 컬럼 전체를 그룹화하여 2건 이상인 데이터 조회
final String validationSql = "SELECT " +
" HOLE_CODE, " +
" DSF_DEPTH_FROM, " +
" DSF_DEPTH_TO, " +
" DSF_DECOMPOSITION, " +
" DSF_STRENGTH, " +
" DSF_FRACTURING, " +
" COUNT(1) AS \"COUNT\" " +
"FROM " +
" TEMP_DSF " +
"WHERE " +
" PROJECT_CODE = [PROJECT_CODE] " +
"GROUP BY " +
" HOLE_CODE, " +
" DSF_DEPTH_FROM, " +
" DSF_DEPTH_TO, " +
" DSF_DECOMPOSITION, " +
" DSF_STRENGTH, " +
" DSF_FRACTURING " +
"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 dFrom = rs.getDouble("DSF_DEPTH_FROM");
double dTo = rs.getDouble("DSF_DEPTH_TO");
String decomp = isnull(rs.getString("DSF_DECOMPOSITION"), "미입력");
String strength = isnull(rs.getString("DSF_STRENGTH"), "미입력");
String fract = isnull(rs.getString("DSF_FRACTURING"), "미입력");
int count = rs.getInt("COUNT");
errorMessages.append("- " + holeCode + " 시추공의 불연속면 데이터(심도:" + dFrom + "~" + dTo + "m, 구성:" + decomp + ", 강도:" + strength + ", 간격:" + fract + ")가 " + 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("DSF validation check error", e);
result.put("success", false);
result.put("errorMessage", "불연속면 유효성 검사 중 데이터베이스 오류가 발생했습니다: " + 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;
}
@ -479,6 +559,20 @@ public class WebConfirm
// ==========================================================================
// ==========================================================================
// 불연속면 정보(TEMP_DSF) PK 중복 체크 수행
// ==========================================================================
Map<String, Object> dsfValidation = validationCheckTempDsf(request, PROJECT_CODE);
if (!(Boolean) dsfValidation.get("success")) {
String errorMessage = (String) dsfValidation.get("errorMessage");
logger.warn("DSF validation failed for PROJECT_CODE [{}]: {}", PROJECT_CODE, errorMessage);
// SQLException을 발생시켜 전체 트랜잭션을 롤백하고 사용자에게 에러 메시지 전달
throw new SQLException("등록에 실패하였습니다.\\n\\n불연속면(DSF) 정보 중 모든 필드값이 완전히 동일한 중복 데이터가 존재합니다. 데이터를 확인해 주세요:\\n\\n" + errorMessage);
}
// ==========================================================================
// 유효성 체크 ▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲