재부과 신규로직 init... 전면 재수정

dev
박성영 3 months ago
parent 9bbba14e1a
commit e9fad7dd90

@ -67,52 +67,90 @@ public interface CrdnRelevyMapper {
String selectNextActInfoId();
/**
* .
* .
* ID.
* @return ID.
*/
String selectNextActnInfoId();
/**
* ID.
* @return ID.
*/
String selectNextActrInfoId();
/**
* .
* (CRDN_PRCS_STTS_CD_30_CRC_CMD)
* , .
* @param relevyVO
* @return
* @return
*/
int insertCrdnActInfo(CrdnRelevyVO relevyVO);
int updateCrdnStatus(CrdnRelevyVO relevyVO);
// ============================================================
// for문 중첩 방식을 위한 단건 조회/등록 메서드들
// ============================================================
/**
* .
* .
* ( ).
* @param relevyVO
* @return
*/
List<CrdnRelevyVO> selectSrcActInfoList(CrdnRelevyVO relevyVO);
/**
* .
* @param relevyVO (actInfoId )
* @return
*/
int insertCrdnPhotoInfo(CrdnRelevyVO relevyVO);
int insertActInfoOne(CrdnRelevyVO relevyVO);
/**
* .
* .
* @param relevyVO
* .
* @param relevyVO (srcActInfoId )
* @return
*/
List<CrdnRelevyVO> selectSrcActnInfoList(CrdnRelevyVO relevyVO);
/**
* .
* @param relevyVO (actnInfoId, actInfoId )
* @return
*/
int insertCrdnActrInfo(CrdnRelevyVO relevyVO);
int insertActnInfoOne(CrdnRelevyVO relevyVO);
/**
* .
* (CRDN_PRCS_STTS_CD_30_CRC_CMD)
* , .
* @param relevyVO
* @return
* (CRDN_PHOTO_SE_CD='1').
* @param relevyVO (srcActInfoId )
* @return
*/
int updateCrdnStatus(CrdnRelevyVO relevyVO);
List<CrdnPhotoVO> selectSrcPhotoListByActInfo(CrdnRelevyVO relevyVO);
/**
* .
* .
* @param srcCrdnYr
* @param srcCrdnNo
* @return
* (CRDN_PHOTO_SE_CD='2').
* @param relevyVO (srcActnInfoId )
* @return
*/
List<CrdnPhotoVO> selectSrcPhotoList(@Param("srcCrdnYr") String srcCrdnYr, @Param("srcCrdnNo") String srcCrdnNo);
List<CrdnPhotoVO> selectSrcPhotoListByActnInfo(CrdnRelevyVO relevyVO);
/**
* .
* .
* @param updateParams (newCrdnYr, newCrdnNo, crdnPhotoSn, crdnPhotoNm)
* @return
* .
* @param photoVO
* @return
*/
int insertPhotoInfoOne(CrdnPhotoVO photoVO);
/**
* .
* @param relevyVO (srcActInfoId )
* @return
*/
List<CrdnRelevyVO> selectSrcActrInfoList(CrdnRelevyVO relevyVO);
/**
* .
* @param relevyVO (actrInfoId, actInfoId )
* @return
*/
int updateRelevyPhotoInfo(java.util.Map<String, Object> updateParams);
int insertActrInfoOne(CrdnRelevyVO relevyVO);
}

