postplus 제거, 차량정원 체크 추가

main
mjkhan21 6 months ago
parent 9a7ae6d2dc
commit 43bb16039d

@ -169,12 +169,6 @@
<artifactId>xit-epost</artifactId>
<version>23.04.01-SNAPSHOT</version>
</dependency>
<!-- postplus 연계 -->
<dependency>
<groupId>cokr.xit.interfaces</groupId>
<artifactId>xit-postplus</artifactId>
<version>23.04.01-SNAPSHOT</version>
</dependency>
<!-- PDF 라이브러리 -->
<dependency>

@ -184,6 +184,42 @@ public class Crdn06Controller extends ApplicationController {
return setPagingInfo(new ModelAndView("jsonView"), crdnService.getCrackdownList(query),"");
}
@RequestMapping(name="차적조회조건", value="/010/vehicleReqs.do")
public ModelAndView downloadVehicleReqs(String... crdnIds) {
List<DataObject> list = crdnService.getCrackdownList(new CrdnQuery().setCrdnIds(crdnIds)).stream()
.map(row -> {
Object vhrno = row.remove("VHRNO");
Object crdnYmd = row.remove("CRDN_YMD");
row.clear();
row.set("VHRNO", vhrno)
.set("CRDN_YMD", crdnYmd);
return row;
})
.toList();
XLSWriter xlsx = new XLSWriter().worksheet(0).cell(0, 0).values(list);
return new ModelAndView("downloadView")
.addObject("download", xlsx.getDownloadable().setFilename("차적조회조건-" + dateFormats.format("yyyyMMdd-HHmmss", System.currentTimeMillis()) + ".xlsx"));
}
@PostMapping(name="차적정보 업데이트", value="/010/uploadVehicles.do")
public ModelAndView uploadVehicles(MultipartFile upload, String... crdnIds) {
List<DataObject> list = crdnService.getCrackdownList(new CrdnQuery().setCrdnIds(crdnIds)).stream()
.map(row -> {
Object vhrno = row.remove("VHRNO");
Object crdnYmd = row.remove("CRDN_YMD");
row.clear();
row.set("VHRNO", vhrno)
.set("CRDN_YMD", crdnYmd);
return row;
})
.toList();
XLSWriter xlsx = new XLSWriter().worksheet(0).cell(0, 0).values(list);
return new ModelAndView("jsonView")
.addObject("download", xlsx.getDownloadable().setFilename("차적조회조건-" + dateFormats.format("yyyyMMdd-HHmmss", System.currentTimeMillis()) + ".xlsx"));
}
/** ID .
* @param crdnID ID
* @return jsonView

@ -437,4 +437,12 @@ public class TaskProcessor extends AbstractBean {
public String getNtrisInterface(String taskSeCd) {
return "lntris";
}
/** .
* @param taskSeCd
* @return ( eGreen)
*/
public String getNoticeDelivery(String taskSeCd) {
return "eGreen";
}
}

