parent
84a1c5950a
commit
fd080516f8
@ -1,32 +0,0 @@
|
|||||||
package kr.xit.biz.pni.mapper;
|
|
||||||
|
|
||||||
import kr.xit.biz.pni.model.PniDTO;
|
|
||||||
import org.egovframe.rte.psl.dataaccess.mapper.Mapper;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* <pre>
|
|
||||||
* description :
|
|
||||||
*
|
|
||||||
* packageName : kr.xit.biz.pni.mapper
|
|
||||||
* fileName : IPniCctvFileMapper
|
|
||||||
* author : limju
|
|
||||||
* date : 2023-07-07
|
|
||||||
* ======================================================================
|
|
||||||
* 변경일 변경자 변경 내용
|
|
||||||
* ----------------------------------------------------------------------
|
|
||||||
* 2023-07-07 limju 최초 생성
|
|
||||||
*
|
|
||||||
* </pre>
|
|
||||||
*/
|
|
||||||
@Mapper
|
|
||||||
public interface IPniCctvFileMapper {
|
|
||||||
int selectLicense(String jobSeCode);
|
|
||||||
int insertNtcnCntcData(PniDTO.NtcnCntcData dto);
|
|
||||||
|
|
||||||
List<PniDTO.PniNtncCntcSndngTgts> selectPniNtncCntcSndngs();
|
|
||||||
int insertCntcSndngMst(PniDTO.PniNtncCntcSndngTgts dto);
|
|
||||||
int insertCntcSndngDtl(PniDTO.PniNtncCntcSndngTgts dto);
|
|
||||||
int updatePniNtcnCntcData(PniDTO.PniNtncCntcSndngTgts dto);
|
|
||||||
}
|
|
@ -1,164 +0,0 @@
|
|||||||
package kr.xit.biz.pni.model;
|
|
||||||
|
|
||||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
|
||||||
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
|
|
||||||
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer;
|
|
||||||
import kr.xit.biz.common.ApiConstants;
|
|
||||||
import lombok.AllArgsConstructor;
|
|
||||||
import lombok.Builder;
|
|
||||||
import lombok.Data;
|
|
||||||
import lombok.NoArgsConstructor;
|
|
||||||
import lombok.experimental.SuperBuilder;
|
|
||||||
|
|
||||||
import java.io.Serializable;
|
|
||||||
import java.time.LocalDateTime;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* <pre>
|
|
||||||
* description : tb_pni_ Entity DTO
|
|
||||||
*
|
|
||||||
* packageName : kr.xit.biz.pni.model
|
|
||||||
* fileName : PniDTO
|
|
||||||
* author : limju
|
|
||||||
* date : 2023-07-07
|
|
||||||
* ======================================================================
|
|
||||||
* 변경일 변경자 변경 내용
|
|
||||||
* ----------------------------------------------------------------------
|
|
||||||
* 2023-07-07 limju 최초 생성
|
|
||||||
*
|
|
||||||
* </pre>
|
|
||||||
*/
|
|
||||||
public class PniDTO {
|
|
||||||
@Data
|
|
||||||
@NoArgsConstructor
|
|
||||||
@AllArgsConstructor
|
|
||||||
@Builder
|
|
||||||
public static class NtcnCntcData implements Serializable {
|
|
||||||
/**
|
|
||||||
* 사전 알림 연계 data id
|
|
||||||
*/
|
|
||||||
private String ntcnCntcDataId;
|
|
||||||
/**
|
|
||||||
* 단속 일시
|
|
||||||
*/
|
|
||||||
private String regltDt;
|
|
||||||
/**
|
|
||||||
* 차량 번호
|
|
||||||
*/
|
|
||||||
private String vhcleNo;
|
|
||||||
/**
|
|
||||||
* 현장 명
|
|
||||||
*/
|
|
||||||
private String sptNm;
|
|
||||||
/**
|
|
||||||
* 현장 별 코드
|
|
||||||
*/
|
|
||||||
private String sptAcctoCode;
|
|
||||||
/**
|
|
||||||
* 파일 명
|
|
||||||
*/
|
|
||||||
private String fileNm;
|
|
||||||
/**
|
|
||||||
* 처리 여부
|
|
||||||
*/
|
|
||||||
private String processAt;
|
|
||||||
/**
|
|
||||||
* 대상 여부
|
|
||||||
*/
|
|
||||||
private String trgetAt;
|
|
||||||
/**
|
|
||||||
* 통합 발송 상세 id
|
|
||||||
*/
|
|
||||||
private String unitySndngDetailId;
|
|
||||||
|
|
||||||
@JsonDeserialize(using = LocalDateDeserializer.class)
|
|
||||||
@JsonFormat(pattern = "yyyy-MM-dd kk:mm:ss")
|
|
||||||
private LocalDateTime registDt;
|
|
||||||
/**
|
|
||||||
* 등록자
|
|
||||||
*/
|
|
||||||
private String register;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@Data
|
|
||||||
@NoArgsConstructor
|
|
||||||
@AllArgsConstructor
|
|
||||||
@SuperBuilder
|
|
||||||
public static class PniNtncCntcSndngTgts implements Serializable {
|
|
||||||
/**
|
|
||||||
* 사전 알림 연계 data id
|
|
||||||
*/
|
|
||||||
private String ntcnCntcDataId;
|
|
||||||
/**
|
|
||||||
* 차량 번호
|
|
||||||
*/
|
|
||||||
private String vhcleNo;
|
|
||||||
/**
|
|
||||||
* 처리 여부
|
|
||||||
*/
|
|
||||||
private String processAt;
|
|
||||||
/**
|
|
||||||
* 대상여부
|
|
||||||
*/
|
|
||||||
private String trgetAt;
|
|
||||||
/**
|
|
||||||
* 사전알림대상ID
|
|
||||||
*/
|
|
||||||
private String ntcnTrgetId;
|
|
||||||
/**
|
|
||||||
* 핸드폰 번호
|
|
||||||
*/private String moblphonNo;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 이름
|
|
||||||
*/
|
|
||||||
private String nm;
|
|
||||||
/**
|
|
||||||
* 생년월일
|
|
||||||
*/
|
|
||||||
private String brthdy;
|
|
||||||
/*삭제여부*/
|
|
||||||
private String deleteAt;
|
|
||||||
/**
|
|
||||||
* 발송건수
|
|
||||||
*/
|
|
||||||
private int sndngCo;
|
|
||||||
/**
|
|
||||||
* 발송유형코드
|
|
||||||
*/
|
|
||||||
@Builder.Default
|
|
||||||
private String sndngTyCode = "PNI";
|
|
||||||
/**
|
|
||||||
* 템플릿 ID
|
|
||||||
*/
|
|
||||||
private String tmplatId;
|
|
||||||
/**
|
|
||||||
* 사전알림 데이타 생성 대상 여부
|
|
||||||
*/
|
|
||||||
private String tgtYn;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 통합발송 마스터ID
|
|
||||||
*/
|
|
||||||
private String unitySndngMastrId;
|
|
||||||
/**
|
|
||||||
* 통합발송 상세ID
|
|
||||||
*/
|
|
||||||
private String unitySndngDetailId;
|
|
||||||
/**
|
|
||||||
* 발송처리상태
|
|
||||||
*/
|
|
||||||
@Builder.Default
|
|
||||||
private String sndngProcessSttus = ApiConstants.SndngProcessStatus.ACCEPT.getCode();
|
|
||||||
/**
|
|
||||||
* 템플릿메세지 데이타
|
|
||||||
*/
|
|
||||||
private String tmpltMsgData;
|
|
||||||
/**
|
|
||||||
* 모바일 페이지 내용
|
|
||||||
*/
|
|
||||||
private String mobilePageCn;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,28 +0,0 @@
|
|||||||
package kr.xit.biz.pni.service;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* <pre>
|
|
||||||
* description : 사전알림 파일 서비스
|
|
||||||
*
|
|
||||||
* packageName : kr.xit.biz.pni.service
|
|
||||||
* fileName : IPniCctvFileService
|
|
||||||
* author : limju
|
|
||||||
* date : 2023-07-07
|
|
||||||
* ======================================================================
|
|
||||||
* 변경일 변경자 변경 내용
|
|
||||||
* ----------------------------------------------------------------------
|
|
||||||
* 2023-07-07 limju 최초 생성
|
|
||||||
*
|
|
||||||
* </pre>
|
|
||||||
*/
|
|
||||||
public interface IPniCctvFileService {
|
|
||||||
/**
|
|
||||||
* 사전알림 cctv 단속 자료 생성(서광)
|
|
||||||
*/
|
|
||||||
void createCctvFileOfSg();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 사전알림 accept 연계발송 데이타 생성
|
|
||||||
*/
|
|
||||||
void acceptPniNtnccntcSndng();
|
|
||||||
}
|
|
@ -1,235 +0,0 @@
|
|||||||
package kr.xit.biz.pni.service;
|
|
||||||
|
|
||||||
import java.io.File;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Optional;
|
|
||||||
import kr.xit.biz.pni.mapper.IPniCctvFileMapper;
|
|
||||||
import kr.xit.biz.pni.model.PniDTO;
|
|
||||||
import kr.xit.core.service.AbstractService;
|
|
||||||
import kr.xit.core.support.utils.DateUtils;
|
|
||||||
import kr.xit.core.support.utils.SFTPUtils;
|
|
||||||
import lombok.RequiredArgsConstructor;
|
|
||||||
import lombok.extern.slf4j.Slf4j;
|
|
||||||
import org.apache.commons.lang3.StringUtils;
|
|
||||||
import org.slf4j.MDC;
|
|
||||||
import org.springframework.beans.factory.annotation.Value;
|
|
||||||
import org.springframework.stereotype.Service;
|
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* <pre>
|
|
||||||
* description : 사전알림 CCTV 파일 서비스
|
|
||||||
*
|
|
||||||
* packageName : kr.xit.biz.pni.service
|
|
||||||
* fileName : PniCctvFileService
|
|
||||||
* author : limju
|
|
||||||
* date : 2023-07-07
|
|
||||||
* ======================================================================
|
|
||||||
* 변경일 변경자 변경 내용
|
|
||||||
* ----------------------------------------------------------------------
|
|
||||||
* 2023-07-07 limju 최초 생성
|
|
||||||
*
|
|
||||||
* </pre>
|
|
||||||
*/
|
|
||||||
@Slf4j
|
|
||||||
@RequiredArgsConstructor
|
|
||||||
@Service
|
|
||||||
public class PniCctvFileService extends AbstractService implements IPniCctvFileService {
|
|
||||||
|
|
||||||
@Value("${app.ssh.host}") private String host;
|
|
||||||
@Value("${app.ssh.port}") private int port;
|
|
||||||
@Value("${app.ssh.id}") private String id;
|
|
||||||
@Value("${app.ssh.passwd}") private String passwd;
|
|
||||||
|
|
||||||
@Value("${app.ssh.sg.root-path}") private String rootPath;
|
|
||||||
@Value("${app.ssh.sg.rcv}") private String rcvPath;
|
|
||||||
@Value("${app.ssh.sg.backup}") private String backupPath;
|
|
||||||
@Value("${app.ssh.sg.err}") private String errPath;
|
|
||||||
|
|
||||||
private final IPniCctvFileMapper mapper;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 사전알림 cctv 단속 자료 생성(서광)
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
@Transactional
|
|
||||||
public void createCctvFileOfSg() {
|
|
||||||
|
|
||||||
// 사전알림 라이선스 유효성 체크
|
|
||||||
int licenseCnt = mapper.selectLicense("PNI");
|
|
||||||
if(licenseCnt == 0) return;
|
|
||||||
|
|
||||||
SFTPUtils sftp = null;
|
|
||||||
|
|
||||||
try {
|
|
||||||
// SFTP connect
|
|
||||||
sftp = new SFTPUtils();
|
|
||||||
sftp.init(host, port, id, passwd, StringUtils.EMPTY);
|
|
||||||
|
|
||||||
// 서광 CCTV 사전알림 대상 조회
|
|
||||||
final String srcPath = rootPath + rcvPath;
|
|
||||||
ArrayList<String> fileNameList = sftp.findFileNameList(srcPath);
|
|
||||||
//if(fileNameList.size() == 0) throw BizRuntimeException.create("사전고지[서광] 처리 대상이 없습니다");
|
|
||||||
|
|
||||||
// 에러 파일 목록
|
|
||||||
ArrayList<String> errFileList = new ArrayList<>();
|
|
||||||
// 성공 파일 목록
|
|
||||||
ArrayList<String> rtnFileList = new ArrayList<>();
|
|
||||||
for (String fn : fileNameList) {
|
|
||||||
String[] arrFi = fn.split("_");
|
|
||||||
|
|
||||||
// 파일 이름 정보 오류시
|
|
||||||
if (arrFi.length != 4 || arrFi[0].length() != 14) {
|
|
||||||
errFileList.add(fn);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
// FIXME :: GS 임시 소스
|
|
||||||
// 파일 다운로드
|
|
||||||
final String downLoadPath = "D:/ImageData/PNI" + "/" + DateUtils.getToday(StringUtils.EMPTY);
|
|
||||||
|
|
||||||
File Folder = new File(downLoadPath);
|
|
||||||
if (!Folder.exists()) Folder.mkdir(); //폴더 생성합니다.
|
|
||||||
sftp.fileDownload(srcPath + "/" + fn, downLoadPath);
|
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
// FIXME : 중복데이타(단속시간 + 차량번호)인 경우 데이타 skip 하도록 해야 할 듯
|
|
||||||
// 사전알림 연계 데이타 생성
|
|
||||||
mapper.insertNtcnCntcData(
|
|
||||||
PniDTO.NtcnCntcData.builder()
|
|
||||||
.regltDt(arrFi[0])
|
|
||||||
.vhcleNo(arrFi[1])
|
|
||||||
.sptNm(arrFi[2])
|
|
||||||
.sptAcctoCode(arrFi[3].split("\\.")[0])
|
|
||||||
.fileNm(fn)
|
|
||||||
.build()
|
|
||||||
);
|
|
||||||
rtnFileList.add(fn);
|
|
||||||
|
|
||||||
// FIXME :: sftp rm 기능 추후 제거
|
|
||||||
// 파일 삭제
|
|
||||||
sftp.rm(fn);
|
|
||||||
}
|
|
||||||
|
|
||||||
// FIXME :: sftp move 기능 추후 사용
|
|
||||||
// 처리한 데이타 backup
|
|
||||||
//fileBackup(sftp, srcPath, errFileList, rtnFileList);
|
|
||||||
|
|
||||||
} finally {
|
|
||||||
if(sftp != null) sftp.disconnect();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 사전알림 accept 연계발송 데이타 생성
|
|
||||||
* 1. 사전알림 연계 발송 데이타 생성 대상 조회
|
|
||||||
* 2. 사전알림 연계 발송 마스터 생성
|
|
||||||
* 3. 사전알림 연계 발송 상세 생성
|
|
||||||
* 4. 사전알림 연계 결과 반영
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
@Transactional
|
|
||||||
public void acceptPniNtnccntcSndng() {
|
|
||||||
List<PniDTO.PniNtncCntcSndngTgts> tgtList = mapper.selectPniNtncCntcSndngs();
|
|
||||||
|
|
||||||
if(tgtList.isEmpty()) return;
|
|
||||||
|
|
||||||
// search 사전알림 연계발송 SMS 데이타 생성 대상
|
|
||||||
Optional<PniDTO.PniNtncCntcSndngTgts> sms = tgtList.stream()
|
|
||||||
.filter(dto -> "JU201".equals(dto.getTmplatId()))
|
|
||||||
.filter(dto -> "Y".equals(dto.getTgtYn()))
|
|
||||||
.findFirst();
|
|
||||||
|
|
||||||
// search 사전알림 연계발송 카카오 알림톡 데이타 생성 대상
|
|
||||||
Optional<PniDTO.PniNtncCntcSndngTgts> kkoMyDoc = tgtList.stream()
|
|
||||||
.filter(dto -> "JU202".equals(dto.getTmplatId()))
|
|
||||||
.filter(dto -> "Y".equals(dto.getTgtYn()))
|
|
||||||
.findFirst();
|
|
||||||
|
|
||||||
// 사전알림 연계발송 master 생성
|
|
||||||
String smsUnitySndngMastrId;
|
|
||||||
String kkoUnitySndngMastrId;
|
|
||||||
String unitySndngMastrId = null;
|
|
||||||
|
|
||||||
// sms 대상 있는지 확인해서 있으면 연계발송 master 생성
|
|
||||||
if(sms.isPresent()){
|
|
||||||
PniDTO.PniNtncCntcSndngTgts tgtDTO = sms.get();
|
|
||||||
mapper.insertCntcSndngMst(tgtDTO);
|
|
||||||
smsUnitySndngMastrId = tgtDTO.getUnitySndngMastrId();
|
|
||||||
MDC.put("unitySndngMastrId", smsUnitySndngMastrId);
|
|
||||||
} else {
|
|
||||||
smsUnitySndngMastrId = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 카카오 알림톡 대상 있는지 확인해서 있으면 연계발송 master 생성
|
|
||||||
if(kkoMyDoc.isPresent()){
|
|
||||||
PniDTO.PniNtncCntcSndngTgts tgtDTO = kkoMyDoc.get();
|
|
||||||
mapper.insertCntcSndngMst(tgtDTO);
|
|
||||||
kkoUnitySndngMastrId = tgtDTO.getUnitySndngMastrId();
|
|
||||||
MDC.put("unitySndngMastrId", kkoUnitySndngMastrId);
|
|
||||||
} else {
|
|
||||||
kkoUnitySndngMastrId = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 사전알림 연계발송 상세 생성 및 결과 처리(사전알림 연계 데이타 반영)
|
|
||||||
// 사전알림 대상 -> 사전알림 sms / 카카오 알림톡 연계 발송 상세 생성
|
|
||||||
// 사전알림 연계 데이타 -> 연계 결과 반영
|
|
||||||
// : 대상 : 연계대상-Y, 진행상태-Y, 통합발송상세ID
|
|
||||||
// 미대상 : 연계대상-N, 진행상태-Y, 통합발송상세ID = null
|
|
||||||
tgtList.forEach(dto -> {
|
|
||||||
dto.setProcessAt("Y");
|
|
||||||
if("Y".equals(dto.getTgtYn())){
|
|
||||||
// sms / 카카오 알림톡 템플릿메시지 data 생성
|
|
||||||
StringBuffer strTmpltMsgData = new StringBuffer();
|
|
||||||
strTmpltMsgData.append("[주정차 단속 사전 알림]");
|
|
||||||
strTmpltMsgData.append ( "\n" );
|
|
||||||
strTmpltMsgData.append("CCTV 주정차 단속 지역입니다.");
|
|
||||||
strTmpltMsgData.append ( "\n" );
|
|
||||||
strTmpltMsgData.append(dto.getVhcleNo() + " 차량은 즉시 이동바랍니다.");
|
|
||||||
dto.setTmpltMsgData(strTmpltMsgData.toString());
|
|
||||||
|
|
||||||
// FIXME :: GS 인증 시험 알림톡이 안되어서 인증톡으로 대체 알림톡 운영 시 필요 없음
|
|
||||||
// 카카오 알림톡 모바일 페이지 문구
|
|
||||||
StringBuffer strmobilePageCn = new StringBuffer();
|
|
||||||
strmobilePageCn.append("{");
|
|
||||||
strmobilePageCn.append("\"details\" : [");
|
|
||||||
strmobilePageCn.append( "{");
|
|
||||||
strmobilePageCn.append( "\"title\" : \"주정차 단속 사전 알림\",");
|
|
||||||
strmobilePageCn.append ( "\"item_type\" : \"PRE_TEXT\",");
|
|
||||||
strmobilePageCn.append ( "\"elements\" : \"CCTV 주정차 단속 지역입니다.\\n"+ dto.getVhcleNo() + " 차량은 즉시 이동바랍니다.\\n- 서광시스템\"");
|
|
||||||
strmobilePageCn.append( "}");
|
|
||||||
strmobilePageCn.append( "]");
|
|
||||||
strmobilePageCn.append("}");
|
|
||||||
dto.setMobilePageCn(strmobilePageCn.toString());
|
|
||||||
|
|
||||||
if("JU201".equals(dto.getTmplatId())) dto.setUnitySndngMastrId(smsUnitySndngMastrId);
|
|
||||||
else if("JU202".equals(dto.getTmplatId()))dto.setUnitySndngMastrId(kkoUnitySndngMastrId);
|
|
||||||
mapper.insertCntcSndngDtl(dto);
|
|
||||||
}
|
|
||||||
mapper.updatePniNtcnCntcData(dto);
|
|
||||||
});
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
private void fileBackup(SFTPUtils sftp, String srcPath, ArrayList<String> errFileList, ArrayList<String> rtnFileList) {
|
|
||||||
final String errorPath = rootPath + errPath;
|
|
||||||
String destPath = rootPath + backupPath;
|
|
||||||
destPath = destPath + "/" + DateUtils.getToday(StringUtils.EMPTY);
|
|
||||||
|
|
||||||
log.info("src path::[{}]", srcPath);
|
|
||||||
log.info("tgt path::[{}]", destPath);
|
|
||||||
|
|
||||||
// file backup
|
|
||||||
for (String fn : rtnFileList) {
|
|
||||||
log.info("fileName::[{}]", fn);
|
|
||||||
sftp.mv(srcPath + "/" + fn, destPath + "/" + fn);
|
|
||||||
}
|
|
||||||
|
|
||||||
// error file backup
|
|
||||||
for (String fn : errFileList) {
|
|
||||||
sftp.mv(srcPath + "/" + fn, errorPath + "/" + fn);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,49 +0,0 @@
|
|||||||
package kr.xit.biz.pni.web;
|
|
||||||
|
|
||||||
import io.swagger.v3.oas.annotations.Operation;
|
|
||||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
|
||||||
import kr.xit.biz.pni.service.IPniCctvFileService;
|
|
||||||
import kr.xit.core.model.ApiResponseDTO;
|
|
||||||
import kr.xit.core.model.IApiResponse;
|
|
||||||
import lombok.RequiredArgsConstructor;
|
|
||||||
import org.springframework.http.MediaType;
|
|
||||||
import org.springframework.web.bind.annotation.PostMapping;
|
|
||||||
import org.springframework.web.bind.annotation.RequestMapping;
|
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* <pre>
|
|
||||||
* description :
|
|
||||||
*
|
|
||||||
* packageName : kr.xit.biz.pni.web
|
|
||||||
* fileName : PniCctvFileController
|
|
||||||
* author : limju
|
|
||||||
* date : 2023-07-07
|
|
||||||
* ======================================================================
|
|
||||||
* 변경일 변경자 변경 내용
|
|
||||||
* ----------------------------------------------------------------------
|
|
||||||
* 2023-07-07 limju 최초 생성
|
|
||||||
*
|
|
||||||
* </pre>
|
|
||||||
*/
|
|
||||||
@Tag(name = "PniCctvFileController", description = "사전고지 CCTV 파일 연계 서비스")
|
|
||||||
@RequiredArgsConstructor
|
|
||||||
@RestController
|
|
||||||
@RequestMapping("/batch/pni/v1")
|
|
||||||
public class PniCctvFileController {
|
|
||||||
private final IPniCctvFileService service;
|
|
||||||
|
|
||||||
@Operation(summary = "사전고지 파일 연계 데이타 생성(서광)", description = "사전고지 파일 연계 데이타 생성(서광)")
|
|
||||||
@PostMapping(value = "/cctvFileOfSg", produces = MediaType.APPLICATION_JSON_VALUE)
|
|
||||||
public IApiResponse cctvFileOfSg() {
|
|
||||||
service.createCctvFileOfSg();
|
|
||||||
return ApiResponseDTO.success();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Operation(summary = "사전고지 연계 데이타 생성(accept)", description = "사전고지 연계 데이타 생성(accept)")
|
|
||||||
@PostMapping(value = "/acceptPniNtnccntcSndng", produces = MediaType.APPLICATION_JSON_VALUE)
|
|
||||||
public IApiResponse acceptPniNtnccntcSndng() {
|
|
||||||
service.acceptPniNtnccntcSndng();
|
|
||||||
return ApiResponseDTO.success();
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,152 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|
||||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
|
||||||
<mapper namespace="kr.xit.biz.ens.mapper.IEnsCctvFileMapper">
|
|
||||||
|
|
||||||
<select id="selectLicense" resultType="int">
|
|
||||||
/** ens-ccvt-mysql-mapper|selectLicense-전자고지 라이선스 체크 */
|
|
||||||
SELECT count(1)
|
|
||||||
FROM tb_cmm_license_manage tcmls
|
|
||||||
WHERE tcmls.job_se_code = #{jobSeCode} AND tcmls.sptaccto_code IS NULL
|
|
||||||
</select>
|
|
||||||
|
|
||||||
<insert id="insertNtcnCntcData">
|
|
||||||
/** ens-mysql-mapper|insertNtcnCntcData-전자 고지연계데이타 생성|seojh */
|
|
||||||
<selectKey keyProperty="ensCntcDataId" resultType="string" order="BEFORE">
|
|
||||||
SELECT concat(date_format(now(), '%Y%m%d'), LPAD(NEXTVAL(tb_ens_cntc_data_seq), 12, '0')) from dual
|
|
||||||
</selectKey>
|
|
||||||
INSERT
|
|
||||||
INTO tb_ens_cntc_data (
|
|
||||||
ens_cntc_data_id, /* 전자 고지연계데이타 ID*/
|
|
||||||
reglt_dt, /* 단속일시 */
|
|
||||||
vhcle_no, /* 차량번호 */
|
|
||||||
spt_nm, /* 현장명 */
|
|
||||||
spt_accto_code, /* 현장별코드 */
|
|
||||||
file_nm, /* 파일명 */
|
|
||||||
regist_dt,
|
|
||||||
register
|
|
||||||
) VALUES (
|
|
||||||
#{ensCntcDataId},
|
|
||||||
#{regltDt},
|
|
||||||
#{vhcleNo},
|
|
||||||
#{sptNm},
|
|
||||||
#{sptAcctoCode},
|
|
||||||
#{fileNm},
|
|
||||||
now(),
|
|
||||||
'batch'
|
|
||||||
)
|
|
||||||
</insert>
|
|
||||||
|
|
||||||
<select id="selectEnsNtncCntcSndngs" resultType="kr.xit.biz.ens.model.EnsDTO$EnsNtncCntcSndngTgt">
|
|
||||||
/** ens-mysql-mapper|selectEnsNtnccntcSndngs-전자 고지 연계 발송 데이타 대상 조회|seojh */
|
|
||||||
SELECT tpncd.ens_cntc_data_id /* 전자 고지연계데이타 ID*/
|
|
||||||
, tpncd.vhcle_no /* 차량번호 */
|
|
||||||
, tpncd.process_at /* 진행상태 */
|
|
||||||
, tpncd.reglt_dt /* 단속 일시 */
|
|
||||||
, tpncd.spt_nm /* 현장 명 */
|
|
||||||
, ttd.moblphon_no /* 핸드폰 번호 */
|
|
||||||
, ttd.nm /* 이름 */
|
|
||||||
, ttd.brthdy /* 생년월일 */
|
|
||||||
, ttd.zip /* 우편번호 */
|
|
||||||
, ttd.adres /* 주소 */
|
|
||||||
, ttd.detail_adres /* 상세 주소 */
|
|
||||||
, IF((ttd.vhcle_no != null OR ttd.vhcle_no != ''), 'Y', 'N') AS tgtYn /* 전자 고지 대상 여부 */
|
|
||||||
, COUNT(*) OVER(PARTITION BY IF((ttd.vhcle_no != null OR ttd.vhcle_no != ''), 'Y', 'N')) AS sndngCo /* 발송 건수 */
|
|
||||||
FROM tb_ens_cntc_data tpncd
|
|
||||||
LEFT OUTER JOIN tb_temp_data ttd ON (tpncd.vhcle_no = ttd.vhcle_no)
|
|
||||||
WHERE tpncd.process_at = 'N'
|
|
||||||
</select>
|
|
||||||
|
|
||||||
<insert id="insertCntcSndngMst">
|
|
||||||
/** ens-mysql-mapper|insertCntcSndngMst-연계발송마스터 생성|seojh */
|
|
||||||
<selectKey keyProperty="unitySndngMastrId,closDt" resultType="hashmap" order="BEFORE">
|
|
||||||
SELECT concat('E', signgu_code, ffnlg_code, RIGHT(date_format(now(), '%Y'),2), LPAD(NEXTVAL(tb_cntc_sndng_mastr_seq), 7, '0')) AS unitySndngMastrId
|
|
||||||
, date_format(date_add(now(), interval + 20 day), '%Y%m%d%H%i%S') AS closDt
|
|
||||||
FROM tb_ens_tmplat_manage
|
|
||||||
WHERE sndng_ty_code = #{sndngTyCode}
|
|
||||||
AND tmplat_id = #{tmplatId}
|
|
||||||
</selectKey>
|
|
||||||
INSERT
|
|
||||||
INTO tb_cntc_sndng_mastr (
|
|
||||||
unity_sndng_mastr_id, /* 통합발송마스터 id */
|
|
||||||
signgu_code, /* 시군구코드 */
|
|
||||||
ffnlg_code, /* 과태료코드 */
|
|
||||||
tmplat_id, /* 템플릿ID */
|
|
||||||
sndng_ty_code, /* 발송유형 코드 */
|
|
||||||
sndng_co, /* 발송 건수 */
|
|
||||||
sndng_process_sttus, /* 발송처리 상태 */
|
|
||||||
sndng_dt, /* 발송일시 */
|
|
||||||
clos_dt, /* 마감일시 */
|
|
||||||
regist_dt,
|
|
||||||
register
|
|
||||||
)
|
|
||||||
SELECT #{unitySndngMastrId}
|
|
||||||
, tetm.signgu_code
|
|
||||||
, tetm.ffnlg_code
|
|
||||||
, tetm.tmplat_id
|
|
||||||
, tetm.sndng_ty_code
|
|
||||||
, #{sndngCo}
|
|
||||||
, #{sndngProcessSttus}
|
|
||||||
, date_format(now(), '%Y%m%d%H%i%S')
|
|
||||||
, #{closDt}
|
|
||||||
, now()
|
|
||||||
, 'batch'
|
|
||||||
FROM tb_ens_tmplat_manage tetm
|
|
||||||
WHERE sndng_ty_code = #{sndngTyCode}
|
|
||||||
AND tmplat_id = #{tmplatId}
|
|
||||||
</insert>
|
|
||||||
|
|
||||||
<insert id="insertCntcSndngDtl">
|
|
||||||
/** ens-mysql-mapper|insertCntcSndngDtl-연계발송상세 생성|seojh */
|
|
||||||
<selectKey keyProperty="unitySndngDetailId" resultType="string" order="BEFORE">
|
|
||||||
SELECT concat('E', signgu_code, ffnlg_code, RIGHT(date_format(now(), '%Y'),2), LPAD(NEXTVAL(tb_cntc_sndng_detail_seq), 7, '0'))
|
|
||||||
FROM tb_ens_tmplat_manage
|
|
||||||
WHERE sndng_ty_code = #{sndngTyCode}
|
|
||||||
AND tmplat_id = #{tmplatId}
|
|
||||||
</selectKey>
|
|
||||||
INSERT
|
|
||||||
INTO tb_cntc_sndng_detail (
|
|
||||||
unity_sndng_detail_id, /* 통합발송 상세ID */
|
|
||||||
unity_sndng_mastr_id, /* 통합발송 마스터ID */
|
|
||||||
signgu_code, /* 시군구 코드 */
|
|
||||||
ffnlg_code, /* 과태료 코드 */
|
|
||||||
vhcle_no, /* 차량번호 */
|
|
||||||
ihidnum, /* 주민번호 - 현재는 전화번호 기반 생년월일 */
|
|
||||||
moblphon_no, /* 핸드폰 번호 */
|
|
||||||
nm, /* 이름 */
|
|
||||||
adres, /* 주소 */
|
|
||||||
detail_adres, /* 상세 주소 */
|
|
||||||
zip, /* 우편번호 */
|
|
||||||
mobile_page_cn, /* 모바일 페이지 내용 */
|
|
||||||
regist_dt,
|
|
||||||
register
|
|
||||||
)
|
|
||||||
SELECT #{unitySndngDetailId}
|
|
||||||
, #{unitySndngMastrId}
|
|
||||||
, tetm.signgu_code
|
|
||||||
, tetm.ffnlg_code
|
|
||||||
, #{vhcleNo}
|
|
||||||
, #{brthdy}
|
|
||||||
, #{moblphonNo}
|
|
||||||
, #{nm}
|
|
||||||
, #{adres}
|
|
||||||
, #{detailAdres}
|
|
||||||
, #{zip}
|
|
||||||
, #{mobilePageCn}
|
|
||||||
, now()
|
|
||||||
, 'batch'
|
|
||||||
FROM tb_ens_tmplat_manage tetm
|
|
||||||
WHERE sndng_ty_code = #{sndngTyCode}
|
|
||||||
AND tmplat_id = #{tmplatId}
|
|
||||||
</insert>
|
|
||||||
|
|
||||||
<update id="updateEnsNtcnCntcData">
|
|
||||||
/** ens-mysql-mapper|updateEnsNtcnCntcData-전자 고지 연계데이타 연계결과 반영|seojh */
|
|
||||||
UPDATE tb_ens_cntc_data
|
|
||||||
SET process_at = #{processAt}
|
|
||||||
, unity_sndng_detail_id = #{unitySndngDetailId}
|
|
||||||
, updt_dt = now()
|
|
||||||
, updusr = 'batch'
|
|
||||||
WHERE ens_cntc_data_id = #{ensCntcDataId}
|
|
||||||
</update>
|
|
||||||
</mapper>
|
|
Loading…
Reference in New Issue