|
|
|
|
@ -7,6 +7,7 @@ import go.kr.project.crdn.crndRegistAndView.crdnActInfo.model.*;
|
|
|
|
|
import go.kr.project.crdn.crndRegistAndView.crdnActInfo.service.CrdnActInfoService;
|
|
|
|
|
import go.kr.project.crdn.crndRegistAndView.crdnActInfo.service.CrdnPhotoService;
|
|
|
|
|
import go.kr.project.crdn.crndRegistAndView.crdnActrInfo.mapper.CrdnActrInfoMapper;
|
|
|
|
|
import go.kr.project.crdn.crndRegistAndView.crdnActrInfo.model.CrdnActrInfoVO;
|
|
|
|
|
import lombok.RequiredArgsConstructor;
|
|
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
|
|
@ -70,6 +71,9 @@ public class CrdnActInfoServiceImpl extends EgovAbstractServiceImpl implements C
|
|
|
|
|
if (result > 0) {
|
|
|
|
|
log.debug("행위정보 등록 완료: actInfoId={}", vo.getActInfoId());
|
|
|
|
|
|
|
|
|
|
// 중요한 로직 주석: 동일 단속정보의 다른 불법행위에서 행위자 정보를 조회하여 자동 복사
|
|
|
|
|
copyActrInfoFromOtherAct(vo);
|
|
|
|
|
|
|
|
|
|
// 중요한 로직 주석: 단속 사진이 있는 경우 처리 (CRDN_PHOTO_SE_CD = '1')
|
|
|
|
|
if (crdnPhotoFiles != null && !crdnPhotoFiles.isEmpty()) {
|
|
|
|
|
int crdnPhotoResult = photoService.insertPhotosWithFiles(crdnPhotoFiles, vo.getActInfoId(), "1", vo);
|
|
|
|
|
@ -144,17 +148,27 @@ public class CrdnActInfoServiceImpl extends EgovAbstractServiceImpl implements C
|
|
|
|
|
public int deleteActInfo(CrdnActInfoVO vo) {
|
|
|
|
|
log.debug("불법위반행위정보 삭제: {}", vo);
|
|
|
|
|
|
|
|
|
|
// 중요한 로직 주석: 행위정보 삭제 시 관련된 모든 사진도 함께 삭제한다.
|
|
|
|
|
// 중요한 로직 주석: 행위정보 삭제 시 해당 행위의 모든 행위자 정보를 먼저 삭제한다.
|
|
|
|
|
if (vo.getActInfoId() != null) {
|
|
|
|
|
try {
|
|
|
|
|
// 중요한 로직 주석: 행위자 정보 삭제
|
|
|
|
|
CrdnActrInfoVO actrDeleteVO = CrdnActrInfoVO.builder()
|
|
|
|
|
.actInfoId(vo.getActInfoId())
|
|
|
|
|
.dltr(vo.getDltr())
|
|
|
|
|
.build();
|
|
|
|
|
int actrDeleteCount = actrInfoMapper.deleteActrInfoByActInfoId(actrDeleteVO);
|
|
|
|
|
log.debug("행위정보 관련 행위자 정보 삭제 완료: actInfoId={}, 삭제 건수={}", vo.getActInfoId(), actrDeleteCount);
|
|
|
|
|
|
|
|
|
|
// 중요한 로직 주석: 단속 사진 삭제
|
|
|
|
|
photoService.deletePhotosByActInfoIdAndCrdnPhotoSecd(vo.getActInfoId(), "1", vo.getDltr());
|
|
|
|
|
log.debug("행위정보 단속 사진 삭제 완료: actInfoId={}, crdnPhotoSeCd={}", vo.getActInfoId(), "1");
|
|
|
|
|
|
|
|
|
|
// 중요한 로직 주석: 조치 사진 삭제
|
|
|
|
|
photoService.deletePhotosByActInfoIdAndCrdnPhotoSecd(vo.getActInfoId(), "2", vo.getDltr());
|
|
|
|
|
log.debug("행위정보 조치 사진 삭제 완료: actInfoId={}, crdnPhotoSeCd={}", vo.getActInfoId(), "2");
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
log.warn("행위정보 관련 사진 삭제 중 오류 발생: actInfoId={}", vo.getActInfoId(), e);
|
|
|
|
|
// 사진 삭제 실패해도 행위정보 삭제는 진행
|
|
|
|
|
log.warn("행위정보 관련 행위자/사진 삭제 중 오류 발생: actInfoId={}", vo.getActInfoId(), e);
|
|
|
|
|
// 행위자/사진 삭제 실패해도 행위정보 삭제는 진행
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@ -191,6 +205,71 @@ public class CrdnActInfoServiceImpl extends EgovAbstractServiceImpl implements C
|
|
|
|
|
return mapper.getAllPstnIdx();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 중요한 로직 주석: 동일 단속정보의 다른 불법행위에서 행위자 정보를 복사하는 private 메서드
|
|
|
|
|
* 신규 불법행위 등록 시 자동으로 기존 행위자 정보를 복사하여 등록한다.
|
|
|
|
|
* @param newActInfo 신규 등록된 행위정보 VO (actInfoId, crdnYr, crdnNo, sggCd 필수)
|
|
|
|
|
*/
|
|
|
|
|
private void copyActrInfoFromOtherAct(CrdnActInfoVO newActInfo) {
|
|
|
|
|
log.debug("동일 단속정보의 행위자 정보 복사 시작: actInfoId={}, crdnYr={}, crdnNo={}",
|
|
|
|
|
newActInfo.getActInfoId(), newActInfo.getCrdnYr(), newActInfo.getCrdnNo());
|
|
|
|
|
|
|
|
|
|
// 중요한 로직 주석: 현재 사용자 정보를 가져와 등록자로 설정
|
|
|
|
|
String userId = SessionUtil.getUserId();
|
|
|
|
|
if (userId == null || userId.trim().isEmpty()) {
|
|
|
|
|
log.warn("사용자 정보를 가져올 수 없어 행위자 복사를 건너뜁니다.");
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 중요한 로직 주석: 동일 단속정보의 다른 불법행위에서 행위자 정보 조회
|
|
|
|
|
CrdnActrInfoVO searchVO = CrdnActrInfoVO.builder()
|
|
|
|
|
.crdnYr(newActInfo.getCrdnYr())
|
|
|
|
|
.crdnNo(newActInfo.getCrdnNo())
|
|
|
|
|
.actInfoId(newActInfo.getActInfoId()) // 제외할 행위정보ID (신규 등록한 행위)
|
|
|
|
|
.build();
|
|
|
|
|
|
|
|
|
|
List<CrdnActrInfoVO> existingActrInfoList = actrInfoMapper.selectActrInfoListByOtherAct(searchVO);
|
|
|
|
|
|
|
|
|
|
if (existingActrInfoList == null || existingActrInfoList.isEmpty()) {
|
|
|
|
|
log.debug("복사할 행위자 정보가 없습니다. 단속정보에 첫 번째 불법행위일 수 있습니다.");
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 중요한 로직 주석: 중복 방지를 위해 이미 복사된 소유자ID를 추적
|
|
|
|
|
Set<String> copiedOwnrIds = new HashSet<>();
|
|
|
|
|
int copiedCount = 0;
|
|
|
|
|
|
|
|
|
|
// 중요한 로직 주석: 조회된 행위자 정보를 신규 불법행위에 복사
|
|
|
|
|
for (CrdnActrInfoVO existingActrInfo : existingActrInfoList) {
|
|
|
|
|
// 중요한 로직 주석: 이미 복사한 소유자는 건너뛰기
|
|
|
|
|
if (copiedOwnrIds.contains(existingActrInfo.getOwnrId())) {
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 중요한 로직 주석: 신규 행위자 정보 생성 (기존 행위자의 소유자ID를 복사)
|
|
|
|
|
CrdnActrInfoVO newActrInfo = CrdnActrInfoVO.builder()
|
|
|
|
|
.sggCd(newActInfo.getSggCd())
|
|
|
|
|
.crdnYr(newActInfo.getCrdnYr())
|
|
|
|
|
.crdnNo(newActInfo.getCrdnNo())
|
|
|
|
|
.actInfoId(newActInfo.getActInfoId()) // 신규 행위정보ID
|
|
|
|
|
.ownrId(existingActrInfo.getOwnrId()) // 기존 소유자ID 복사
|
|
|
|
|
.rgtr(userId)
|
|
|
|
|
.build();
|
|
|
|
|
|
|
|
|
|
// 중요한 로직 주석: 행위자 정보 등록
|
|
|
|
|
int insertResult = actrInfoMapper.insertActrInfo(newActrInfo);
|
|
|
|
|
if (insertResult > 0) {
|
|
|
|
|
copiedOwnrIds.add(existingActrInfo.getOwnrId());
|
|
|
|
|
copiedCount++;
|
|
|
|
|
log.debug("행위자 정보 복사 완료: ownrId={}, 기존 actInfoId={}, 신규 actInfoId={}",
|
|
|
|
|
existingActrInfo.getOwnrId(), existingActrInfo.getActInfoId(), newActInfo.getActInfoId());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
log.info("행위자 정보 복사 완료: 총 {}건 복사됨", copiedCount);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 불법위반행위정보 일괄 삭제 (논리삭제)
|
|
|
|
|
* 중요한 로직 주석: 트랜잭션을 적용하여 여러 건의 삭제 작업을 안전하게 처리한다.
|
|
|
|
|
@ -216,16 +295,23 @@ public class CrdnActInfoServiceImpl extends EgovAbstractServiceImpl implements C
|
|
|
|
|
throw new MessageException("사용자 정보를 확인할 수 없습니다.");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int checkCount = actrInfoMapper.existsActrInfo(actInfoIds);
|
|
|
|
|
if( checkCount > 0 ) {
|
|
|
|
|
throw new MessageException("행위자 정보 삭제 후 불법행위정보를 삭제 할 수 있습니다.");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 중요한 로직 주석: 강제이행금산출 정보가 있는지 체크
|
|
|
|
|
int checkLevyCount = mapper.existsLevyInfoList(actInfoIds);
|
|
|
|
|
if( checkLevyCount > 0 ) {
|
|
|
|
|
throw new MessageException("이미 등록된 강제이행금산출 정보가 있습니다. \n부과예고에서 강제이행금산출 정보 삭제 후 불법행위정보를 삭제 할 수 있습니다.");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 중요한 로직 주석: 행위정보 삭제 시 해당 행위의 모든 행위자 정보를 먼저 일괄 삭제한다.
|
|
|
|
|
try {
|
|
|
|
|
java.util.Map<String, Object> paramMap = new java.util.HashMap<>();
|
|
|
|
|
paramMap.put("actInfoIds", actInfoIds);
|
|
|
|
|
paramMap.put("dltr", userId);
|
|
|
|
|
int actrDeleteCount = actrInfoMapper.deleteActrInfoByAct(paramMap);
|
|
|
|
|
log.debug("일괄 행위자 정보 삭제 완료: 삭제 건수={}", actrDeleteCount);
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
throw new MessageException("일괄 행위자 정보 삭제 중 오류가 발생했습니다.");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 중요한 로직 주석: 각 행위정보 ID에 대해 유효성 검증 후 논리 삭제 수행
|
|
|
|
|
|