HTTP 캐시 방지 헤더 설정 주석, 조치처리상태 관련 로직 수정 및 추가

dev
박성영 2 months ago
parent 490e48599c
commit 73016f1244

@ -54,8 +54,9 @@ public class EgovConfigWeb implements WebMvcConfigurer, ApplicationContextAware
/**
* Interceptor
* : .
* js, jsp, css ,
*/
@Override
/*@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new HandlerInterceptor() {
@Override
@ -67,7 +68,7 @@ public class EgovConfigWeb implements WebMvcConfigurer, ApplicationContextAware
return true;
}
}).addPathPatterns("/**"); // 모든 경로에 적용
}
}*/
/**
* Exception handling is now done using @ControllerAdvice in EgovExceptionAdvice class.

@ -317,7 +317,7 @@ public class CrdnRegistAndViewController {
/**
* .
*
*
* @param crdnYr
* @param crdnNo
* @param crdnPrcsSttsCd
@ -334,16 +334,16 @@ public class CrdnRegistAndViewController {
@Parameter(description = "단속 연도") @RequestParam String crdnYr,
@Parameter(description = "단속 번호") @RequestParam String crdnNo,
@Parameter(description = "처리 상태 코드") @RequestParam String crdnPrcsSttsCd) {
log.debug("단속 상태 업데이트 요청 - 단속연도: {}, 단속번호: {}, 상태코드: {}", crdnYr, crdnNo, crdnPrcsSttsCd);
CrdnRegistAndViewVO paramVO = new CrdnRegistAndViewVO();
paramVO.setCrdnYr(crdnYr);
paramVO.setCrdnNo(crdnNo);
paramVO.setCrdnPrcsSttsCd(crdnPrcsSttsCd);
int result = service.updateStatus(paramVO);
if (result > 0) {
return ApiResponseUtil.success("단속 상태가 성공적으로 업데이트되었습니다.");
} else {
@ -351,4 +351,38 @@ public class CrdnRegistAndViewController {
}
}
/**
* .
* : ( 1) API
*
* @param crdnYr
* @param crdnNo
* @return ResponseEntity
*/
@GetMapping("/checkActCmpltCd.ajax")
@Operation(summary = "조치처리상태 확인", description = "조치처리상태 코드를 조회합니다.")
@ApiResponses(value = {
@ApiResponse(responseCode = "200", description = "조치처리상태 조회 성공"),
@ApiResponse(responseCode = "400", description = "조치처리상태 조회 실패"),
@ApiResponse(description = "오류로 인한 실패")
})
public ResponseEntity<?> checkActCmpltCd(
@Parameter(description = "단속 연도") @RequestParam String crdnYr,
@Parameter(description = "단속 번호") @RequestParam String crdnNo) {
log.debug("조치처리상태 확인 요청 - 단속연도: {}, 단속번호: {}", crdnYr, crdnNo);
CrdnRegistAndViewVO paramVO = new CrdnRegistAndViewVO();
paramVO.setCrdnYr(crdnYr);
paramVO.setCrdnNo(crdnNo);
String actCmpltCd = service.selectActCmpltCd(paramVO);
if (actCmpltCd != null) {
return ApiResponseUtil.success(actCmpltCd, "조치처리상태 조회가 완료되었습니다.");
} else {
return ApiResponseUtil.error("해당 단속 정보를 찾을 수 없습니다.");
}
}
}

@ -98,4 +98,12 @@ public interface CrdnRegistAndViewMapper {
*/
int updateOnlyDate(CrdnRegistAndViewVO vo);
/**
* .
* : tb_act_info [ 0, 1, 3]
* @param vo PK (crdnYr, crdnNo) VO
* @return (0:, 1:, 3:)
*/
String selectActCmpltCd(CrdnRegistAndViewVO vo);
}

@ -75,10 +75,19 @@ public interface CrdnRegistAndViewService {
/**
* .
*
*
* @param vo (crdnYr, crdnNo, crdnPrcsSttsCd) VO
* @return
*/
int updateStatus(CrdnRegistAndViewVO vo);
/**
* .
* : tb_act_info
*
* @param vo PK (crdnYr, crdnNo) VO
* @return (0:, 1:, 3:)
*/
String selectActCmpltCd(CrdnRegistAndViewVO vo);
}