@ -139,31 +139,33 @@ public class NisIndivBean extends AbstractBean {
// 2. 부서 정보
DataObject deptInfo = ogdpBean.getDeptStngInfo(new OgdpQuery().setDeptCd(userInfo.string("DEPT_CD")));
// 3. 세외수입 과태료대장에 연계할 단속정보를 조회
DataObject selectCrdnInfo = nisA01Mapper.selectCrdnInfo(req.getCrdnId());
DataObject crdnInfo = nisA01Mapper.selectCrdnInfo(req.getCrdnId());
LocalDateTime now = LocalDateTime.now(); // 현재 날짜/시간
String sggCd = selectCrdnInfo.string("SGG_CD");
String taskSeCd = selectCrdnInfo.string("TASK_SE_CD");
String linkMngKey = sggCd + selectCrdnInfo.string("CRDN_ID") + '_' + now.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"));
// String linkMngKey = selectCrdnInfo.string("SGG_CD") + selectCrdnInfo.string("CRDN_ID");
String sggCd = crdnInfo.string("SGG_CD");
String taskSeCd = crdnInfo.string("TASK_SE_CD");
String crdnId = crdnInfo.string("CRDN_ID");
String linkMngKey = sggCd + crdnId + '_' + now.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"));
// String linkMngKey = sggCd + crdnId;
String nsttCd = userInfo.string("NSTT_CD");
A01 a01 = new A01();
a01.setTaskSeCd(taskSeCd); // 업무 구분 코드
a01.setSgbCd(userInfo.string("NSTT_CD")); // 자치단체코드
a01.setLinkTrgtCd(userInfo.string("NSTT_CD") + taskSeCd + "01001"); // 연계대상코드
a01.setSgbCd(nsttCd); // 자치단체코드
a01.setLinkTrgtCd(nsttCd + taskSeCd + "01001"); // 연계대상코드
a01.setLinkMngKey(linkMngKey); // 연계관리키 시군구코드 + 단속 ID + 년월일시분초
a01.setDptCd(userInfo.string("DEPT_CD")); // 부서코드
a01.setRcptYr(req.getSndngYmd().substring(0, 4)); // 접수연도
a01.setSpacBizCd(selectCrdnInfo.string("SPCL_BIZ_CD")); // 특별회계사업코드 (밤샘주차 0159:주차장특별회계)
a01.setActSeCd(selectCrdnInfo.string("ACNTG_SE_CD")); // 회계구분코드
a01.setRprsTxmCd(selectCrdnInfo.string("TXITM_CD")); // 대표세입과목코드
a01.setOperItemCd(selectCrdnInfo.string("OPER_ITEM_CD")); // 운영항목코드
a01.setSpacBizCd(crdnInfo.string("SPCL_BIZ_CD")); // 특별회계사업코드 (밤샘주차 0159:주차장특별회계)
a01.setActSeCd(crdnInfo.string("ACNTG_SE_CD")); // 회계구분코드
a01.setRprsTxmCd(crdnInfo.string("TXITM_CD")); // 대표세입과목코드
a01.setOperItemCd(crdnInfo.string("OPER_ITEM_CD")); // 운영항목코드
TaskProcessor taskProcessor = TaskProcessor.get();
a01.setFinScrgSeCd(taskProcessor.getFinScrgSeCd(taskSeCd));
// 납부자구분코드(FIM011) 01:주민 02:외국인 03:법인 04:사업자 05:기타 -> 01:개인 02:법인 03:단체 05:외국인
a01.setPyrSeCd(
switch (selectCrdnInfo.string("RTPYR_SE_CD")) {
switch (crdnInfo.string("RTPYR_SE_CD")) {
case "01" -> "01"; // 주민(01) -> 개인(01)
case "02" -> "05"; // 외국인(02) -> 외국인(05)
case "03" -> "02"; // 법인(03) -> 법인(02)
@ -171,46 +173,48 @@ public class NisIndivBean extends AbstractBean {
default -> "03"; // 기타(05) -> 단체(03)
}
);
a01.setPyrNo(selectCrdnInfo.string("RTPYR_NO")); // 납부자번호
a01.setPyrNm(selectCrdnInfo.string("RTPYR_NM")); // 납부자명
a01.setRprsPyrNo(selectCrdnInfo.string("RTPYR_NO")); // 대표납부자번호 / 법인의 경우 대표 납부자번호 필수
a01.setRprsPyrNm(selectCrdnInfo.string("RTPYR_NM")); // 대표납부자명 / 법인의 경우 대표 납부자명 필수
a01.setPyrTelno(selectCrdnInfo.string("RTPYR_TELNO")); // 납부자전화번호
a01.setPyrMblTelno(selectCrdnInfo.string("RTPYR_MBL_TELNO")); // 납부자휴대전화번호
a01.setPyrEmlAddr(selectCrdnInfo.string("RTPYR_EML")); // 납부자이메일주소
String rtpyrNo = crdnInfo.string("RTPYR_NO");
a01.setPyrNo(rtpyrNo); // 납부자번호
String rtpyrNm = crdnInfo.string("RTPYR_NM");
a01.setPyrNm(rtpyrNm); // 납부자명
a01.setRprsPyrNo(rtpyrNo); // 대표납부자번호 / 법인의 경우 대표 납부자번호 필수
a01.setRprsPyrNm(rtpyrNm); // 대표납부자명 / 법인의 경우 대표 납부자명 필수
a01.setPyrTelno(crdnInfo.string("RTPYR_TELNO")); // 납부자전화번호
a01.setPyrMblTelno(crdnInfo.string("RTPYR_MBL_TELNO")); // 납부자휴대전화번호
a01.setPyrEmlAddr(crdnInfo.string("RTPYR_EML")); // 납부자이메일주소
a01.setPyrSttCd("10"); // 납부자상태코드('10')
a01.setPyrLotnoRoadAddrSeCd(selectCrdnInfo.string("ADDR_SE_CD")); // 납부자지번도로주소구분코드 01:지번주소, 02:도로명주소
a01.setPyrZip(selectCrdnInfo.string("ZIP")); // 납부자우편번호
a01.setPyrRoadNmCd(selectCrdnInfo.string("ROAD_NM_CD")); // 납부자도로명코드
a01.setPyrLotnoRoadAddrSeCd(crdnInfo.string("ADDR_SE_CD")); // 납부자지번도로주소구분코드 01:지번주소, 02:도로명주소
a01.setPyrZip(crdnInfo.string("ZIP")); // 납부자우편번호
a01.setPyrRoadNmCd(crdnInfo.string("ROAD_NM_CD")); // 납부자도로명코드
// 납부자주소지하여부(FIM036) 0:지상 1: 지하 -> Y:지하, N:지상
a01.setPyrAddrUdgdYn("1".equals(selectCrdnInfo.get("ROAD_NM_CD")) ? "Y" : "N"); // 지하(1) -> 지하(Y)
a01.setPyrBmno(selectCrdnInfo.string("BMNO")); // 납부자건물본번
a01.setPyrBsno(selectCrdnInfo.string("BSNO")); // 납부자건물부번
a01.setPyrStdgCd(selectCrdnInfo.string("STDG_CD")); // 납부자법정동코드
a01.setPyrDongCd(selectCrdnInfo.string("DONG_CD")); // 납부자행정동코드
a01.setPyrAddrUdgdYn("1".equals(crdnInfo.get("ROAD_NM_CD")) ? "Y" : "N"); // 지하(1) -> 지하(Y)
a01.setPyrBmno(crdnInfo.string("BMNO")); // 납부자건물본번
a01.setPyrBsno(crdnInfo.string("BSNO")); // 납부자건물부번
a01.setPyrStdgCd(crdnInfo.string("STDG_CD")); // 납부자법정동코드
a01.setPyrDongCd(crdnInfo.string("DONG_CD")); // 납부자행정동코드
// 산 구분 코드(FIM037) 0: 1:산 -> 납부자산구분코드 01:일반번지, 02:산번지
a01.setPyrMtnSeCd(selectCrdnInfo.string("MTN_SE_CD").equals("1") ? "02" : "01"); // 산(1) -> 산번지(02) , 01:일반번지
a01.setPyrBldgMngNo(selectCrdnInfo.string("BLDG_MNG_NO")); // 납부자건물관리번호
a01.setPyrMtnSeCd(crdnInfo.string("MTN_SE_CD").equals("1") ? "02" : "01"); // 산(1) -> 산번지(02) , 01:일반번지
a01.setPyrBldgMngNo(crdnInfo.string("BLDG_MNG_NO")); // 납부자건물관리번호
a01.setPyrBldgNm(""); // 납부자건물명
a01.setPyrMno(selectCrdnInfo.string("MNO")); // 납부자본번 / 번지. 지번주소인 경우 필수
a01.setPyrSno(selectCrdnInfo.string("SNO")); // 납부자부번 / 호
a01.setPyrSpclDg(selectCrdnInfo.string("SPCL_DONG")); // 납부자특수동 / 상세주소 동
a01.setPyrSpclHo(selectCrdnInfo.string("SPCL_HO")); // 납부자특수호 / 상세주소 호
a01.setPyrMno(crdnInfo.string("MNO")); // 납부자본번 / 번지. 지번주소인 경우 필수
a01.setPyrSno(crdnInfo.string("SNO")); // 납부자부번 / 호
a01.setPyrSpclDg(crdnInfo.string("SPCL_DONG")); // 납부자특수동 / 상세주소 동
a01.setPyrSpclHo(crdnInfo.string("SPCL_HO")); // 납부자특수호 / 상세주소 호
a01.setPyrTong(""); // 납부자통
a01.setPyrBan(""); // 납부자반
a01.setPyrSpclAddr(selectCrdnInfo.string("SPCL_ADDR")); // 납부자특수주소
a01.setPyrRoadNmAddr(selectCrdnInfo.string("ADDR")); // 납부자도로명주소
a01.setPyrRoadNmDaddr(selectCrdnInfo.string("DTL_ADDR")); // 납부자도로명상세주소
a01.setPyrRoadNmAlAddr(selectCrdnInfo.string("WHOL_ADDR")); // 납부자도로명전체주소
a01.setGlNm(selectCrdnInfo.string("VHRNO")); // 물건지명
a01.setPyrSpclAddr(crdnInfo.string("SPCL_ADDR")); // 납부자특수주소
a01.setPyrRoadNmAddr(crdnInfo.string("ADDR")); // 납부자도로명주소
a01.setPyrRoadNmDaddr(crdnInfo.string("DTL_ADDR")); // 납부자도로명상세주소
a01.setPyrRoadNmAlAddr(crdnInfo.string("WHOL_ADDR")); // 납부자도로명전체주소
a01.setGlNm(crdnInfo.string("VHRNO")); // 물건지명
a01.setLvyTrgtSeCd("01"); // 부과대상구분코드 01:차량
a01.setRegYmd(selectCrdnInfo.string("CRDN_YMD")); // 등록일자 / 위반일자
a01.setFinScrgAmt(selectCrdnInfo.string("FFNLG_AMT")); // 과태료과징금금액
a01.setRegYmd(crdnInfo.string("CRDN_YMD")); // 등록일자 / 위반일자
a01.setFinScrgAmt(crdnInfo.string("FFNLG_AMT")); // 과태료과징금금액
a01.setFcltSeCd(""); // 시설구분코드 / 금연구역흡연위반 과태료인 경우 활용
a01.setRegSeCd(""); // 등록구분코드 / 폐기물관리법위반 과태료인 경우 01투기, 02소각, 99기타
// 감경 사유 코드(FIM019) -> 감경사유구분코드
a01.setRdtRsnSeCd(
switch (selectCrdnInfo.string("RDCT_RSN_CD")) {
switch (crdnInfo.string("RDCT_RSN_CD")) {
case "01" -> "0101"; // 국민기초생활수급자
case "02" -> "0102"; // 한부모가족보호대상자
case "03" -> "0103"; // 장애인(장애의 정도가 심한 장애인)
@ -222,9 +226,9 @@ public class NisIndivBean extends AbstractBean {
default -> "0100"; // 해당없음
}
);
a01.setVhrno(selectCrdnInfo.string("VHRNO")); // 자동차등록번호
a01.setVhrno(crdnInfo.string("VHRNO")); // 자동차등록번호
DataObject mngItemCn = taskProcessor.getMngItemCn(selectCrdnInfo);
DataObject mngItemCn = taskProcessor.getMngItemCn(crdnInfo);
Map<String, Consumer<String>> setMngItemCn = Map.of(
"item1", a01::setMngItemCn1,
"item2", a01::setMngItemCn2,
@ -234,8 +238,8 @@ public class NisIndivBean extends AbstractBean {
);
mngItemCn.entrySet().forEach(entry -> setMngItemCn.get(entry.getKey()).accept((String)entry.getValue()));
a01.setMngItemCn6(sggCd + selectCrdnInfo.string("CRDN_ID")); // 관리6항목
a01.setRmCn(selectCrdnInfo.string("ETC_CN")); // 비고내용
a01.setMngItemCn6(sggCd + crdnId); // 관리6항목
a01.setRmCn(crdnInfo.string("ETC_CN")); // 비고내용
a01.setCreatedBy(userInfo.string("USER_ID"));
a01.setModifiedBy(userInfo.string("USER_ID"));
@ -331,7 +335,6 @@ public class NisIndivBean extends AbstractBean {
DataObject selectCrdnInfo = nisA01Mapper.selectCrdnInfo(req.getCrdnId());
A03Rqst a03Rqst = new A03Rqst();
a03Rqst.setTaskSeCd(selectCrdnInfo.string("TASK_SE_CD")); // 업무 구분 코드
a03Rqst.setSgbCd(userInfo.string("NSTT_CD")); // 자치단체코드
a03Rqst.setLinkTrgtCd(req.getLinkTrgtCd()); // 연계대상코드
@ -375,23 +378,18 @@ public class NisIndivBean extends AbstractBean {
// SSL 무시 /////////////////////////////////////////////////////////////////
public void ignoreSsl() throws Exception {
HostnameVerifier hv = new HostnameVerifier() {
trustAllHttpsCertificates();
HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() {
@Override
public boolean verify(String urlHostName, SSLSession session) {
return true;
}
};
trustAllHttpsCertificates();
HttpsURLConnection.setDefaultHostnameVerifier(hv);
});
}
public void trustAllHttpsCertificates() throws Exception {
TrustManager[] trustAllCerts = new TrustManager[1];
TrustManager tm = new miTM();
trustAllCerts[0] = tm;
SSLContext sc = SSLContext.getInstance("SSL");
sc.init(null, trustAllCerts, null);
sc.init(null, new TrustManager[] {new miTM()}, null);
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
}

@ -13,6 +13,7 @@ import javax.annotation.Resource;
import org.springframework.stereotype.Component;
import cokr.xit.base.user.service.bean.UserBean;
import cokr.xit.fims.FimsConf;
import cokr.xit.fims.crdn.Crdn;
import cokr.xit.fims.crdn.dao.CrdnUpdtMapper;
import cokr.xit.fims.levy.Levy;
@ -67,19 +68,20 @@ public class SnisBean extends AbstractBean {
/** .
* @param req
*/
public void registerPreNotices(SndbQuery req) {
// 과태료대장 등록을 위한 사전통보 추출
Map<String, Bu18WebPreNoticeDTO> prenotices = getPreNotices(req);
// 발송대상 사전통보를 과태료대장에 등록
public String registerPreNotices(SndbQuery req) {
// 발송대상 사전통보 과태료대장 등록
Map<String, Bu18WebPreNoticeDTO> prenotices = getPreNotices(req); // 과태료대장 등록을 위한 사전통보 추출
Map<String, Bu18WebReturnInfoDTO> results = sntrisBean.registerPreNotices(prenotices); // 발송대상 ID별 과태료 등록 응답
// 로컬 발송대상 상세 업데이트
Set<String> ids = results.keySet(); // 발송대상 상세ID
List<SndngDtl> details = sndngDtlMapper.selectSndngDetails(req.setSndngDtlIds(ids.toArray(new String[ids.size()]))).stream()
.map(detail -> {
Bu18WebReturnInfoDTO returned = results.get(detail.getSndngDtlId());
return update(returned, detail);
})
.map(detail -> update(
results.get(
detail.getSndngDtlId()),
detail
)
)
.filter(detail -> detail != null)
.toList();
sndngDtlMapper.updateSndngDtls(details);
@ -92,9 +94,10 @@ public class SnisBean extends AbstractBean {
return results.get(sndngDtlId);
}
));
// 업데이트를 위한 부과정보 가져오기
ids = details.stream().map(SndngDtl::getCrdnId).collect(Collectors.toSet()); // 발송대상의 단속 ID
List<Levy> levies = levyMapper.selectLevys(new LevyQuery().setCrdnIds(ids.toArray(new String[ids.size()]))).stream()
ids = details.stream() // 발송대상의 단속 ID
.map(SndngDtl::getCrdnId)
.collect(Collectors.toSet());
List<Levy> levies = levyMapper.selectLevys(new LevyQuery().setCrdnIds(ids.toArray(new String[ids.size()]))).stream() // 업데이트를 위한 부과정보 가져오기
.map(levy -> {
Bu18WebReturnInfoDTO returned = byCrdnIds.get(levy.getCrdnId());
return update(returned, levy);
@ -102,6 +105,18 @@ public class SnisBean extends AbstractBean {
.filter(levy -> levy != null)
.toList();
levyMapper.updateLevies(levies);
// 단속정보 업데이트
byCrdnIds.forEach((crdnId, returned) -> {
Crdn crdn = new Crdn();
crdn.setCrdnId(crdnId);
crdn.setNxrpAcbKey(returned.getNoticeAk());
crdnUpdtMapper.updateNxrpCrdnLinkYn(crdn); // 연계상태
sndngDtlMapper.updateCrdnNxrpAcbKey(crdn); // 과태료대장키
});
return "[S] 작업이 정상 처리 되었습니다.";
}
private SndngDtl update(Bu18WebReturnInfoDTO returned, SndngDtl sndngDtl) {
@ -126,7 +141,7 @@ public class SnisBean extends AbstractBean {
private Levy update(Bu18WebReturnInfoDTO returned, Levy levy) {
if (returned == null) return null;
levy.setNxrpLevyKey(returned.getNoticeAk()); // 세외수입부과 키 <- 과태료대장 키
levy.setNxrpLevyKey(returned.getBuAfk()); // 세외수입부과 키 <- 세외수입시스템 일련번호
levy.setEpayno(returned.getEnapbuNo()); // 전자납부번호
setBankAccounts(returned.accountGetters(), levy.bankAccountSetters()); // 은행 / 계좌번호
@ -210,7 +225,7 @@ public class SnisBean extends AbstractBean {
prenotice.setBookNo(linkMngKey); // 자료키
prenotice.setSidoCd("11"); // 시도코드
prenotice.setSiguCd(sggCd); // 시구코드
prenotice.setBuseoCd(currentUser.getDeptCode()); // 부서코드
// prenotice.setBuseoCd(currentUser.getDeptCode()); // 서울 세외수입 시스템에서 시도, 시구, 작업자ID로 조회해서 설정
prenotice.setDisposalContent("부과"); // 처분내용
prenotice.setRawBasis(Vltn.legalBasis(crdnInfo)); // 부과근거
@ -225,7 +240,7 @@ public class SnisBean extends AbstractBean {
prenotice.setJukbalTelNo(userInfo.string("TEL_NO")); // 적발담당자 전화번호
String crdnYmdhms = crdnInfo.string("CRDN_YMD") + crdnInfo.string("CRDN_TM");
prenotice.setJukbalYm(crdnYmdhms.substring(0, 6)); // 적발년월
prenotice.setJukbalYmdHs(crdnYmdhms); // 위반일시
prenotice.setJukbalYmdHs(crdnYmdhms.substring(0, 12)); // 위반일시
prenotice.setNapId(crdnInfo.string("RTPYR_NO")); // 납세자 주민번호
prenotice.setNapNm(crdnInfo.string("RTPYR_NM")); // 납세자 이름
@ -245,8 +260,8 @@ public class SnisBean extends AbstractBean {
prenotice.setSendYmd(crdnInfo.string("ADVNTCE_BGNG_YMD")); // 사전통지일
prenotice.setSubmitYmd(crdnInfo.string("ADVNTCE_DUDT_YMD")); // 의견제출기한
prenotice.setSysGubun("PZMS"); // 시스템 구분
prenotice.setLastWorkId(currentUser.getAccount()); // 작업자 ID
prenotice.setSysGubun(FimsConf.get().getSystemGubun()); // 시스템 구분
prenotice.setLastWorkId(userInfo.string("NTRIS_KEY")); // 작업자 ID <- 세외수입 사용자키
prenotice.setLastWorkNm(currentUser.getName()); // 작업자 이름
prenotice.setWorkYmd(now); // 작업일자
@ -283,6 +298,7 @@ public class SnisBean extends AbstractBean {
levy.setLevyNo(notice.getTaxNo()); // 부과번호
levy.setLevyYmd(notice.getTaxYmd()); // 부과일자
levy.setDudtYmd(notice.getNapgiYmd()); // 납기일자
levy.setRcvmtYmd(notice.getNapbuYmd()); // 수납일자
levy.setLevyPcptax((int)notice.getTaxAmt()); // 부과본세 <- 과세금액
levy.setLevyAdamt((int)notice.getGasanAmt()); // 부과가산금
@ -294,6 +310,7 @@ public class SnisBean extends AbstractBean {
levy.setSzrYmd(notice.getApYmd()); // 압류일자
levy.setEpayno(notice.getEnapbuNo()); // 전자납부번호
levy.setNxrpLevyKey(Long.toString(notice.getBuAk())); // 세외수입 부과키
setBankAccounts(notice.accountGetters(), levy.bankAccountSetters()); // 은행 / 계좌번호
});
@ -305,10 +322,11 @@ public class SnisBean extends AbstractBean {
if (notice == null) return;
detail.setSggCd(notice.getSiguCd()); // 시군구 코드
detail.setTaxNo(notice.getNapseNo()); // 납세번호
detail.setEpayno(notice.getEnapbuNo()); // 전자납부번호
detail.setVhrno(notice.getMulNm()); // 차량번호
detail.setLevyNo(notice.getTaxNo()); // 부과번호
// detail.setLevyNo(notice.getTaxNo()); // 부과번호
detail.setLevyYmd(notice.getTaxYmd()); // 부과일자
detail.setDudtYmd(notice.getNapgiYmd()); // 납기일자
@ -320,6 +338,9 @@ public class SnisBean extends AbstractBean {
detail.setDudtAftrAmt(null); // 납기후 금액
setBankAccounts(notice.accountGetters(), detail.bankAccountSetters()); // 은행 / 계좌번호
if (toInt(detail.getSndngDtlSttsCd()) < 2)
detail.setSndngDtlSttsCd("02"); // 발송 상태 코드(FIM050) 02:가상계좌취득
});
for (SndngDtl detail: details) {
affected += sndngDtlMapper.updateSndngDtl(detail);

@ -728,137 +728,7 @@ public class SndngBean extends AbstractBean {
* </ul>
*/
public String createEPost(Sndng sndng) {
/*
// 전자우편 발송 등록 전 오류 자료가 존재하는지 체크
//사진파일 체크
while not eof do
begin
if FieldByName('MM_CARNO').AsString = '' then
begin
sm(' .' + #13 + ' .');
exit;
end;
if FieldByName('GP_ACCOUNT_NO').AsString = '' then
begin
sm(' .' + #13 + ' .');
exit;
end;
if FieldByName('GP_ERC_NO').AsString = '' then
begin
sm(' .' + #13 + ' .');
exit;
end;
if FieldByName('GP_JUSO').AsString = '' then
begin
sm(' .' + #13 + ' .');
exit;
end;
if (FieldByName('GP_TAXNO').AsString = '') and
((copy(CPSystem_Info.Sido_Code,1,2) = '11') or (debug_level = 4)) then
begin
sm(' .' + #13 + ' .');
exit;
end;
img_chk := 0;
imcode := fieldbyname('MM_code').AsString;
// sm(fieldbyname('MM_code').AsString+#13+fieldbyname('MM_imagecnt').AsString);
sgg_code := Copy(imcode, 1, 5); //시군구
YearPath := Copy(imcode, 6, 4); //년도
if fieldbyname('MM_imagecnt').Asinteger = 1 then
begin
if sFtp.isFileExists(sFtp.FtpRootDir + sgg_code + '/' + YearPath + '/' + fieldbyname('MM_code').AsString+'A.jpg') then
inc(img_chk);
end
else if fieldbyname('MM_imagecnt').Asinteger = 2 then
begin
if sFtp.isFileExists(sFtp.FtpRootDir + sgg_code + '/' + YearPath + '/' + fieldbyname('MM_code').AsString+'A.jpg') then
inc(img_chk);
if sFtp.isFileExists(sFtp.FtpRootDir + sgg_code + '/' + YearPath + '/' + fieldbyname('MM_code').AsString+'B.jpg') then
inc(img_chk);
end else if fieldbyname('MM_imagecnt').Asinteger = 3 then
begin
if sFtp.isFileExists(sFtp.FtpRootDir + sgg_code + '/' + YearPath + '/' + fieldbyname('MM_code').AsString+'A.jpg') then
inc(img_chk);
if sFtp.isFileExists(sFtp.FtpRootDir + sgg_code + '/' + YearPath + '/' + fieldbyname('MM_code').AsString+'B.jpg') then
inc(img_chk);
if sFtp.isFileExists(sFtp.FtpRootDir + sgg_code + '/' + YearPath + '/' + fieldbyname('MM_code').AsString+'C.jpg') then
inc(img_chk);
end else if fieldbyname('MM_imagecnt').Asinteger = 4 then
begin
if sFtp.isFileExists(sFtp.FtpRootDir + sgg_code + '/' + YearPath + '/' + fieldbyname('MM_code').AsString+'A.jpg') then
inc(img_chk);
if sFtp.isFileExists(sFtp.FtpRootDir + sgg_code + '/' + YearPath + '/' + fieldbyname('MM_code').AsString+'B.jpg') then
inc(img_chk);
if sFtp.isFileExists(sFtp.FtpRootDir + sgg_code + '/' + YearPath + '/' + fieldbyname('MM_code').AsString+'C.jpg') then
inc(img_chk);
if sFtp.isFileExists(sFtp.FtpRootDir + sgg_code + '/' + YearPath + '/' + fieldbyname('MM_code').AsString+'D.jpg') then
inc(img_chk);
end;
//sm(FindField('MM_imagecnt').Asstring+#13+inttostr(img_chk));
//sm(sFtp.FtpRootDir);
if img_chk <> fieldbyname('MM_imagecnt').Asinteger then
begin
sm(' '+#13+ ' : '+ fieldbyname('MM_carno').AsString +'('+ fieldbyname('MM_code').AsString+')'+
' .'+#13+
' .');
//sm(sFtp.FtpRootDir + sgg_code + '/' + YearPath + '/' + fieldbyname('MM_code').AsString);
exit;
end;
next;
end;
end;
//사진파일 체크
with cdDetail do begin
IndexDefs.Clear;
IndexDefs.Add('IDX_GP_MM_CARNO_ASC' , 'GP_MM_CARNO;MM_CODE' , []);
IndexName := 'IDX_GP_MM_CARNO_ASC';
//IndexFieldNames := 'MM_CODE';
lblSort.Caption := ' : ';
lblSeek.Caption := ' ';
First;
DisableControls;
LVY_NO_Cnt := 0;
ERC_NO_Cnt := 0;
ACCOUNT_NO_Cnt := 0;
while not eof do begin
if FieldByName('MC_LVY_NO').AsString = '' then Inc(LVY_NO_Cnt);
if FieldByName('MC_ERC_NO').AsString = '' then Inc(ERC_NO_Cnt);
if FieldByName('MC_ACCOUNT_NO').AsString = '' then Inc(ACCOUNT_NO_Cnt);
Next;
end;
EnableControls;
if LVY_NO_Cnt > 0 then
begin
Msg_Warning('' + #13 +
' ' + IntToStr(LVY_NO_Cnt) + ' .');
Exit;
end;
if ERC_NO_Cnt > 0 then
begin
Msg_Warning('' + #13 +
' ' + IntToStr(ERC_NO_Cnt) + ' .');
Exit;
end;
if ACCOUNT_NO_Cnt > 0 then
begin
Msg_Warning('' + #13 +
' ' + IntToStr(ACCOUNT_NO_Cnt) + ' .');
Exit;
end;
end;
*/
//test/resources/우편통합 cs소스.txt 참고
// 1. 발송 대장 조회
DataObject sndngInfo = sndngMapper.selectSndngInfo(new SndbQuery().setSndngId(sndng.getSndngId()));
// 2. 사용자 정보를 조회한다.
@ -882,12 +752,12 @@ public class SndngBean extends AbstractBean {
String sndngSeCd = sndngInfo.string("SNDNG_SE_CD");
String sealCd3 = taskProcessor.getSealCd3(taskSeCd, sndngSeCd);
if (isEmpty(sealCd3))
return "[F] 작업중 지정되지 않았습니다.";
return "[F] 작업중 지정되지 않았습니다.";
// 발송 구분
String vltnCd = vltnInfo.string("VLTN_CD");
String jobCd = switch (sndngSeCd) {
case "01" -> vltnCd + "01"; // 계고장
case "01", "11" -> vltnCd + "01"; // 계고장
case "02" -> vltnCd + "02"; // 사전통지
case "03" -> vltnCd + "03"; // 부과
case "04" -> vltnCd + "04"; // 독촉
@ -902,9 +772,8 @@ public class SndngBean extends AbstractBean {
String epostSenderRegSeq = epostRcptRegBean.getEpostSenderRegSeq(sndngInfo.string("TODAY"), sndngInfo.string("DEPT_CD"));
int seqNo = 0;
String postSndngSeCd = sndng.getPostSndngSeCd();
if ("0".equals(postSndngSeCd)) {
if ("0".equals(postSndngSeCd))
seqNo = epostRcptDtlBean.getEpostSenderDetailSeq(sndngInfo.string("TODAY"));
}
// 포맷: 등록일(REG_YMD)-발송기관코드(RECEV_SENDER_ORG_CODE)-업무코드(WORK_ID)-우편물구분(POST_SE)일련번호(RECEV_SEQ_NO)
// 예시: 20170719-40504370000-003-1001
String conKey = sndngInfo.string("TODAY") + "-" + sndngInfo.string("DEPT_CD") + "0000" + "-" + epostSenderRegSeq;
@ -995,8 +864,8 @@ public class SndngBean extends AbstractBean {
epostRcptReg.setSndngId(sndngInfo.string("SNDNG_ID")); // 발송 ID
// 6. 전자우편 접수 등록
boolean rtnScs = epostRcptRegBean.create(epostRcptReg);
if (!rtnScs)
boolean success = epostRcptRegBean.create(epostRcptReg);
if (!success)
throw new RuntimeException("우편통합 발송 작업중 전자우편 접수 등록에 실패하였습니다.");
// 7. 발송 내역을 수정한다.
@ -1007,8 +876,8 @@ public class SndngBean extends AbstractBean {
updtSndng.setSndngSttsCd("01"); // 발송 상태 코드(FIM049) - 01 발송 대기
updtSndng.setSndngId(sndng.getSndngId()); // 발송 ID
int rtnNocs = sndngMapper.updateEPostSndng(updtSndng); // 전자우편 발송 내역 수정
if (rtnNocs != 1)
int affected = sndngMapper.updateEPostSndng(updtSndng); // 전자우편 발송 내역 수정
if (affected != 1)
throw new RuntimeException("우편통합 발송 작업중 발송 내역 수정에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback
// 8. 전자우편 접수 상세 내역을 등록한다.
@ -1256,8 +1125,8 @@ public class SndngBean extends AbstractBean {
}
// 10. 전자우편 접수 상세
rtnScs = epostRcptDtlBean.create(epostRcptDtl);
if (!rtnScs)
success = epostRcptDtlBean.create(epostRcptDtl);
if (!success)
throw new RuntimeException("우편통합 발송 작업중 전자우편 상세 등록에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback
// 11. 발송상세 내역을 수정한다.
@ -1267,8 +1136,8 @@ public class SndngBean extends AbstractBean {
sndngDtl.setSndngDtlSttsCd("03"); // 발송 상세 상태 코드(FIM050) - 03 발송
sndngDtl.setSndngDtlId(sndngDtlInfo.string("SNDNG_DTL_ID"));
rtnNocs = sndngDtlMapper.updateSndngDtlEPost(sndngDtl); // 전자우편 발송상세 내역 수정
if (rtnNocs != 1)
affected = sndngDtlMapper.updateSndngDtlEPost(sndngDtl); // 전자우편 발송상세 내역 수정
if (affected != 1)
throw new RuntimeException("우편통합 발송 작업중 전자우편 상세 등록에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback
}

@ -344,7 +344,7 @@ public class SndngDtlBean extends AbstractBean {
int affected = sndngDtlMapper.updateSndngDtlNxrpA03(uptSndngDtl);
if (affected != 1)
throw new RuntimeException("세외수입 연계 정보를 발송 상세에 수정하지 못했습니다."); // 예외를 발생시켜서 DB Rollback
throw new RuntimeException("세외수입 연계 정보를 발송 상세에 수정하지 못했습니다.");
// 단속, 부과 대장 조회
DataObject crdnLevyInfo = sndngDtlMapper.selectCrdnLevy(sndngDtl.getCrdnId());
@ -356,7 +356,7 @@ public class SndngDtlBean extends AbstractBean {
affected = sndngDtlMapper.updateCrdnNxrpAcbKey(crdn);
if (affected != 1) {
throw new RuntimeException("단속 대장에 세외수입 대장키 수정에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback
throw new RuntimeException("단속 대장에 세외수입 대장키 수정에 실패하였습니다.");
}
// 부과 대장에 등록 및 수정
@ -373,15 +373,15 @@ public class SndngDtlBean extends AbstractBean {
levy.setOperItemCd(a03.getOperItemCd()); // 운영 항목 코드
levy.setLevyNo(a03.getRsveItem1().substring(23, 29)); // 부과 번호
levy.setIspySn(a03.getRsveItem1().substring(29, 31)); // 분납 번호
levy.setLevySeCd("02"); // 부과 구분 코드 FIM040
levy.setUntySeCd("02"); // 통합 구분 코드 FIM072
levy.setRdctSeCd("01"); // 감경 구분 코드 FIM046 - 01 감경
levy.setLevySeCd("02"); // 부과 구분 코드 FIM040
levy.setUntySeCd("02"); // 통합 구분 코드 FIM072
levy.setRdctSeCd("01"); // 감경 구분 코드 FIM046 - 01 감경
levy.setLevyYmd(a03.getOpnSbmsnTermBgngYmd()); // 부과 일자
levy.setFrstDudtYmd(a03.getOpnSbmsnTermEndYmd()); // 최초 납기 일자
levy.setDudtYmd(a03.getOpnSbmsnTermEndYmd()); // 납기 일자
levy.setFfnlgAmt(toInt(a03.getFinScrgAmt())); // 과태료 금액
levy.setLevyPcptax(toInt(a03.getFinScrgAmt()) - toInt(a03.getBfRdtAmt())); // 부과 본세
levy.setLevyAdamt(0); // 부과 가산금
levy.setLevyAdamt(0); // 부과 가산금
levy.setIspyInt(0); // 분납 이자
levy.setRcvmtPcptax(0); // 수납 본세
levy.setRcvmtAdamt(0); // 수납 가산금
@ -442,9 +442,8 @@ public class SndngDtlBean extends AbstractBean {
if (isEmpty(crdnLevyInfo.get("LEVY_ID"))) { // 부과 ID가 없다면
// 부과(TB_LEVY) 대장을 등록한다.
affected = levyMapper.insertLevy(levy);
if (affected != 1) {
throw new RuntimeException("부과대장 등록에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback
}
if (affected != 1)
throw new RuntimeException("부과대장 등록에 실패하였습니다.");
// 단속상태이력(TB_CRDN_STTS_HSTRY)
CrdnSttsHstry crdnSttsHstry = new CrdnSttsHstry();
@ -458,12 +457,12 @@ public class SndngDtlBean extends AbstractBean {
// 단속 상태 이력(TB_CRDN_STTS_HSTRY) 대장에 등록하고, 단속(TB_CRDN) 대장을 수정한다.
rtnScs = crdnSttsHstryBean.createHstryUpdateCrdnSttsCd(crdnSttsHstry);
if (!rtnScs)
throw new RuntimeException("감경부과 등록 중 단속 대장의 단속상태 변경에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback
throw new RuntimeException("감경부과 등록 중 단속 대장의 단속상태 변경에 실패하였습니다.");
} else {
// 단속상태이력(TB_CRDN_STTS_HSTRY) 대장을 등록한다.
rtnScs = crdnSttsHstryBean.create(crdnSttsHstry);
if (!rtnScs)
throw new RuntimeException("감경부과 등록 중 단속 대장의 단속상태 변경에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback
throw new RuntimeException("감경부과 등록 중 단속 대장의 단속상태 변경에 실패하였습니다.");
}
} else {
levy.setLevyId(crdnLevyInfo.string("LEVY_ID"));
@ -471,7 +470,7 @@ public class SndngDtlBean extends AbstractBean {
// 부과(TB_LEVY) 대장을 수정한다.
affected = levyMapper.updateLevy(levy);
if (affected != 1)
throw new RuntimeException("부과대장 수정에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback
throw new RuntimeException("부과대장 수정에 실패하였습니다.");
}
// 수납 정보 확인하여 발송(TB_SNDNG) - 발송 상태 코드(SNDNG_DTL_STTS_CD) 수정
@ -481,13 +480,12 @@ public class SndngDtlBean extends AbstractBean {
// 발송(TB_SNDNG) 대장을 수정한다.
affected = sndngDtlMapper.updateSndngDtlSttsCd(uptSndngDtl);
if (affected != 1) {
throw new RuntimeException("세외수입 연계 정보를 발송 상세에 수정하지 못했습니다."); // 예외를 발생시켜서 DB Rollback
}
if (affected != 1)
throw new RuntimeException("세외수입 연계 정보를 발송 상세에 수정하지 못했습니다.");
}
}
} catch (IOException e) {
throw new RuntimeException("세외수입 과태료대장 연계 작업중 오류가 발생하였습니다."); // 예외를 발생시켜서 DB Rollback
throw new RuntimeException("세외수입 과태료대장 연계 작업중 오류가 발생하였습니다.");
}
}
@ -573,7 +571,7 @@ public class SndngDtlBean extends AbstractBean {
String rtnMsg = createSndbk(sndngDtl);
// 메시지 확인
if (!rtnMsg.contains("[S]")) {
throw new RuntimeException(rtnMsg); // 예외를 발생시켜서 DB Rollback
throw new RuntimeException(rtnMsg);
}
}
@ -591,7 +589,7 @@ public class SndngDtlBean extends AbstractBean {
// 발송상세(TB_SNDNG_DTL)에 반송 정보를 등록한다.
int rtnNocs = sndngDtlMapper.createSndbk(sndngDtl);
if (rtnNocs < 1)
throw new RuntimeException("발송상세의 반송 정보 등록에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback
throw new RuntimeException("발송상세의 반송 정보 등록에 실패하였습니다.");
return "[S] 작업이 정상 처리 되었습니다.";
}
@ -607,7 +605,7 @@ public class SndngDtlBean extends AbstractBean {
// 발송상세(TB_SNDNG_DTL)에 반송 정보를 등록한다.
int rtnNocs = sndngDtlMapper.updateSndbk(sndngDtl);
if (rtnNocs != 1)
throw new RuntimeException("발송상세의 반송 정보 수정에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback
throw new RuntimeException("발송상세의 반송 정보 수정에 실패하였습니다.");
return "[S] 작업이 정상 처리 되었습니다.";
}
@ -638,7 +636,7 @@ public class SndngDtlBean extends AbstractBean {
// 발송 상세(TB_SNDNG_DTL) 대장에 반송 정보를 삭제한다.
int rtnNocs = sndngDtlMapper.deleteSndbk(sndngDtl);
if (rtnNocs < 1)
throw new RuntimeException("발송상세의 반송 정보 삭제에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback
throw new RuntimeException("발송상세의 반송 정보 삭제에 실패하였습니다.");
return "[S] 작업이 정상 처리 되었습니다.";
}
@ -662,7 +660,7 @@ public class SndngDtlBean extends AbstractBean {
// 발송 상세(TB_SNDNG_DTL) 대장에 공시송달 정보를 삭제한다.
int rtnNocs = sndngDtlMapper.deleteSndngDtlSvbtc(sndngDtl);
if (rtnNocs != 1)
throw new RuntimeException("발송상세의 공시송달 정보 삭제에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback
throw new RuntimeException("발송상세의 공시송달 정보 삭제에 실패하였습니다.");
return "[S] 작업이 정상 처리 되었습니다.";
}

@ -63,8 +63,7 @@ public class SndngDtlServiceBean extends AbstractServiceBean implements SndngDtl
@Override
public String registerPreNotice(SndbQuery req) {
snisBean.registerPreNotices(req);
return null;
return snisBean.registerPreNotices(req);
}
@Override

@ -6,6 +6,7 @@ import javax.annotation.Resource;
import org.springframework.stereotype.Service;
import cokr.xit.fims.mngt.service.bean.TaskProcessor;
import cokr.xit.fims.sndb.SndbQuery;
import cokr.xit.fims.sndb.Sndng;
import cokr.xit.fims.sndb.service.SndngService;
@ -24,11 +25,9 @@ import cokr.xit.foundation.data.DataObject;
*/
@Service("sndngService")
public class SndngServiceBean extends AbstractServiceBean implements SndngService {
/** 발송 대장 정보 Bean */
@Resource(name = "sndngBean")
private SndngBean sndngBean;
/** 발송 상세 정보 Bean */
@Resource(name = "sndngDtlBean")
private SndngDtlBean sndngDtlBean;
@ -115,12 +114,17 @@ public class SndngServiceBean extends AbstractServiceBean implements SndngServic
@Override
public String createSndngLink(Sndng sndng) {
return sndngBean.createEPost(sndng);
String delivery = TaskProcessor.get().getNoticeDelivery(sndng.getTaskSeCd());
return switch (delivery) {
case "eGreen" -> sndngBean.createEPost(sndng);
case "postplus" -> sndngBean.createEPost(sndng);
// case "postplus" -> postplusBean.requestProduction(sndng);
default -> "[F] Unknown notice delivery: " + delivery;
};
}
@Override
public String removeSndng(Sndng sndng) {
return sndngBean.removeSndng(sndng);
}
}
}

@ -2181,20 +2181,25 @@ public class Sndb01Controller extends ApplicationController {
public ModelAndView getNonTaxReceiptIndividualA03List(SndbQuery req) {
boolean saved = false;
String rtnMsg = "";
List<DataObject> dtlIds = sndngDtlService.getSndngTrgtDtlIds(req);
// 발송상세 Ids 만큼 반복..
for (DataObject dtl: sndngDtlService.getSndngTrgtDtlIds(req)) {
SndngDtl sndngDtl = new SndngDtl();
sndngDtl.setSndngDtlId(dtl.string("SNDNG_DTL_ID"));
sndngDtl.setCrdnId(dtl.string("CRDN_ID"));
sndngDtl.setLinkTrgtCd(dtl.string("LINK_TRGT_CD"));
sndngDtl.setLinkMngKey(dtl.string("LINK_MNG_KEY"));
sndngDtl.setSndngDtlSttsCd(dtl.string("SNDNG_DTL_STTS_CD"));
sndngDtl.setDelYn("N");
if ("lntris".equals(TaskProcessor.get().getNtrisInterface(req.getTaskSeCd()))) { // 지방 세외수입
// 발송상세 Ids 만큼 반복..
for (DataObject dtl: dtlIds) {
SndngDtl sndngDtl = new SndngDtl();
sndngDtl.setSndngDtlId(dtl.string("SNDNG_DTL_ID"));
sndngDtl.setCrdnId(dtl.string("CRDN_ID"));
sndngDtl.setLinkTrgtCd(dtl.string("LINK_TRGT_CD"));
sndngDtl.setLinkMngKey(dtl.string("LINK_MNG_KEY"));
sndngDtl.setSndngDtlSttsCd(dtl.string("SNDNG_DTL_STTS_CD"));
sndngDtl.setDelYn("N");
rtnMsg = sndngDtlService.getNxrpIndivA03List(sndngDtl);
saved = rtnMsg.contains("[S]");
}
} else { // 서울 세외수입
rtnMsg = sndngDtlService.getNxrpIndivA03List(sndngDtl);
saved = rtnMsg.contains("[S]");
}
}
return new ModelAndView("jsonView")
.addObject("saved", saved)

@ -0,0 +1,129 @@
// 전자우편 발송 등록 전 오류 자료가 존재하는지 체크
//사진파일 체크
while not eof do
begin
if FieldByName('MM_CARNO').AsString = '' then
begin
sm('차량번호가 공란인 내역이 있습니다.' + #13 + '차량번호를 입력해주세요.');
exit;
end;
if FieldByName('GP_ACCOUNT_NO').AsString = '' then
begin
sm('가상계좌가 공란인 내역이 있습니다.' + #13 + '가상계좌를 입력해주세요.');
exit;
end;
if FieldByName('GP_ERC_NO').AsString = '' then
begin
sm('전자납부번호가 공란인 내역이 있습니다.' + #13 + '전자납부번호를 입력해주세요.');
exit;
end;
if FieldByName('GP_JUSO').AsString = '' then
begin
sm('주소가 공란인 내역이 있습니다.' + #13 + '주소를 입력해주세요.');
exit;
end;
if (FieldByName('GP_TAXNO').AsString = '') and
((copy(CPSystem_Info.Sido_Code,1,2) = '11') or (debug_level = 4)) then
begin
sm('과세번호가 공란인 내역이 있습니다.' + #13 + '과세번호를 입력해주세요.');
exit;
end;
img_chk := 0;
imcode := fieldbyname('MM_code').AsString;
// sm(fieldbyname('MM_code').AsString+#13+fieldbyname('MM_imagecnt').AsString);
sgg_code := Copy(imcode, 1, 5); //시군구
YearPath := Copy(imcode, 6, 4); //년도
if fieldbyname('MM_imagecnt').Asinteger = 1 then
begin
if sFtp.isFileExists(sFtp.FtpRootDir + sgg_code + '/' + YearPath + '/' + fieldbyname('MM_code').AsString+'A.jpg') then
inc(img_chk);
end
else if fieldbyname('MM_imagecnt').Asinteger = 2 then
begin
if sFtp.isFileExists(sFtp.FtpRootDir + sgg_code + '/' + YearPath + '/' + fieldbyname('MM_code').AsString+'A.jpg') then
inc(img_chk);
if sFtp.isFileExists(sFtp.FtpRootDir + sgg_code + '/' + YearPath + '/' + fieldbyname('MM_code').AsString+'B.jpg') then
inc(img_chk);
end else if fieldbyname('MM_imagecnt').Asinteger = 3 then
begin
if sFtp.isFileExists(sFtp.FtpRootDir + sgg_code + '/' + YearPath + '/' + fieldbyname('MM_code').AsString+'A.jpg') then
inc(img_chk);
if sFtp.isFileExists(sFtp.FtpRootDir + sgg_code + '/' + YearPath + '/' + fieldbyname('MM_code').AsString+'B.jpg') then
inc(img_chk);
if sFtp.isFileExists(sFtp.FtpRootDir + sgg_code + '/' + YearPath + '/' + fieldbyname('MM_code').AsString+'C.jpg') then
inc(img_chk);
end else if fieldbyname('MM_imagecnt').Asinteger = 4 then
begin
if sFtp.isFileExists(sFtp.FtpRootDir + sgg_code + '/' + YearPath + '/' + fieldbyname('MM_code').AsString+'A.jpg') then
inc(img_chk);
if sFtp.isFileExists(sFtp.FtpRootDir + sgg_code + '/' + YearPath + '/' + fieldbyname('MM_code').AsString+'B.jpg') then
inc(img_chk);
if sFtp.isFileExists(sFtp.FtpRootDir + sgg_code + '/' + YearPath + '/' + fieldbyname('MM_code').AsString+'C.jpg') then
inc(img_chk);
if sFtp.isFileExists(sFtp.FtpRootDir + sgg_code + '/' + YearPath + '/' + fieldbyname('MM_code').AsString+'D.jpg') then
inc(img_chk);
end;
//sm(FindField('MM_imagecnt').Asstring+#13+inttostr(img_chk));
//sm(sFtp.FtpRootDir);
if img_chk <> fieldbyname('MM_imagecnt').Asinteger then
begin
sm('사진파일 검사 중'+#13+ '차량번호 : '+ fieldbyname('MM_carno').AsString +'('+ fieldbyname('MM_code').AsString+')'+
'의 사진이 서버에 저장되지 않았습니다.'+#13+
'서버로 사진을 재전송 처리후 발송하시기 바랍니다.');
//sm(sFtp.FtpRootDir + sgg_code + '/' + YearPath + '/' + fieldbyname('MM_code').AsString);
exit;
end;
next;
end;
end;
//사진파일 체크
with cdDetail do begin
IndexDefs.Clear;
IndexDefs.Add('IDX_GP_MM_CARNO_ASC' , 'GP_MM_CARNO;MM_CODE' , []);
IndexName := 'IDX_GP_MM_CARNO_ASC';
//IndexFieldNames := 'MM_CODE';
lblSort.Caption := '정렬 : 차량번호';
lblSeek.Caption := '차량번호 검색';
First;
DisableControls;
LVY_NO_Cnt := 0;
ERC_NO_Cnt := 0;
ACCOUNT_NO_Cnt := 0;
while not eof do begin
if FieldByName('MC_LVY_NO').AsString = '' then Inc(LVY_NO_Cnt);
if FieldByName('MC_ERC_NO').AsString = '' then Inc(ERC_NO_Cnt);
if FieldByName('MC_ACCOUNT_NO').AsString = '' then Inc(ACCOUNT_NO_Cnt);
Next;
end;
EnableControls;
if LVY_NO_Cnt > 0 then
begin
Msg_Warning('출력불가' + #13 +
'부과번호가 발취 안된 자료가 ' + IntToStr(LVY_NO_Cnt) + ' 건 있습니다.');
Exit;
end;
if ERC_NO_Cnt > 0 then
begin
Msg_Warning('출력불가' + #13 +
'전자납부번호가 발취 안된 자료가 ' + IntToStr(ERC_NO_Cnt) + ' 건 있습니다.');
Exit;
end;
if ACCOUNT_NO_Cnt > 0 then
begin
Msg_Warning('출력불가' + #13 +
'가상계좌가 발취 안된 자료가 ' + IntToStr(ACCOUNT_NO_Cnt) + ' 건 있습니다.');
Exit;
end;
end;
Loading…
Cancel
Save