@ -131,9 +131,59 @@ public class CrdnRelevyVO extends PagingVO {
/** 산 여부 코드 */
private String mtnYnCd;
// ==================== 불법행위 정보 ====================
/** 불법행위정보 ID*/
// ==================== 불법행위 정보 (tb_act_info) ====================
/** 원본 불법행위정보 ID */
private String srcActInfoId;
/** 신규 불법행위정보 ID */
private String actInfoId;
/** 행위 시작 일자 */
private String actBgngYmd;
/** 행위 유형 코드 */
private String actTypeCd;
/** 행위 번호 */
private String actNo;
/** 위반 법규 코드 1 */
private String vltnLwrgCd1;
/** 위반 법규 코드 2 */
private String vltnLwrgCd2;
/** 구조 지수 코드 */
private String strctIdxCd;
/** 용도 지수 코드 */
private String usgIdxCd;
/** 높이 */
private String hgt;
/** 가로 */
private String wdth;
/** 세로 */
private String vrtc;
/** 면적 */
private String area;
/** 조치 최종 일자 */
private String actnLastYmd;
/** 조치 총 면적 */
private String actnWholArea;
/** 조치 처리 상태 코드 */
private String actnPrcsStCd;
// ==================== 조치 정보 (tb_actn_info) ====================
/** 원본 조치정보 ID */
private String srcActnInfoId;
/** 신규 조치정보 ID */
private String actnInfoId;
/** 조치 일자 */
private String actnYmd;
/** 조치 면적 */
private String actnArea;
/** 조치 비고 */
private String actnRmrk;
// ==================== 행위자 정보 (tb_actr_info) ====================
/** 원본 행위자정보 ID */
private String srcActrInfoId;
/** 신규 행위자정보 ID */
private String actrInfoId;
/** 소유자 ID */
private String ownrId;
// ==================== 등록자 정보 ====================
/** 등록자 계정 */

@ -68,6 +68,25 @@ public class CrdnRelevyServiceImpl implements CrdnRelevyService {
* .
* .
*
* FK 1:N :
* <pre>
* 1. tb_crdn ( ) - PK: (CRDN_YR, CRDN_NO)
*
* > 2. tb_pstn_info ( ) - PK: PSTN_INFO_ID
*
* > 3. tb_ownr_info ( ) - FK: PSTN_INFO_ID
*
* > 4. tb_act_info ( ) 1:N - PK: ACT_INFO_ID, FK: PSTN_INFO_ID
*
* > 5. tb_actn_info ( ) 1:N - PK: ACTN_INFO_ID, FK: ACT_INFO_ID
*
* > 6. tb_crdn_photo () 1:N - PK: (ACT_INFO_ID, CRDN_PHOTO_SN)
* FK: ACT_INFO_ID ()
* FK: ACTN_INFO_ID ( - )
*
* > 7. tb_actr_info ( ) 1:N - PK: ACTR_INFO_ID, FK: ACT_INFO_ID
* </pre>
*
* @param relevyVO VO
* @return ( )
*/
@ -94,29 +113,98 @@ public class CrdnRelevyServiceImpl implements CrdnRelevyService {
throw new MessageException("기본 단속 정보 복사 실패");
}
// 4. 위치 정보 복사 (tb_crdn_pstn_info)
// 4. 위치 정보 복사 (tb_pstn_info)
// 새로운 PSTN_INFO_ID 생성하여 tb_ownr_info, tb_act_info에서 참조
String nextPstnInfoId = relevyMapper.selectNextPstnInfoId();
relevyVO.setPstnInfoId(nextPstnInfoId);
relevyMapper.insertCrdnPstnInfo(relevyVO);
// 5. 소유자 정보 복사 (tb_crdn_ownr_info)
// 5. 소유자 정보 복사 (tb_ownr_info)
// PSTN_INFO_ID를 FK로 참조
relevyMapper.insertCrdnOwnrInfo(relevyVO);
// 6. 불법행위 정보 복사 (조치완료 제외)
// 6-1. 행위 정보 (tb_crdn_act_info)
relevyMapper.insertCrdnActInfo(relevyVO);
// 6-2. 첨부파일 복사 (조치완료 제외) - 데이터베이스 레코드 복사
relevyMapper.insertCrdnPhotoInfo(relevyVO);
// 6. 불법행위 목록 조회 및 중첩 for문으로 하위 데이터 복사
List<CrdnRelevyVO> srcActInfoList = relevyMapper.selectSrcActInfoList(relevyVO);
log.info("복사할 불법행위 개수: {}", srcActInfoList.size());
for (CrdnRelevyVO srcActInfo : srcActInfoList) {
// 6-1. 불법행위 정보 단건 등록 (tb_act_info)
String newActInfoId = relevyMapper.selectNextActInfoId();
log.info("생성된 newActInfoId: {}, 원본 srcActInfoId: {}", newActInfoId, srcActInfo.getSrcActInfoId());
srcActInfo.setActInfoId(newActInfoId);
srcActInfo.setNewCrdnYr(currentYear);
srcActInfo.setNewCrdnNo(newCrdnNo);
srcActInfo.setPstnInfoId(nextPstnInfoId);
srcActInfo.setRgtr(relevyVO.getRgtr());
relevyMapper.insertActInfoOne(srcActInfo);
// 6-2. 행위사진 처리 (1:N) - CRDN_PHOTO_SE_CD='1'
List<CrdnPhotoVO> srcActPhotoList = relevyMapper.selectSrcPhotoListByActInfo(srcActInfo);
log.debug("불법행위 {} 행위사진 개수: {}", srcActInfo.getActNo(), srcActPhotoList.size());
for (CrdnPhotoVO srcPhoto : srcActPhotoList) {
// 물리적 파일 복사
String newPhotoNm = copyPhysicalFileAndGetNewName(srcPhoto);
// DB에 첨부파일 정보 등록 (ACT_INFO_ID만)
log.info("행위사진 insert - newActInfoId: {}, 원본 SN: {}", newActInfoId, srcPhoto.getCrdnPhotoSn());
srcPhoto.setActInfoId(newActInfoId);
srcPhoto.setCrdnYr(currentYear);
srcPhoto.setCrdnNo(newCrdnNo);
srcPhoto.setCrdnPhotoNm(newPhotoNm);
srcPhoto.setActnInfoId(null); // 행위사진은 ACTN_INFO_ID 없음
srcPhoto.setRgtr(relevyVO.getRgtr());
relevyMapper.insertPhotoInfoOne(srcPhoto);
}
// 6-3. 물리적 파일 복사
processPhysicalFileCopy(relevyVO);
// 6-3. 조치 정보 및 조치사진 처리 (1:N:N)
List<CrdnRelevyVO> srcActnInfoList = relevyMapper.selectSrcActnInfoList(srcActInfo);
log.debug("불법행위 {} 조치정보 개수: {}", srcActInfo.getActNo(), srcActnInfoList.size());
for (CrdnRelevyVO srcActnInfo : srcActnInfoList) {
// 6-3-1. 조치 정보 단건 등록 (tb_actn_info)
String newActnInfoId = relevyMapper.selectNextActnInfoId();
srcActnInfo.setActnInfoId(newActnInfoId);
srcActnInfo.setNewCrdnYr(currentYear);
srcActnInfo.setNewCrdnNo(newCrdnNo);
srcActnInfo.setActInfoId(newActInfoId);
srcActnInfo.setRgtr(relevyVO.getRgtr());
relevyMapper.insertActnInfoOne(srcActnInfo);
// 6-3-2. 조치사진 처리 (1:N) - CRDN_PHOTO_SE_CD='2'
List<CrdnPhotoVO> srcActnPhotoList = relevyMapper.selectSrcPhotoListByActnInfo(srcActnInfo);
log.debug("조치정보 {} 조치사진 개수: {}", srcActnInfo.getActnYmd(), srcActnPhotoList.size());
for (CrdnPhotoVO srcPhoto : srcActnPhotoList) {
// 물리적 파일 복사
String newPhotoNm = copyPhysicalFileAndGetNewName(srcPhoto);
// DB에 첨부파일 정보 등록 (ACT_INFO_ID + ACTN_INFO_ID)
log.info("조치사진 insert - newActInfoId: {}, 원본 SN: {}", newActInfoId, srcPhoto.getCrdnPhotoSn());
srcPhoto.setActInfoId(newActInfoId);
srcPhoto.setCrdnYr(currentYear);
srcPhoto.setCrdnNo(newCrdnNo);
srcPhoto.setCrdnPhotoNm(newPhotoNm);
srcPhoto.setActnInfoId(newActnInfoId); // 조치사진은 ACTN_INFO_ID 필수
srcPhoto.setRgtr(relevyVO.getRgtr());
relevyMapper.insertPhotoInfoOne(srcPhoto);
}
}
// 7. 조치 정보 복사 (조치완료 제외)
// 7-1. 행위자 정보 (tb_crdn_actr_info)
relevyMapper.insertCrdnActrInfo(relevyVO);
// 6-4. 행위자 정보 목록 조회 및 등록 (tb_actr_info) - 1:N
List<CrdnRelevyVO> srcActrInfoList = relevyMapper.selectSrcActrInfoList(srcActInfo);
log.debug("불법행위 {} 행위자 개수: {}", srcActInfo.getActNo(), srcActrInfoList.size());
for (CrdnRelevyVO srcActrInfo : srcActrInfoList) {
String newActrInfoId = relevyMapper.selectNextActrInfoId();
srcActrInfo.setActrInfoId(newActrInfoId);
srcActrInfo.setNewCrdnYr(currentYear);
srcActrInfo.setNewCrdnNo(newCrdnNo);
srcActrInfo.setActInfoId(newActInfoId);
srcActrInfo.setRgtr(relevyVO.getRgtr());
relevyMapper.insertActrInfoOne(srcActrInfo);
}
}
// 8. 현재 진행 상태를 시정명령(30)으로 설정 및 최초단속 정보 업데이트
// 7. 현재 진행 상태를 시정명령(30)으로 설정 및 최초단속 정보 업데이트
relevyMapper.updateCrdnStatus(relevyVO);
log.info("재부과 처리 완료: 신규 단속번호={}", newCrdnNo);
@ -136,51 +224,17 @@ public class CrdnRelevyServiceImpl implements CrdnRelevyService {
}
/**
* .
* .
*
* @param relevyVO
* @throws MessageException
*/
private void processPhysicalFileCopy(CrdnRelevyVO relevyVO) throws MessageException {
log.info("물리적 파일 복사 시작: srcCrdnYr={}, srcCrdnNo={}", relevyVO.getSrcCrdnYr(), relevyVO.getSrcCrdnNo());
try {
// 원본 첨부파일 목록 조회
List<CrdnPhotoVO> srcPhotoList = relevyMapper.selectSrcPhotoList(relevyVO.getSrcCrdnYr(), relevyVO.getSrcCrdnNo());
if (srcPhotoList == null || srcPhotoList.isEmpty()) {
log.info("복사할 첨부파일이 없습니다.");
return;
}
log.info("복사할 첨부파일 개수: {}", srcPhotoList.size());
// 각 파일에 대해 복사 처리
for (CrdnPhotoVO srcPhoto : srcPhotoList) {
copyPhysicalFile(srcPhoto, relevyVO);
}
log.info("물리적 파일 복사 완료");
} catch (Exception e) {
log.error("물리적 파일 복사 중 오류 발생", e);
throw new MessageException("첨부파일 복사 중 오류가 발생했습니다: " + e.getMessage());
}
}
/**
* .
* .
*
* @param srcPhoto
* @param relevyVO
* @return (UUID )
*/
private void copyPhysicalFile(CrdnPhotoVO srcPhoto, CrdnRelevyVO relevyVO) {
private String copyPhysicalFileAndGetNewName(CrdnPhotoVO srcPhoto) {
try {
// 원본 파일 전체 경로 구성
String srcFilePath = srcPhoto.getCrdnPhotoPath() + File.separator + srcPhoto.getCrdnPhotoNm();
// UUID를 이용한 새로운 저장 파일명 생성 (기존 로직 사용)
// UUID를 이용한 새로운 저장 파일명 생성
String fileExt = "";
String orglFileName = srcPhoto.getOrgnlPhotoNm();
if (orglFileName != null && orglFileName.contains(".")) {
@ -196,20 +250,10 @@ public class CrdnRelevyServiceImpl implements CrdnRelevyService {
boolean copySuccess = fileUtil.copyFile(srcFilePath, uploadDir, targetFilePath);
if (copySuccess) {
// 복사된 파일 정보로 데이터베이스 업데이트
// 재부과된 단속 정보의 첨부파일명을 새로운 UUID 파일명으로 변경
Map<String, Object> updateParams = new HashMap<>();
updateParams.put("actInfoId", relevyVO.getActInfoId());
updateParams.put("newCrdnYr", relevyVO.getNewCrdnYr());
updateParams.put("newCrdnNo", relevyVO.getNewCrdnNo());
updateParams.put("crdnPhotoSn", srcPhoto.getCrdnPhotoSn());
updateParams.put("crdnPhotoNm", newStrgFileNm);
updateParams.put("crdnPhotoPath", uploadDir);
int updateResult = relevyMapper.updateRelevyPhotoInfo(updateParams);
if (updateResult <= 0) {
throw new MessageException("첨부파일 정보 업데이트 실패: " + srcPhoto.getOrgnlPhotoNm());
}
log.debug("파일 복사 성공: {} -> {}", srcFilePath, targetFilePath);
// 새로운 경로로 업데이트 (DB INSERT 전에 사용)
srcPhoto.setCrdnPhotoPath(uploadDir);
return newStrgFileNm;
} else {
throw new MessageException("파일 복사 실패: " + srcPhoto.getOrgnlPhotoNm());
}

@ -224,9 +224,73 @@
/* CrdnRelevyMapper.selectNextActInfoId : 불법행위 정보 ID */
SELECT LPAD(NEXTVAL(seq_act_info_id), 10, '0')
</select>
<!-- 불법행위 정보 복사 (조치완료 제외) -->
<insert id="insertCrdnActInfo" parameterType="CrdnRelevyVO">
/* CrdnRelevyMapper.insertCrdnActInfo : 불법행위 정보 복사 (조치완료 제외) */
<!-- 조치 정보 ID -->
<select id="selectNextActnInfoId" resultType="string">
/* CrdnRelevyMapper.selectNextActnInfoId : 조치 정보 ID */
SELECT LPAD(NEXTVAL(seq_actn_info_id), 10, '0')
</select>
<!-- 행위자 정보 ID -->
<select id="selectNextActrInfoId" resultType="string">
/* CrdnRelevyMapper.selectNextActrInfoId : 불법행위자 정보 ID */
SELECT LPAD(NEXTVAL(seq_actr_info_id), 10, '0')
</select>
<!-- 단속 상태 업데이트 -->
<update id="updateCrdnStatus" parameterType="CrdnRelevyVO">
/* CrdnRelevyMapper.updateCrdnStatus : 단속 상태 업데이트 */
UPDATE tb_crdn
SET CRDN_PRCS_STTS_CD = '30', /* 시정명령 */
FRST_CRDN_YR = #{srcCrdnYr}, /* 최초 단속 연도 */
FRST_CRDN_NO = #{srcCrdnNo}, /* 최초 단속 번호 */
RELEVY_YN = 'Y' /* 재부과 여부 */
WHERE CRDN_YR = #{newCrdnYr}
AND CRDN_NO = #{newCrdnNo}
AND DEL_YN = 'N'
</update>
<!-- ============================================================ -->
<!-- for문 중첩 방식을 위한 단건 조회/등록 쿼리들 -->
<!-- ============================================================ -->
<!-- 원본 단속의 불법행위 목록 조회 (조치완료 제외) -->
<select id="selectSrcActInfoList" parameterType="CrdnRelevyVO" resultType="CrdnRelevyVO">
/* CrdnRelevyMapper.selectSrcActInfoList : 원본 불법행위 목록 조회 */
SELECT
ACT_INFO_ID AS srcActInfoId,
SGG_CD,
CRDN_YR,
CRDN_NO,
PSTN_INFO_ID,
ACT_BGNG_YMD AS actBgngYmd,
ACT_TYPE_CD AS actTypeCd,
ACT_NO AS actNo,
VLTN_LWRG_CD_1 AS vltnLwrgCd1,
VLTN_LWRG_CD_2 AS vltnLwrgCd2,
STRCT_IDX_CD AS strctIdxCd,
USG_IDX_CD AS usgIdxCd,
HGT,
WDTH,
VRTC,
AREA,
RMRK,
ACTN_LAST_YMD AS actnLastYmd,
ACTN_WHOL_AREA AS actnWholArea,
ACTN_PRCS_STTS_CD AS actnPrcsStCd
FROM tb_act_info
WHERE CRDN_YR = #{srcCrdnYr}
AND CRDN_NO = #{srcCrdnNo}
AND DEL_YN = 'N'
AND (ACTN_PRCS_STTS_CD != '3' OR ACTN_PRCS_STTS_CD IS NULL) /* 조치완료 제외 */
ORDER BY ACT_NO
</select>
<!-- 불법행위 정보 단건 등록 -->
<insert id="insertActInfoOne" parameterType="CrdnRelevyVO">
/* CrdnRelevyMapper.insertActInfoOne : 불법행위 정보 단건 등록 */
INSERT INTO tb_act_info (
ACT_INFO_ID,
SGG_CD,
@ -251,41 +315,126 @@
REG_DT,
RGTR,
DEL_YN
) VALUES (
#{actInfoId},
#{sggCd},
#{newCrdnYr},
#{newCrdnNo},
#{pstnInfoId},
#{actBgngYmd},
#{actTypeCd},
#{actNo},
#{vltnLwrgCd1},
#{vltnLwrgCd2},
#{strctIdxCd},
#{usgIdxCd},
#{hgt},
#{wdth},
#{vrtc},
#{area},
#{rmrk},
#{actnLastYmd},
#{actnWholArea},
#{actnPrcsStCd},
NOW(),
#{rgtr},
'N'
)
</insert>
<!-- 원본 불법행위의 조치 정보 목록 조회 -->
<select id="selectSrcActnInfoList" parameterType="CrdnRelevyVO" resultType="CrdnRelevyVO">
/* CrdnRelevyMapper.selectSrcActnInfoList : 원본 조치 정보 목록 조회 */
SELECT
LPAD(NEXTVAL(seq_act_info_id), 10, '0'),
ACTN_INFO_ID AS srcActnInfoId,
SGG_CD,
CRDN_YR,
CRDN_NO,
ACT_INFO_ID,
ACTN_YMD AS actnYmd,
ACTN_AREA AS actnArea,
ACTN_RMRK AS actnRmrk
FROM tb_actn_info
WHERE ACT_INFO_ID = #{srcActInfoId}
AND DEL_YN = 'N'
ORDER BY ACTN_YMD
</select>
<!-- 조치 정보 단건 등록 -->
<insert id="insertActnInfoOne" parameterType="CrdnRelevyVO">
/* CrdnRelevyMapper.insertActnInfoOne : 조치 정보 단건 등록 */
INSERT INTO tb_actn_info (
ACTN_INFO_ID,
SGG_CD,
CRDN_YR,
CRDN_NO,
ACT_INFO_ID,
ACTN_YMD,
ACTN_AREA,
ACTN_RMRK,
REG_DT,
RGTR,
DEL_YN
) VALUES (
#{actnInfoId},
#{sggCd},
#{newCrdnYr},
#{newCrdnNo},
#{pstnInfoId},
ACT_BGNG_YMD,
ACT_TYPE_CD,
ACT_NO,
VLTN_LWRG_CD_1,
VLTN_LWRG_CD_2,
STRCT_IDX_CD,
USG_IDX_CD,
HGT,
WDTH,
VRTC,
AREA,
RMRK,
ACTN_LAST_YMD,
ACTN_WHOL_AREA,
ACTN_PRCS_STTS_CD,
#{actInfoId},
#{actnYmd},
#{actnArea},
#{actnRmrk},
NOW(),
#{rgtr},
'N'
FROM tb_act_info
WHERE CRDN_YR = #{srcCrdnYr}
AND CRDN_NO = #{srcCrdnNo}
AND DEL_YN = 'N'
AND (ACTN_PRCS_STTS_CD != '3' OR ACTN_PRCS_STTS_CD IS NULL) /* 조치완료 제외 */
)
</insert>
<!-- 첨부파일 정보 복사 (조치완료 제외) -->
<insert id="insertCrdnPhotoInfo" parameterType="CrdnRelevyVO">
/* CrdnRelevyMapper.insertCrdnPhotoInfo : 첨부파일 정보 복사 (조치완료 제외) */
<!-- 원본 불법행위의 행위사진 목록 조회 (CRDN_PHOTO_SE_CD='1') -->
<select id="selectSrcPhotoListByActInfo" parameterType="CrdnRelevyVO" resultType="CrdnPhotoVO">
/* CrdnRelevyMapper.selectSrcPhotoListByActInfo : 원본 행위사진 목록 조회 */
SELECT
p.ACT_INFO_ID,
p.CRDN_PHOTO_SN,
p.SGG_CD,
p.CRDN_YR,
p.CRDN_NO,
p.CRDN_PHOTO_PATH,
p.CRDN_PHOTO_NM,
p.CRDN_PHOTO_SE_CD,
p.ORGNL_PHOTO_NM,
p.ACTN_INFO_ID
FROM tb_crdn_photo p
WHERE p.ACT_INFO_ID = #{srcActInfoId}
AND p.CRDN_PHOTO_SE_CD = '1' /* 행위사진만 */
AND p.DEL_YN = 'N'
ORDER BY p.CRDN_PHOTO_SN
</select>
<!-- 원본 조치정보의 조치사진 목록 조회 (CRDN_PHOTO_SE_CD='2') -->
<select id="selectSrcPhotoListByActnInfo" parameterType="CrdnRelevyVO" resultType="CrdnPhotoVO">
/* CrdnRelevyMapper.selectSrcPhotoListByActnInfo : 원본 조치사진 목록 조회 */
SELECT
p.ACT_INFO_ID,
p.CRDN_PHOTO_SN,
p.SGG_CD,
p.CRDN_YR,
p.CRDN_NO,
p.CRDN_PHOTO_PATH,
p.CRDN_PHOTO_NM,
p.CRDN_PHOTO_SE_CD,
p.ORGNL_PHOTO_NM,
p.ACTN_INFO_ID
FROM tb_crdn_photo p
WHERE p.ACTN_INFO_ID = #{srcActnInfoId}
AND p.CRDN_PHOTO_SE_CD = '2' /* 조치사진만 */
AND p.DEL_YN = 'N'
ORDER BY p.CRDN_PHOTO_SN
</select>
<!-- 첨부파일 정보 단건 등록 -->
<insert id="insertPhotoInfoOne" parameterType="CrdnPhotoVO">
/* CrdnRelevyMapper.insertPhotoInfoOne : 첨부파일 정보 단건 등록 */
INSERT INTO tb_crdn_photo (
ACT_INFO_ID,
CRDN_PHOTO_SN,
@ -300,39 +449,41 @@
REG_DT,
RGTR,
DEL_YN
)
SELECT
a_new.ACT_INFO_ID, /* 새로 생성된 ACT_INFO_ID */
p.CRDN_PHOTO_SN,
p.SGG_CD,
#{newCrdnYr},
#{newCrdnNo},
p.CRDN_PHOTO_PATH,
p.CRDN_PHOTO_NM, /* 물리적 파일 복사 후 서비스에서 업데이트 */
p.CRDN_PHOTO_SE_CD,
p.ORGNL_PHOTO_NM,
p.ACTN_INFO_ID,
) VALUES (
#{actInfoId},
#{crdnPhotoSn},
#{sggCd},
#{crdnYr},
#{crdnNo},
#{crdnPhotoPath},
#{crdnPhotoNm},
#{crdnPhotoSeCd},
#{orgnlPhotoNm},
#{actnInfoId},
NOW(),
#{rgtr},
'N'
FROM tb_crdn_photo p
INNER JOIN tb_act_info a_src ON a_src.CRDN_YR = p.CRDN_YR
AND a_src.CRDN_NO = p.CRDN_NO
AND a_src.ACT_INFO_ID = p.ACT_INFO_ID
AND a_src.DEL_YN = 'N'
INNER JOIN tb_act_info a_new ON a_new.CRDN_YR = #{newCrdnYr}
AND a_new.CRDN_NO = #{newCrdnNo}
AND a_new.ACT_NO = a_src.ACT_NO
AND a_new.DEL_YN = 'N'
WHERE p.CRDN_YR = #{srcCrdnYr}
AND p.CRDN_NO = #{srcCrdnNo}
AND p.DEL_YN = 'N'
AND (a_src.ACTN_PRCS_STTS_CD != '3' OR a_src.ACTN_PRCS_STTS_CD IS NULL) /* 조치완료 제외 */
)
</insert>
<!-- 행위자 정보 복사 (조치완료 제외) -->
<insert id="insertCrdnActrInfo" parameterType="CrdnRelevyVO">
/* CrdnRelevyMapper.insertCrdnActrInfo : 행위자 정보 복사 (조치완료 제외) */
<!-- 원본 불법행위의 행위자 정보 목록 조회 -->
<select id="selectSrcActrInfoList" parameterType="CrdnRelevyVO" resultType="CrdnRelevyVO">
/* CrdnRelevyMapper.selectSrcActrInfoList : 원본 행위자 정보 목록 조회 */
SELECT
ACTR_INFO_ID AS srcActrInfoId,
SGG_CD,
CRDN_YR,
CRDN_NO,
ACT_INFO_ID,
OWNR_ID AS ownrId
FROM tb_actr_info
WHERE ACT_INFO_ID = #{srcActInfoId}
AND DEL_YN = 'N'
</select>
<!-- 행위자 정보 단건 등록 -->
<insert id="insertActrInfoOne" parameterType="CrdnRelevyVO">
/* CrdnRelevyMapper.insertActrInfoOne : 행위자 정보 단건 등록 */
INSERT INTO tb_actr_info (
ACTR_INFO_ID,
SGG_CD,
@ -343,78 +494,17 @@
REG_DT,
RGTR,
DEL_YN
)
SELECT
LPAD(NEXTVAL(seq_actr_info_id), 10, '0'),
a_new.SGG_CD,
a_new.CRDN_YR,
a_new.CRDN_NO,
a_new.ACT_INFO_ID, /* 새로 생성된 ACT_INFO_ID */
ai.OWNR_ID,
) VALUES (
#{actrInfoId},
#{sggCd},
#{newCrdnYr},
#{newCrdnNo},
#{actInfoId},
#{ownrId},
NOW(),
#{rgtr},
'N'
FROM tb_actr_info ai
INNER JOIN tb_act_info a_src ON a_src.ACT_INFO_ID = ai.ACT_INFO_ID
AND a_src.DEL_YN = 'N'
INNER JOIN tb_act_info a_new ON a_new.CRDN_YR = #{newCrdnYr}
AND a_new.CRDN_NO = #{newCrdnNo}
AND a_new.ACT_NO = a_src.ACT_NO
AND a_new.DEL_YN = 'N'
WHERE a_src.CRDN_YR = #{srcCrdnYr}
AND a_src.CRDN_NO = #{srcCrdnNo}
AND ai.DEL_YN = 'N'
AND (a_src.ACTN_PRCS_STTS_CD != '3' OR a_src.ACTN_PRCS_STTS_CD IS NULL) /* 조치완료 제외 */
)
</insert>
<!-- 단속 상태 업데이트 -->
<update id="updateCrdnStatus" parameterType="CrdnRelevyVO">
/* CrdnRelevyMapper.updateCrdnStatus : 단속 상태 업데이트 */
UPDATE tb_crdn
SET CRDN_PRCS_STTS_CD = '30', /* 시정명령 */
FRST_CRDN_YR = #{srcCrdnYr}, /* 최초 단속 연도 */
FRST_CRDN_NO = #{srcCrdnNo}, /* 최초 단속 번호 */
RELEVY_YN = 'Y' /* 재부과 여부 */
WHERE CRDN_YR = #{newCrdnYr}
AND CRDN_NO = #{newCrdnNo}
AND DEL_YN = 'N'
</update>
<!-- 원본 단속의 첨부파일 목록 조회 (조치완료 제외) -->
<select id="selectSrcPhotoList" parameterType="map" resultType="CrdnPhotoVO">
/* CrdnRelevyMapper.selectSrcPhotoList : 원본 첨부파일 목록 조회 */
SELECT
p.ACT_INFO_ID,
p.CRDN_PHOTO_SN,
p.SGG_CD,
p.CRDN_YR,
p.CRDN_NO,
p.CRDN_PHOTO_PATH,
p.CRDN_PHOTO_NM,
p.CRDN_PHOTO_SE_CD,
p.ORGNL_PHOTO_NM,
p.ACTN_INFO_ID
FROM tb_crdn_photo p
INNER JOIN tb_act_info a ON a.ACT_INFO_ID = p.ACT_INFO_ID
AND a.DEL_YN = 'N'
WHERE a.CRDN_YR = #{srcCrdnYr}
AND a.CRDN_NO = #{srcCrdnNo}
AND p.DEL_YN = 'N'
AND (a.ACTN_PRCS_STTS_CD != '3' OR a.ACTN_PRCS_STTS_CD IS NULL) /* 조치완료 제외 */
ORDER BY p.ACT_INFO_ID, p.CRDN_PHOTO_SN
</select>
<!-- 재부과 첨부파일 정보 업데이트 -->
<update id="updateRelevyPhotoInfo" parameterType="map">
/* CrdnRelevyMapper.updateRelevyPhotoInfo : 재부과 첨부파일 정보 업데이트 */
UPDATE tb_crdn_photo
SET CRDN_PHOTO_NM = #{crdnPhotoNm},
CRDN_PHOTO_PATH = #{crdnPhotoPath}
WHERE CRDN_YR = #{newCrdnYr}
AND CRDN_NO = #{newCrdnNo}
AND CRDN_PHOTO_SN = #{crdnPhotoSn}
AND ACT_INFO_ID = #{actInfoId}
AND DEL_YN = 'N'
</update>
</mapper>
Loading…
Cancel
Save