@ -241,29 +241,49 @@ public class CrdnRegistAndViewServiceImpl extends EgovAbstractServiceImpl implem
/**
* .
*
*
* @param vo (crdnYr, crdnNo, crdnPrcsSttsCd) VO
* @return
*/
@Override
public int updateStatus(CrdnRegistAndViewVO vo) {
log.debug("단속 상태 업데이트 - 단속연도: {}, 단속번호: {}, 상태코드: {}", vo.getCrdnYr(), vo.getCrdnNo(), vo.getCrdnPrcsSttsCd());
// PK(단속연도+단속번호) 필수값 검증
validatePrimaryKey(vo);
// 처리 상태 코드 필수값 검증
if (vo.getCrdnPrcsSttsCd() == null || vo.getCrdnPrcsSttsCd().trim().isEmpty()) {
log.warn("단속 상태 업데이트 실패 - 처리상태코드 미입력");
throw new MessageException("처리 상태 코드는 필수값입니다.");
}
// 단속 처리 일자를 현재 일자로 설정 (yyyyMMdd 형식)
vo.setCrdnPrcsYmd(LocalDate.now().toString().replace("-", ""));
// 상태 업데이트 수행
int result = mapper.updateStatus(vo);
log.debug("단속 상태 업데이트 완료 - 업데이트 건수: {}", result);
return result;
}
/**
* .
* : tb_act_info
*
* @param vo PK (crdnYr, crdnNo) VO
* @return (0:, 1:, 3:)
*/
@Override
public String selectActCmpltCd(CrdnRegistAndViewVO vo) {
log.debug("조치처리상태 코드 조회 - 단속연도: {}, 단속번호: {}", vo.getCrdnYr(), vo.getCrdnNo());
// PK(단속연도+단속번호) 필수값 검증
validatePrimaryKey(vo);
// 조치처리상태 코드 조회
String actCmpltCd = mapper.selectActCmpltCd(vo);
log.debug("조치처리상태 코드 조회 완료 - 조치처리상태: {}", actCmpltCd);
return actCmpltCd;
}
}

@ -6,12 +6,7 @@
<!-- 단속 목록 조회 -->
<select id="selectList" parameterType="CrdnRegistAndViewVO" resultType="CrdnRegistAndViewVO">
/* CrdnRegistAndViewMapper.selectList : 단속 목록 조회 */
SELECT m.*,
case when m.ACT_ALL_CNT = 0 then '0'
when m.ACT_ALL_CNT != 0 and m.ACT_ALL_CNT != m.ACT_COMPLT_CNT then '1'
when m.ACT_ALL_CNT != 0 and m.ACT_ALL_CNT = m.ACT_COMPLT_CNT then '2'
else '-'
end as ACT_CMPLT_CD /* [행위정보없음 0: , 미조치 : 1, 조치완료 : 3] */
SELECT m.*
FROM (
SELECT
c.CRDN_YR, /* 단속 연도 */
@ -70,6 +65,12 @@
ELSE act.VLTN_BDST END ACT_TYPE_CD_NM,
IFNULL(act_cnt.ACT_ALL_CNT, 0) as ACT_ALL_CNT,
IFNULL(act_cnt.ACT_COMPLT_CNT, 0) as ACT_COMPLT_CNT,
/* 중요로직: ACT_CMPLT_CD를 메인 SELECT에서 직접 계산 - 외부 SELECT에서 재계산 불필요 */
case when IFNULL(act_cnt.ACT_ALL_CNT, 0) = 0 then '0'
when IFNULL(act_cnt.ACT_ALL_CNT, 0) != 0 and IFNULL(act_cnt.ACT_ALL_CNT, 0) != IFNULL(act_cnt.ACT_COMPLT_CNT, 0) then '1'
when IFNULL(act_cnt.ACT_ALL_CNT, 0) != 0 and IFNULL(act_cnt.ACT_ALL_CNT, 0) = IFNULL(act_cnt.ACT_COMPLT_CNT, 0) then '3'
else '-'
end as ACT_CMPLT_CD, /* [행위정보없음 0: , 미조치 : 1, 조치완료 : 2] */
a.USG_IDX_CD, /* 용도 지수 코드 */
usg.USG_NM AS USG_IDX_CD_NM
FROM tb_crdn c
@ -136,11 +137,8 @@
) m
WHERE 1=1
<if test='schActCmpltCd != null and schActCmpltCd != ""'>
AND case when m.ACT_ALL_CNT = 0 then '0'
when m.ACT_ALL_CNT != 0 and m.ACT_ALL_CNT != m.ACT_COMPLT_CNT then '1'
when m.ACT_ALL_CNT != 0 and m.ACT_ALL_CNT = m.ACT_COMPLT_CNT then '2'
else '-'
end = #{schActCmpltCd} /* [행위정보없음 0: , 미조치 : 1, 조치완료 : 3] */
/* 중요로직: ACT_CMPLT_CD가 메인 SELECT에서 이미 계산되어 단순 비교만 수행 */
AND m.ACT_CMPLT_CD = #{schActCmpltCd} /* [행위정보없음 0: , 미조치 : 1, 조치완료 : 3] */
</if>
ORDER BY m.CRDN_YR DESC, m.CRDN_NO DESC
<if test='pagingYn != null and pagingYn == "Y"'>
@ -157,7 +155,13 @@
c.CRDN_YR,
c.CRDN_NO,
IFNULL(act_cnt.ACT_ALL_CNT, 0) as ACT_ALL_CNT,
IFNULL(act_cnt.ACT_COMPLT_CNT, 0) as ACT_COMPLT_CNT
IFNULL(act_cnt.ACT_COMPLT_CNT, 0) as ACT_COMPLT_CNT,
/* 중요로직: ACT_CMPLT_CD를 메인 SELECT에서 직접 계산 - 외부 WHERE에서 재계산 불필요 */
case when IFNULL(act_cnt.ACT_ALL_CNT, 0) = 0 then '0'
when IFNULL(act_cnt.ACT_ALL_CNT, 0) != 0 and IFNULL(act_cnt.ACT_ALL_CNT, 0) != IFNULL(act_cnt.ACT_COMPLT_CNT, 0) then '1'
when IFNULL(act_cnt.ACT_ALL_CNT, 0) != 0 and IFNULL(act_cnt.ACT_ALL_CNT, 0) = IFNULL(act_cnt.ACT_COMPLT_CNT, 0) then '3'
else '-'
end as ACT_CMPLT_CD /* [행위정보없음 0: , 미조치 : 1, 조치완료 : 3] */
FROM tb_crdn c
LEFT JOIN tb_pstn_info p ON p.CRDN_YR = c.CRDN_YR AND p.CRDN_NO = c.CRDN_NO AND p.DEL_YN = 'N'
LEFT JOIN (
@ -213,18 +217,16 @@
) m
WHERE 1=1
<if test='schActCmpltCd != null and schActCmpltCd != ""'>
AND case when m.ACT_ALL_CNT = 0 then '0'
when m.ACT_ALL_CNT != 0 and m.ACT_ALL_CNT != m.ACT_COMPLT_CNT then '1'
when m.ACT_ALL_CNT != 0 and m.ACT_ALL_CNT = m.ACT_COMPLT_CNT then '2'
else '-'
end = #{schActCmpltCd} /* [행위정보없음 0: , 미조치 : 1, 조치완료 : 3] */
/* 중요로직: ACT_CMPLT_CD가 메인 SELECT에서 이미 계산되어 단순 비교만 수행 */
AND m.ACT_CMPLT_CD = #{schActCmpltCd} /* [행위정보없음 0: , 미조치 : 1, 조치완료 : 2] */
</if>
</select>
<!-- 단속 단건 조회 -->
<select id="selectOne" parameterType="CrdnRegistAndViewVO" resultType="CrdnRegistAndViewVO">
/* CrdnRegistAndViewMapper.selectOne : 단속 단건 조회 */
SELECT
/* 중요로직: tb_act_info 테이블의 행위정보 집계로 조치처리상태 계산 */
SELECT
c.CRDN_YR,
c.CRDN_NO,
c.SGG_CD,
@ -258,13 +260,54 @@
c.REG_DT,
c.RGTR,
u.USER_ACNT AS RGTR_ACNT,
u.USER_NM AS RGTR_NM
u.USER_NM AS RGTR_NM,
case when IFNULL(act_cnt.ACT_ALL_CNT, 0) = 0 then '0'
when IFNULL(act_cnt.ACT_ALL_CNT, 0) != 0 and IFNULL(act_cnt.ACT_ALL_CNT, 0) != IFNULL(act_cnt.ACT_COMPLT_CNT, 0) then '1'
when IFNULL(act_cnt.ACT_ALL_CNT, 0) != 0 and IFNULL(act_cnt.ACT_ALL_CNT, 0) = IFNULL(act_cnt.ACT_COMPLT_CNT, 0) then '3'
else '-'
end as ACT_CMPLT_CD /* [행위정보없음 0, 미조치 1, 조치완료 3] */
FROM tb_crdn c
LEFT JOIN tb_cd_detail sgg ON sgg.CD_GROUP_ID = 'ORG_CD' AND sgg.CD_ID = c.SGG_CD
LEFT JOIN tb_cd_detail rgn ON rgn.CD_GROUP_ID = 'RGN_SE_CD' AND rgn.CD_ID = c.RGN_SE_CD
LEFT JOIN tb_cd_detail dscl ON dscl.CD_GROUP_ID = 'DSCL_MTHD_CD' AND dscl.CD_ID = c.DSCL_MTHD_CD
LEFT JOIN tb_cd_detail stts ON stts.CD_GROUP_ID = 'CRDN_PRCS_STTS_CD' AND stts.CD_ID = c.CRDN_PRCS_STTS_CD
LEFT JOIN tb_user u ON u.USER_ID = c.RGTR
LEFT JOIN (
SELECT
CRDN_YR,
CRDN_NO,
COUNT(1) as ACT_ALL_CNT,
SUM(CASE WHEN ACTN_PRCS_STTS_CD = '3' THEN 1 ELSE 0 END) as ACT_COMPLT_CNT
FROM tb_act_info
WHERE DEL_YN = 'N'
GROUP BY CRDN_YR, CRDN_NO
) act_cnt ON act_cnt.CRDN_YR = c.CRDN_YR AND act_cnt.CRDN_NO = c.CRDN_NO
WHERE c.DEL_YN = 'N'
AND c.CRDN_YR = #{crdnYr}
AND c.CRDN_NO = #{crdnNo}
</select>
<!-- 조치처리상태 코드 조회 -->
<select id="selectActCmpltCd" parameterType="CrdnRegistAndViewVO" resultType="String">
/* CrdnRegistAndViewMapper.selectActCmpltCd : 조치처리상태 코드 조회 */
/* 중요로직: tb_act_info 테이블의 행위정보 집계로 조치처리상태 계산 */
SELECT
case when IFNULL(act_cnt.ACT_ALL_CNT, 0) = 0 then '0'
when IFNULL(act_cnt.ACT_ALL_CNT, 0) != 0 and IFNULL(act_cnt.ACT_ALL_CNT, 0) != IFNULL(act_cnt.ACT_COMPLT_CNT, 0) then '1'
when IFNULL(act_cnt.ACT_ALL_CNT, 0) != 0 and IFNULL(act_cnt.ACT_ALL_CNT, 0) = IFNULL(act_cnt.ACT_COMPLT_CNT, 0) then '3'
else '-'
end as ACT_CMPLT_CD /* [행위정보없음 0, 미조치 1, 조치완료 3] */
FROM tb_crdn c
LEFT JOIN (
SELECT
CRDN_YR,
CRDN_NO,
COUNT(1) as ACT_ALL_CNT,
SUM(CASE WHEN ACTN_PRCS_STTS_CD = '3' THEN 1 ELSE 0 END) as ACT_COMPLT_CNT
FROM tb_act_info
WHERE DEL_YN = 'N'
GROUP BY CRDN_YR, CRDN_NO
) act_cnt ON act_cnt.CRDN_YR = c.CRDN_YR AND act_cnt.CRDN_NO = c.CRDN_NO
WHERE c.DEL_YN = 'N'
AND c.CRDN_YR = #{crdnYr}
AND c.CRDN_NO = #{crdnNo}

@ -88,7 +88,7 @@
<option value="">전체</option>
<option value="0" <c:if test="${param.schActCmpltCd eq '0'}">selected</c:if>>행위정보 없음</option>
<option value="1" <c:if test="${param.schActCmpltCd eq '1'}">selected</c:if>>미조치</option>
<option value="2" <c:if test="${param.schActCmpltCd eq '2'}">selected</c:if>>조치완료</option>
<option value="3" <c:if test="${param.schActCmpltCd eq '3'}">selected</c:if>>조치완료</option>
</select>
</li>
</ul>
@ -308,10 +308,10 @@
align: 'center',
width: 100,
formatter: function(e) {
/* 행위정보없음 0, 미조치 1, 조치완료 2 */
/* 행위정보없음 0, 미조치 1, 조치완료 3 */
if (e.value === '0') return '행위정보없음';
else if (e.value === '1') return '미조치';
else if (e.value === '2') return '조치완료';
else if (e.value === '3') return '조치완료';
else return e.value || '';
}
},
@ -571,6 +571,42 @@
});
},
/**
* 조치처리상태를 확인하고 미조치(코드 1)인 경우에만 콜백 함수를 실행합니다.
* 중요로직: 팝업 호출 전 미조치(코드 1) 여부를 확인하는 공통 함수
*
* @param crdnYr 단속 연도
* @param crdnNo 단속 번호
* @param buttonName 버튼 이름 (에러 메시지용)
* @param callback 미조치인 경우 실행할 콜백 함수
*/
checkActCmpltCdAndExecute: function(crdnYr, crdnNo, buttonName, callback) {
$.ajax({
url: '<c:url value="/crdn/crndRegistAndView/checkActCmpltCd.ajax"/>',
type: 'GET',
data: {
crdnYr: crdnYr,
crdnNo: crdnNo
},
success: function(response) {
if (response && response.success) {
if (response.data === '1') {
// 미조치(코드 1)인 경우 콜백 실행
callback();
} else {
alert('미조치 상태가 아닙니다. 미조치 상태일 때만 ' + buttonName + '을(를) 진행할 수 있습니다.');
}
} else {
alert('조치처리상태 확인에 실패했습니다.');
}
},
error: function( xhr, status, error ) {
console.error( error );
alert('조치처리상태 확인 중 오류가 발생했습니다.');
}
});
},
/**
* 재부과 팝업을 엽니다.
*
@ -739,81 +775,81 @@
// 이행정보 관리 팝업 호출 이벤트들 - "처분사전" 버튼
$("#btnDsps").on('click', function() {
// 선택된 행 확인
if (!self.selectedRow) {
alert('이행정보를 관리할 단속 건을 선택해주세요.');
return;
}
// 처분사전 팝업 열기
self.openImpltTaskPopup(self.selectedRow.crdnYr, self.selectedRow.crdnNo, '1'); // 1: 처분사전
// 중요로직: 미조치(코드 1) 확인 후 팝업 열기
self.checkActCmpltCdAndExecute(self.selectedRow.crdnYr, self.selectedRow.crdnNo, '처분사전', function() {
self.openImpltTaskPopup(self.selectedRow.crdnYr, self.selectedRow.crdnNo, '1');
});
});
$("#btnCrcCmd").on('click', function() {
// 선택된 행 확인
if (!self.selectedRow) {
alert('이행정보를 관리할 단속 건을 선택해주세요.');
return;
}
// 시정명령 팝업 열기
self.openImpltTaskPopup(self.selectedRow.crdnYr, self.selectedRow.crdnNo, '2'); // 2: 시정명령
// 중요로직: 미조치(코드 1) 확인 후 팝업 열기
self.checkActCmpltCdAndExecute(self.selectedRow.crdnYr, self.selectedRow.crdnNo, '시정명령', function() {
self.openImpltTaskPopup(self.selectedRow.crdnYr, self.selectedRow.crdnNo, '2');
});
});
$("#btnCrcUrg").on('click', function() {
// 선택된 행 확인
if (!self.selectedRow) {
alert('이행정보를 관리할 단속 건을 선택해주세요.');
return;
}
// 시정촉구 팝업 열기
self.openImpltTaskPopup(self.selectedRow.crdnYr, self.selectedRow.crdnNo, '3'); // 3: 시정촉구
// 중요로직: 미조치(코드 1) 확인 후 팝업 열기
self.checkActCmpltCdAndExecute(self.selectedRow.crdnYr, self.selectedRow.crdnNo, '시정촉구', function() {
self.openImpltTaskPopup(self.selectedRow.crdnYr, self.selectedRow.crdnNo, '3');
});
});
$("#btnLevyPrvntc").on('click', function() {
// 선택된 행 확인
if (!self.selectedRow) {
alert('부과예고를 관리할 단속 건을 선택해주세요.');
return;
}
// 부과예고 팝업 열기
self.openLevyPrvntcPopup(self.selectedRow.crdnYr, self.selectedRow.crdnNo, '4'); // 3: 부과예고
// 중요로직: 미조치(코드 1) 확인 후 팝업 열기
self.checkActCmpltCdAndExecute(self.selectedRow.crdnYr, self.selectedRow.crdnNo, '부과예고', function() {
self.openLevyPrvntcPopup(self.selectedRow.crdnYr, self.selectedRow.crdnNo, '4');
});
});
$("#btnLevy").on('click', function() {
// 선택된 행 확인
if (!self.selectedRow) {
alert('부과를 관리할 단속 건을 선택해주세요.');
return;
}
// 부과예고 팝업 열기
self.openLevyPrvntcPopup(self.selectedRow.crdnYr, self.selectedRow.crdnNo, '5'); // 5: 부과
// 중요로직: 미조치(코드 1) 확인 후 팝업 열기
self.checkActCmpltCdAndExecute(self.selectedRow.crdnYr, self.selectedRow.crdnNo, '부과', function() {
self.openLevyPrvntcPopup(self.selectedRow.crdnYr, self.selectedRow.crdnNo, '5');
});
});
$("#btnPayUrg").on('click', function() {
// 선택된 행 확인
if (!self.selectedRow) {
alert('납부촉구를 관리할 단속 건을 선택해주세요.');
return;
}
// 부과예고 팝업 열기
self.openLevyPrvntcPopup(self.selectedRow.crdnYr, self.selectedRow.crdnNo, '6'); // 6: 납부촉구
// 중요로직: 미조치(코드 1) 확인 후 팝업 열기
self.checkActCmpltCdAndExecute(self.selectedRow.crdnYr, self.selectedRow.crdnNo, '납부촉구', function() {
self.openLevyPrvntcPopup(self.selectedRow.crdnYr, self.selectedRow.crdnNo, '6');
});
});
// 재부과 버튼 클릭 이벤트
$("#btnRelevy").on('click', function() {
// 선택된 행 확인
if (!self.selectedRow) {
alert('재부과를 진행할 단속 건을 선택해주세요.');
return;
}
// 재부과 팝업 열기
self.openRelevyPopup(self.selectedRow.crdnYr, self.selectedRow.crdnNo);
// 중요로직: 미조치(코드 1) 확인 후 팝업 열기
self.checkActCmpltCdAndExecute(self.selectedRow.crdnYr, self.selectedRow.crdnNo, '재부과', function() {
self.openRelevyPopup(self.selectedRow.crdnYr, self.selectedRow.crdnNo);
});
});
// 엔터키 검색

Loading…
Cancel
Save