발송현황 관련 기능 수정/추가

main
mjkhan21 3 months ago
parent 398c2037e7
commit ea140ae482

@ -15,6 +15,7 @@ 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.CrdnInfoMapper;
import cokr.xit.fims.crdn.dao.CrdnUpdtMapper;
import cokr.xit.fims.levy.Levy;
import cokr.xit.fims.levy.LevyQuery;
@ -56,6 +57,8 @@ public class SnisBean extends AbstractBean {
/** 과태료 대장 단속 정보 등록 정보 DAO */
@Resource(name = "nisA01Mapper")
private NisA01Mapper nisA01Mapper;
@Resource(name = "crdnInfoMapper")
private CrdnInfoMapper crdnInfoMapper;
/** 단속 대장 수정 정보 DAO */
@Resource(name = "crdnUpdtMapper")
private CrdnUpdtMapper crdnUpdtMapper;
@ -265,11 +268,48 @@ public class SnisBean extends AbstractBean {
notice -> notice
));
List<String> nxrpLevyKeys = noticeMap.keySet().stream().toList();
// 부과정보 업데이트
List<Levy> levies = levyMapper.selectLevys(new LevyQuery().setNxrpLevyKeys(nxrpLevyKeys));
levies.forEach(levy -> {
for (Levy levy: levies) {
Ye22NoticeInfoDTO notice = noticeMap.get(levy.getNxrpLevyKey());
if (notice == null) continue;
update(notice, levy);
}
levyMapper.updateLevies(levies);
// 발송상세 업데이트
List<SndngDtl> details = sndngDtlMapper.selectSndngDetails(new SndbQuery().setSndngDtlIds(sndngDtl.getSndngDtlId()));
details.forEach(detail -> {
Ye22NoticeInfoDTO notice = noticeMap.get(detail.getLinkMngKey());
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.setLevyYmd(notice.getTaxYmd()); // 부과일자
detail.setDudtYmd(notice.getNapgiYmd()); // 납기일자
detail.setDudtAftrYmd(notice.getNapgiAftYmd()); // 납기후일자
detail.setPcptax((int)notice.getTaxAmt()); // 본세
detail.setAdamt((int)notice.gasanAmt()); // 가산금
detail.setLastAmt((int)notice.totalAmt()); // 최종금액
detail.setDudtAftrAmt(null); // 납기후 금액
setBankAccounts(notice.accountGetters(), detail.bankAccountSetters()); // 은행 / 계좌번호
if (toInt(detail.getSndngDtlSttsCd()) < 2)
detail.setSndngDtlSttsCd("02"); // 발송 상태 코드(FIM050) 02:가상계좌취득
});
for (SndngDtl detail: details) {
sndngDtlMapper.updateSndngDtl(detail);
}
}
private void update(Ye22NoticeInfoDTO notice, Levy levy) {
levy.setSggCd(notice.getSiguCd()); // 시군구 코드
levy.setDeptCd(notice.getBuseoCd()); // 부서코드
@ -294,36 +334,60 @@ public class SnisBean extends AbstractBean {
// levy.setNxrpLevyKey(Long.toString(notice.getBuAk())); // 세외수입 부과키
setBankAccounts(notice.accountGetters(), levy.bankAccountSetters()); // 은행 / 계좌번호
});
int affected = levyMapper.updateLevies(levies);
List<SndngDtl> details = sndngDtlMapper.selectSndngDetails(new SndbQuery().setSndngDtlIds(sndngDtl.getSndngDtlId()));
details.forEach(detail -> {
Ye22NoticeInfoDTO notice = noticeMap.get(detail.getLinkMngKey());
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.setLevyYmd(notice.getTaxYmd()); // 부과일자
}
detail.setDudtYmd(notice.getNapgiYmd()); // 납기일자
detail.setDudtAftrYmd(notice.getNapgiAftYmd()); // 납기후일자
private void update(List<Ye22NoticeInfoDTO> notices) {
if (isEmpty(notices)) return;
detail.setPcptax((int)notice.getTaxAmt()); // 본세
detail.setAdamt((int)notice.gasanAmt()); // 가산금
detail.setLastAmt((int)notice.totalAmt()); // 최종금액
detail.setDudtAftrAmt(null); // 납기후 금액
// 세외수입 연계키별 부과정보
Map<String, Levy> levies = levyMapper.selectLevys(new LevyQuery().setNxrpLevyKeys(notices.stream().map(notice -> Long.toString(notice.getBuAk())).toList()))
.stream().collect(Collectors.toMap(
Levy::getNxrpLevyKey,
levy -> levy
));
// 단속ID별 단속정보 <- 부과정보
List<String> crdnIDs = levies.values().stream().map(Levy::getCrdnId).toList();
Map<String, Crdn> crdns = crdnInfoMapper.selectCrdns(crdnIDs).stream().collect(Collectors.toMap(
Crdn::getCrdnId,
crdn -> crdn
));
// '부과'상태 사전통보 포함여부
boolean bugwa = notices.stream()
.filter(notice -> "0".equals(notice.getBuStatusCd()))
.count() > 0;
// 세외수입 연계키별 발송상세 정보
List<SndngDtl> sndngDtls = bugwa ? sndngDtlMapper.selectSndngDetails(new SndbQuery().setCrdnIds(crdnIDs.toArray(new String[crdnIDs.size()]))) : Collections.emptyList();
Map<String, SndngDtl> sndngDetails = sndngDtls.stream().collect(Collectors.toMap(
SndngDtl::getLinkMngKey,
sndngDtl -> sndngDtl
));
setBankAccounts(notice.accountGetters(), detail.bankAccountSetters()); // 은행 / 계좌번호
if (toInt(detail.getSndngDtlSttsCd()) < 2)
detail.setSndngDtlSttsCd("02"); // 발송 상태 코드(FIM050) 02:가상계좌취득
});
for (SndngDtl detail: details) {
affected += sndngDtlMapper.updateSndngDtl(detail);
for (Ye22NoticeInfoDTO notice: notices) {
String status = notice.getBuStatusCd(); // 과태료 상태
String linkMngKey = Long.toString(notice.getBuAk()); // 세외수입 연계키
Levy levy = levies.get(linkMngKey);
if (levy != null) // 부과정보에 적용
update(notice, levy);
Crdn crdn = crdns.get(levy.getCrdnId());
if (crdn != null) { // 단속정보에 적용
if ("1".equals(status)) { // '완납' 상태일 경우
crdn.setRcvmtAmt((int)notice.totalAmt()); // 수납금액
notice.getNapbuYmd(); // 납부일자
String crdnStatus = switch (crdn.getCrdnSttsCd()) {
case "23", "31", "42", "43", "44", "45" -> "71"; // 사전통보수납
case "51" -> "72"; // 부과수납
case "52" -> "73"; // 독촉수납
case "53", "54" -> "74"; // 압류예정수납
case "55" -> "75"; // 압류수납
default -> null;
};
if (crdnStatus != null)
crdn.setCrdnSttsCd(crdnStatus);
}
}
}
}

@ -223,4 +223,6 @@ public interface SndngDtlMapper extends AbstractMapper {
* @return
*/
int deleteSndngDtlSvbtc(SndngDtl sndngDtl);
List<DataObject> selectDetailList(List<String> sndngIDs);
}

@ -105,4 +105,6 @@ public interface SndngDtlService {
* </ul>
*/
String removeSndbk(SndngDtl sndngDtl);
List<DataObject> getDetailList(List<String> sndngIDs);
}

@ -420,10 +420,11 @@ public class SndngDtlBean extends AbstractBean {
if (!("03,05".contains(sndbkInfo.string("SNDNG_DTL_STTS_CD"))))
return "[F] 반송 등록 대상자료가 아닙니다.";
// 등기 번호가 있는지 확인
if (sndbkInfo.string("RG_NO").equals(""))
String rgNo = blankIfEmpty(sndbkInfo.string("RG_NO"));
if (rgNo.isEmpty())
return "[F] 등기번호가 존재하지 않습니다.";
// 등기 번호가 13자리인지 확인
if (sndbkInfo.string("RG_NO").length() != 13)
if (rgNo.length() != 13)
return "[F] 등기번호 자릿수(13)가 맞지 않습니다.";
// 전자우편 배달 결과 조회
@ -553,4 +554,8 @@ public class SndngDtlBean extends AbstractBean {
return "[S] 작업이 정상 처리 되었습니다.";
}
public List<DataObject> getDetailList(List<String> sndngIDs) {
return sndngDtlMapper.selectDetailList(sndngIDs);
}
}

@ -106,4 +106,9 @@ public class SndngDtlServiceBean extends AbstractServiceBean implements SndngDtl
public String removeSndbk(SndngDtl sndngDtl) {
return sndngDtlBean.removeSndbk(sndngDtl);
}
@Override
public List<DataObject> getDetailList(List<String> sndngIDs) {
return sndngDtlBean.getDetailList(sndngIDs);
}
}

@ -53,9 +53,6 @@ import cokr.xit.fims.sprt.dao.IntegrationSearchMapper;
import cokr.xit.fims.sprt.service.IntegrationSearchService;
import cokr.xit.fims.sprt.service.bean.MediaBean;
import cokr.xit.fims.task.Task;
import cokr.xit.fims.wpm.WoopyonMoaRequest;
import cokr.xit.fims.wpm.service.WoopyonMoaService;
import cokr.xit.foundation.Downloadable;
import cokr.xit.foundation.UserInfo;
import cokr.xit.foundation.data.DataObject;
@ -167,8 +164,6 @@ public class Sndb01Controller extends ApplicationController {
protected OutsourcingStngBean outsourcingStngBean;
@Resource(name="integrationSearchMapper")
private IntegrationSearchMapper integrationSearchMapper;
@Resource(name="woopyonMoaService")
private WoopyonMoaService woopyonMoaService;
/** (sndb/sndb01/010-main) .
* @return /sndb/sndb01/010-main
@ -440,8 +435,6 @@ public class Sndb01Controller extends ApplicationController {
return setPagingInfo(new ModelAndView("jsonView"), result, "");
} else {
List<DataObject> list = sndngDtlService.getSndngDtlList(req.setFetchSize(0));
String template = req.getType();
if (isEmpty(template)) {
List<CellDef> cellDefs = fromJson(req.getCellDefs(), CellDef.listType());
XLSWriter xlsx = new XLSWriter().worksheet(0);
@ -483,18 +476,6 @@ public class Sndb01Controller extends ApplicationController {
return new ModelAndView("downloadView")
.addObject("download", xlsx.getDownloadable().setFilename("계고장 발송상세" + "_목록_" + now() + ".xlsx"));
} else {
WoopyonMoaRequest wreq = new WoopyonMoaRequest()
.setTemplate(template)
.setSndngDtlList(list)
.setStandardYN("규격")
.setWeight(25)
.setPieceCount(1)
.setSndngId(req.getSndngId());
Downloadable downloadable = woopyonMoaService.downloadRequest(wreq);
return new ModelAndView("downloadView")
.addObject("download", downloadable.setFilename("우편등록_" + now() + ".xls"));
}
}
}

@ -23,6 +23,8 @@ public class WoopyonMoaRequest extends ServiceRequest {
private int pieceCount;
/** 발송 아이디 */
private String sndngId;
/** 취급구분 */
private String divKb;
/** 발송상세목록 */
private List<DataObject> sndngDtlList;
}

@ -45,6 +45,7 @@ public class WoopyonMoaBean extends AbstractBean {
sndng.setDivKb(epostRcptReg.getDivKb()); // 취급 구분
// sndng.setEpostNoticeId(); // 전자우편 안내문 ID
*/
sndng.setDivKb(req.getDivKb()); // 취급 구분
sndng.setSndngSttsCd("03"); // 발송 상태 코드(FIM049) - 03 전송, 01 발송 대기
sndng.setSndngId(req.getSndngId()); // 발송 ID

@ -1,5 +1,7 @@
package cokr.xit.fims.wpm.web;
import java.util.List;
import javax.annotation.Resource;
import org.springframework.stereotype.Controller;
@ -8,15 +10,44 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.ModelAndView;
import cokr.xit.fims.sndb.SndbQuery;
import cokr.xit.fims.sndb.service.SndngDtlService;
import cokr.xit.fims.wpm.WoopyonMoaRequest;
import cokr.xit.fims.wpm.service.WoopyonMoaService;
import cokr.xit.foundation.Downloadable;
import cokr.xit.foundation.data.DataObject;
import cokr.xit.foundation.web.AbstractController;
@Controller
@RequestMapping("/woopyonmoa")
public class WoopyonMoaController extends AbstractController {
/**발송 상세 서비스*/
@Resource(name="sndngDtlService")
private SndngDtlService sndngDtlService;
@Resource(name = "woopyonMoaService")
private WoopyonMoaService woopyonMoaService;
@PostMapping(name="발송정보 다운로드", value="/download.do")
public ModelAndView downloadRequest(WoopyonMoaRequest req) {
List<DataObject> list = sndngDtlService.getSndngDtlList(
new SndbQuery().setSndngId(req.getSndngId()).setFetchAll(true)
);
Downloadable downloadable = woopyonMoaService.downloadRequest(
req.setStandardYN("규격")
.setWeight(25)
.setPieceCount(1)
.setSndngDtlList(list)
);
return new ModelAndView("downloadView")
.addObject("download", downloadable.setFilename("우편등록_" + now() + ".xls"));
}
private String now() {
return dateFormats.format("yyyyMMdd_HHmmss", System.currentTimeMillis());
}
@PostMapping(name="발송정보 업데이트", value="/update.do")
public ModelAndView updateStatus(MultipartFile upload) {
try {

@ -7,7 +7,7 @@
2023-08-25 JoJH 최초 작성
============================ -->
<resultMap id="sndngDtlRow" type="cokr.xit.fims.sndb.SndngDtl"> <!-- 발송 상세 -->
<resultMap id="sndngDtlRow" type="cokr.xit.fims.sndb.SndngDtl"> <!-- 발송 상세 -->
<result property="sndngDtlId" column="SNDNG_DTL_ID" /> <!-- 발송 상세 ID -->
<result property="sndngId" column="SNDNG_ID" /> <!-- 발송 ID -->
<result property="svbtcId" column="SVBTC_ID" /> <!-- 공시송달 ID -->
@ -100,16 +100,17 @@
<result property="removedAt" column="DEL_DT" /> <!-- 삭제 일시 -->
<result property="removedBy" column="DLTR" /> <!-- 삭제자 -->
<result property="delRsn" column="DEL_RSN" /> <!-- 삭제 사유 -->
</resultMap>
</resultMap>
<select id="selectSndngDetails" parameterType="map" resultMap="sndngDtlRow">/* 발송상세 객체 조회(sndngDtlMapper.selectSndngDetails) */
SELECT *
<select id="selectSndngDetails" parameterType="map" resultMap="sndngDtlRow">/* 발송상세 객체 조회(sndngDtlMapper.selectSndngDetails) */
SELECT *
FROM TB_SNDNG_DTL
WHERE SNDNG_DTL_ID IN (<foreach collection="sndngDtlIds" item="sndngDtlId" separator=",">#{sndngDtlId}</foreach>)
</select>
<where>
<if test='sndngDtlIds != null'>AND SNDNG_DTL_ID IN (<foreach collection="sndngDtlIds" item="sndngDtlId" separator=",">#{sndngDtlId}</foreach>)</if>
<if test='crdnIds != null'>AND CRDN_ID IN (<foreach collection="crdnIds" item="crdnId" separator=",">#{crdnId}</foreach>)</if>
</where></select>
<sql id="selectList">
SELECT SD.SNDNG_DTL_ID <!-- 발송 상세 ID -->
<sql id="selectList">SELECT SD.SNDNG_DTL_ID <!-- 발송 상세 ID -->
, SD.SNDNG_ID <!-- 발송 ID -->
, SD.CRDN_ID <!-- 단속 ID -->
, SD.SVBTC_ID <!-- 공시송달 ID -->
@ -234,10 +235,9 @@
FROM TB_SNDNG_DTL SD
INNER JOIN TB_CRDN C ON (SD.CRDN_ID = C.CRDN_ID)
INNER JOIN TB_PAYER P ON (C.RTPYR_ID = P.RTPYR_ID)
LEFT OUTER JOIN TB_SNDNG S ON (SD.SNDNG_ID = S.SNDNG_ID)
</sql>
LEFT OUTER JOIN TB_SNDNG S ON (SD.SNDNG_ID = S.SNDNG_ID)</sql>
<select id="selectSndngDtlList" parameterType="map" resultType="dataobject">/* 발송 상세 목록 조회(sndngDtlMapper.selectSndngDtlList) */
<select id="selectSndngDtlList" parameterType="map" resultType="dataobject">/* 발송 상세 목록 조회(sndngDtlMapper.selectSndngDtlList) */
<include refid="utility.paging-prefix" />
<include refid="selectList" />
<where>
@ -294,9 +294,9 @@
</where>
<include refid="utility.orderBy" />
<include refid="utility.paging-suffix" />
</select>
</select>
<select id="selectSndngDtls" parameterType="map" resultType="dataobject">/* 발송 상세 객체 가져오기(sndngDtlMapper.selectSndngDtls) */
<select id="selectSndngDtls" parameterType="map" resultType="dataobject">/* 발송 상세 객체 가져오기(sndngDtlMapper.selectSndngDtls) */
<include refid="selectList" />
<where>
<if test="sndngDtlIds != null">
@ -318,9 +318,9 @@
</if>
</where>
<include refid="utility.orderBy" />
</select>
</select>
<select id="selectSndngTrgtDtlIds" parameterType="map" resultType="dataobject">/* 발송 ID로 발송상세 ID를 가져오기(sndngDtlMapper.selectSndngTrgtDtlIds) */
<select id="selectSndngTrgtDtlIds" parameterType="map" resultType="dataobject">/* 발송 ID로 발송상세 ID를 가져오기(sndngDtlMapper.selectSndngTrgtDtlIds) */
SELECT SNDNG_DTL_ID <!-- 발송 상세 ID -->
, CRDN_ID <!-- 단속 ID -->
, LINK_TRGT_CD <!-- 연계 대상 코드 -->
@ -342,9 +342,9 @@
</if>
AND DEL_YN = 'N' <!-- 삭제 여부 -->
ORDER BY SNDNG_DTL_ID
</select>
</select>
<insert id="insertSndngDtl" parameterType="cokr.xit.fims.sndb.SndngDtl">/* 발송 상세 등록(sndngDtlMapper.insertSndngDtl) */
<insert id="insertSndngDtl" parameterType="cokr.xit.fims.sndb.SndngDtl">/* 발송 상세 등록(sndngDtlMapper.insertSndngDtl) */
<selectKey resultType="string" keyProperty="sndngDtlId" keyColumn="NEW_ID" order="BEFORE">
<include refid="numbering.keyBySggAndYear">
<property name="TABLE_NAME" value="TB_SNDNG_DTL" />
@ -534,9 +534,9 @@
, <include refid="utility.now" /> <!-- 수정 일시 -->
, #{modifiedBy} <!-- 수정자 -->
)
</insert>
</insert>
<update id="updateSndngDtl" parameterType="cokr.xit.fims.sndb.SndngDtl">/* 발송 상세 수정(sndngDtlMapper.updateSndngDtl) */
<update id="updateSndngDtl" parameterType="cokr.xit.fims.sndb.SndngDtl">/* 발송 상세 수정(sndngDtlMapper.updateSndngDtl) */
UPDATE TB_SNDNG_DTL
SET SVBTC_ID = #{svbtcId} <!-- 공시송달 ID -->
, LINK_TRGT_CD = #{linkTrgtCd} <!-- 연계 대상 코드 -->
@ -623,9 +623,9 @@
, MDFR = #{modifiedBy} <!-- 수정자 -->
WHERE SNDNG_DTL_ID = #{sndngDtlId} <!-- 발송 상세 ID -->
AND DEL_YN = 'N'
</update>
</update>
<update id="deleteSndngDtl" parameterType="cokr.xit.fims.sndb.SndngDtl">/* 발송 상세 삭제(sndngDtlMapper.deleteSndngDtl) */
<update id="deleteSndngDtl" parameterType="cokr.xit.fims.sndb.SndngDtl">/* 발송 상세 삭제(sndngDtlMapper.deleteSndngDtl) */
UPDATE TB_SNDNG_DTL
SET DEL_YN = 'Y'
, DEL_DT = <include refid="utility.now" /> <!-- 삭제 일시 -->
@ -644,9 +644,9 @@
</otherwise>
</choose>
AND DEL_YN = 'N'
</update>
</update>
<update id="updateSndngDtlSttsCd" parameterType="cokr.xit.fims.sndb.SndngDtl">/* 발송 상세 상태 코드 수정(sndngDtlMapper.updateSndngDtlSttsCd) */
<update id="updateSndngDtlSttsCd" parameterType="cokr.xit.fims.sndb.SndngDtl">/* 발송 상세 상태 코드 수정(sndngDtlMapper.updateSndngDtlSttsCd) */
UPDATE TB_SNDNG_DTL
SET BFR_SNDNG_DTL_STTS_CD = SNDNG_DTL_STTS_CD <!-- 이전 발송 상세 상태 코드 -->
, SNDNG_DTL_STTS_CD = #{sndngDtlSttsCd} <!-- 발송 상세 상태 코드 -->
@ -660,9 +660,9 @@
, MDFR = #{modifiedBy} <!-- 수정자 -->
WHERE SNDNG_DTL_ID = #{sndngDtlId} <!-- 발송 상세 ID -->
AND DEL_YN = 'N'
</update>
</update>
<update id="updateSndngDtlNxrpA03" parameterType="cokr.xit.fims.sndb.SndngDtl">/* 발송 상세 수정(sndngDtlMapper.updateSndngDtlNxrpA03) */
<update id="updateSndngDtlNxrpA03" parameterType="cokr.xit.fims.sndb.SndngDtl">/* 발송 상세 수정(sndngDtlMapper.updateSndngDtlNxrpA03) */
UPDATE TB_SNDNG_DTL
SET BFR_SNDNG_DTL_STTS_CD = SNDNG_DTL_STTS_CD <!-- 이전 발송 상세 상태 코드 -->
, SNDNG_DTL_STTS_CD= #{sndngDtlSttsCd} <!-- 발송 상세 상태 코드 -->
@ -724,9 +724,9 @@
, MDFR = #{modifiedBy} <!-- 수정자 -->
WHERE SNDNG_DTL_ID = #{sndngDtlId} <!-- 발송 상세 ID -->
AND DEL_YN = 'N'
</update>
</update>
<update id="updateSndngDtlRcvmtCd" parameterType="cokr.xit.fims.sndb.SndngDtl">/* 발송 상세 발송 수납 코드 수정(sndngDtlMapper.updateSndngDtlRcvmtCd) */
<update id="updateSndngDtlRcvmtCd" parameterType="cokr.xit.fims.sndb.SndngDtl">/* 발송 상세 발송 수납 코드 수정(sndngDtlMapper.updateSndngDtlRcvmtCd) */
UPDATE TB_SNDNG_DTL
SET BFR_SNDNG_DTL_STTS_CD = SNDNG_DTL_STTS_CD <!-- 이전 발송 상세 상태 코드 -->
, SNDNG_DTL_STTS_CD= #{sndngDtlSttsCd} <!-- 발송 상세 상태 코드 -->
@ -735,9 +735,9 @@
, MDFR = #{modifiedBy} <!-- 수정자 -->
WHERE SNDNG_DTL_ID = #{sndngDtlId} <!-- 발송 상세 ID -->
AND DEL_YN = 'N'
</update>
</update>
<update id="updateSndngDtlEPost" parameterType="cokr.xit.fims.sndb.SndngDtl">/* 전자우편 발송상세 내역 수정(sndngDtlMapper.updateSndngDtlEPost) */
<update id="updateSndngDtlEPost" parameterType="cokr.xit.fims.sndb.SndngDtl">/* 전자우편 발송상세 내역 수정(sndngDtlMapper.updateSndngDtlEPost) */
UPDATE TB_SNDNG_DTL
SET BFR_SNDNG_DTL_STTS_CD = SNDNG_DTL_STTS_CD <!-- 이전 발송 상세 상태 코드 -->
, SNDNG_DTL_STTS_CD= #{sndngDtlSttsCd} <!-- 발송 상세 상태 코드 -->
@ -747,9 +747,9 @@
, MDFR = #{modifiedBy} <!-- 수정자 -->
WHERE SNDNG_DTL_ID = #{sndngDtlId} <!-- 발송 상세 ID -->
AND DEL_YN = 'N'
</update>
</update>
<select id="selectSndbkList" parameterType="map" resultType="dataobject">/* 반송 목록 조회(sndngDtlMapper.selectSndbkList) */
<select id="selectSndbkList" parameterType="map" resultType="dataobject">/* 반송 목록 조회(sndngDtlMapper.selectSndbkList) */
<include refid="utility.paging-prefix" />
SELECT SD.SNDNG_DTL_ID <!-- 발송 상세 ID -->
, SD.SVBTC_ID <!-- 공시송달 ID -->
@ -822,14 +822,14 @@
<include refid="fromSndbk" />
<include refid="utility.orderBy" />
<include refid="utility.paging-suffix" />
</select>
</select>
<sql id="fromSndbk">
<sql id="fromSndbk">
FROM TB_SNDNG_DTL SD
INNER JOIN TB_SNDNG S ON (SD.SNDNG_ID = S.SNDNG_ID)
INNER JOIN TB_CRDN C ON (SD.CRDN_ID = C.CRDN_ID)
INNER JOIN TB_PAYER P ON (C.RTPYR_ID = P.RTPYR_ID)
LEFT OUTER JOIN TB_EPOST_DLVR_RSLT EDR ON (SD.CON_KEY = EDR.CON_KEY AND SD.RG_NO = EDR.REGINO)
LEFT OUTER JOIN TB_EPOST_DLVR_RSLT EDR ON (SD.CON_KEY = EDR.CON_KEY AND SD.RG_NO = EDR.REGINO)
<where>
<if test="sndngDtlIds != null">
AND SD.SNDNG_DTL_ID IN ( <!-- 발송 상세 Ids -->
@ -954,15 +954,15 @@
</choose>
</if>
</where>
</sql>
</sql>
<select id="selectSvbtcsTrgtSndngDtlIds" parameterType="map" resultType="dataobject">/* 공시송달 대상 발송 상세 ID 가져오기(sndngMapper.selectSvbtcsTrgtSndngDtlIds) */
<select id="selectSvbtcsTrgtSndngDtlIds" parameterType="map" resultType="dataobject">/* 공시송달 대상 발송 상세 ID 가져오기(sndngMapper.selectSvbtcsTrgtSndngDtlIds) */
SELECT SD.SNDNG_DTL_ID <!-- 발송 상세 ID -->
<include refid="fromSndbk" />
<include refid="utility.orderBy" />
</select>
<sql id="selectSndbk">
<sql id="selectSndbk">
SELECT SD.SNDNG_DTL_ID <!-- 발송 상세 ID -->
, SD.CRDN_ID <!-- 단속 ID -->
, SD.SVBTC_ID <!-- 공시송달 ID -->
@ -983,9 +983,9 @@
, S.TASK_SE_CD <!-- 업무 구분 코드 -->
FROM TB_SNDNG_DTL SD
INNER JOIN TB_SNDNG S ON (SD.SNDNG_ID = S.SNDNG_ID)
</sql>
</sql>
<select id="selectSndbks" parameterType="map" resultType="dataobject">/* 반송 정보 조회(sndngDtlMapper.selectSndbks) */
<select id="selectSndbks" parameterType="map" resultType="dataobject">/* 반송 정보 조회(sndngDtlMapper.selectSndbks) */
<include refid="selectSndbk" />
<where>
<if test="sndngDtlIds != null">
@ -1018,9 +1018,9 @@
</where>
AND SD.DEL_YN = 'N'
<include refid="utility.orderBy" />
</select>
</select>
<update id="createSndbk" parameterType="cokr.xit.fims.sndb.SndngDtl">/* 발송상세의 반송 정보 등록(sndngDtlMapper.createSndbk) */
<update id="createSndbk" parameterType="cokr.xit.fims.sndb.SndngDtl">/* 발송상세의 반송 정보 등록(sndngDtlMapper.createSndbk) */
UPDATE TB_SNDNG_DTL
SET BFR_SNDNG_DTL_STTS_CD = SNDNG_DTL_STTS_CD <!-- 전 발송 상세 상태 코드 -->
, DLVR_YMD = #{dlvrYmd} <!-- 배달 일자 -->
@ -1041,9 +1041,9 @@
</otherwise>
</choose>
AND DEL_YN = 'N'
</update>
</update>
<update id="updateSndbk" parameterType="cokr.xit.fims.sndb.SndngDtl">/* 발송상세의 반송 정보 수정(sndngDtlMapper.updateSndbk) */
<update id="updateSndbk" parameterType="cokr.xit.fims.sndb.SndngDtl">/* 발송상세의 반송 정보 수정(sndngDtlMapper.updateSndbk) */
UPDATE TB_SNDNG_DTL
SET BFR_DLVR_YMD = DLVR_YMD <!-- 전 배달 일자 -->
, BFR_DLVR_TM = DLVR_TM <!-- 전 배달 시각 -->
@ -1064,9 +1064,9 @@
</otherwise>
</choose>
AND DEL_YN = 'N'
</update>
</update>
<update id="deleteSndbk" parameterType="cokr.xit.fims.sndb.SndngDtl">/* 발송상세의 반송 정보 삭제(sndngDtlMapper.deleteSndbk) */
<update id="deleteSndbk" parameterType="cokr.xit.fims.sndb.SndngDtl">/* 발송상세의 반송 정보 삭제(sndngDtlMapper.deleteSndbk) */
UPDATE TB_SNDNG_DTL
SET BFR_SNDNG_DTL_STTS_CD = NULL <!-- 전 발송 상세 상태 코드 -->
, BFR_DLVR_YMD = NULL <!-- 전 배달 일자 -->
@ -1089,16 +1089,16 @@
</otherwise>
</choose>
AND DEL_YN = 'N'
</update>
</update>
<select id="selectTnocsSndngDtlSvbtc" parameterType="cokr.xit.fims.sndb.SndngDtl" resultType="int">/* 발송상세 대장에 공시송달ID에 해당하는 총건수 가져오기(sndngDtlMapper.selectTnocsSndngDtlSvbtc) */
<select id="selectTnocsSndngDtlSvbtc" parameterType="cokr.xit.fims.sndb.SndngDtl" resultType="int">/* 발송상세 대장에 공시송달ID에 해당하는 총건수 가져오기(sndngDtlMapper.selectTnocsSndngDtlSvbtc) */
SELECT COUNT(*) TNOCS
FROM TB_SNDNG_DTL
WHERE SVBTC_ID = #{svbtcId} <!-- 공시송달 ID -->
AND DEL_YN = 'N'
</select>
</select>
<update id="updateSndngDtlSvbtc" parameterType="cokr.xit.fims.sndb.SndngDtl">/* 발송상세의 공시송달 정보를 수정(sndngDtlMapper.updateSndngDtlSvbtc) */
<update id="updateSndngDtlSvbtc" parameterType="cokr.xit.fims.sndb.SndngDtl">/* 발송상세의 공시송달 정보를 수정(sndngDtlMapper.updateSndngDtlSvbtc) */
UPDATE TB_SNDNG_DTL
SET BFR_SNDNG_DTL_STTS_CD = SNDNG_DTL_STTS_CD <!-- 이전 발송 상세 상태 코드 -->
, SNDNG_DTL_STTS_CD= #{sndngDtlSttsCd} <!-- 발송 상세 상태 코드 -->
@ -1107,9 +1107,9 @@
, MDFR = #{modifiedBy} <!-- 수정자 -->
WHERE SNDNG_DTL_ID = #{sndngDtlId} <!-- 발송 상세 ID -->
AND DEL_YN = 'N'
</update>
</update>
<update id="deleteSndngDtlSvbtc" parameterType="cokr.xit.fims.sndb.SndngDtl">/* 발송상세의 공시송달 정보를 삭제(sndngDtlMapper.deleteSndngDtlSvbtc) */
<update id="deleteSndngDtlSvbtc" parameterType="cokr.xit.fims.sndb.SndngDtl">/* 발송상세의 공시송달 정보를 삭제(sndngDtlMapper.deleteSndngDtlSvbtc) */
UPDATE TB_SNDNG_DTL
SET SVBTC_ID = NULL <!-- 공시송달 ID -->
, BFR_SNDNG_DTL_STTS_CD = SNDNG_DTL_STTS_CD <!-- 이전 발송 상세 상태 코드 -->
@ -1123,9 +1123,9 @@
)
</if>
AND DEL_YN = 'N'
</update>
</update>
<select id="selectCrdnLevy" parameterType="string" resultType="dataobject">/* 단속 부과 정보 가져오기(sndngDtlMapper.selectCrdnLevy) */
<select id="selectCrdnLevy" parameterType="string" resultType="dataobject">/* 단속 부과 정보 가져오기(sndngDtlMapper.selectCrdnLevy) */
SELECT C.CRDN_ID <!-- 단속 ID -->
, C.SGG_CD <!-- 시군구 코드 -->
, C.TASK_SE_CD <!-- 업무 구분 코드 -->
@ -1135,15 +1135,172 @@
, P.RTPYR_ID <!-- 납부자 ID -->
, L.LEVY_ID <!-- 부과 ID -->
FROM TB_CRDN C
LEFT OUTER JOIN TB_PAYER P ON (C.RTPYR_ID = P.RTPYR_ID)
LEFT OUTER JOIN TB_LEVY L ON (C.CRDN_ID = L.CRDN_ID AND L.DEL_YN = 'N')
LEFT OUTER JOIN TB_PAYER P ON (C.RTPYR_ID = P.RTPYR_ID)
LEFT OUTER JOIN TB_LEVY L ON (C.CRDN_ID = L.CRDN_ID AND L.DEL_YN = 'N')
WHERE C.CRDN_ID = #{crdnId} <!-- 단속 ID -->
</select>
</select>
<update id="updateCrdnNxrpAcbKey" parameterType="cokr.xit.fims.crdn.Crdn">/* 단속 대장에 세외수입 대장키 수정(sndngDtlMapper.updateCrdnNxrpAcbKey) */
<update id="updateCrdnNxrpAcbKey" parameterType="cokr.xit.fims.crdn.Crdn">/* 단속 대장에 세외수입 대장키 수정(sndngDtlMapper.updateCrdnNxrpAcbKey) */
UPDATE TB_CRDN
SET NXRP_ACB_KEY = #{nxrpAcbKey} <!-- 세외수입 대장키 -->
WHERE CRDN_ID = #{crdnId} <!-- 단속 ID -->
</update>
</update>
<select id="selectDetailList" parameterType="list" resultType="dataobject">/* 고지서용 발송 상세정보(sndngDtlMapper.selectDetailList) */
SELECT C.CRDN_ID <!-- 단속 ID -->
, C.SGG_CD <!-- 시군구 코드 -->
, (SELECT SGG_NM FROM TB_SGG WHERE SGG_CD = C.SGG_CD) AS SGG_NM
, C.TASK_SE_CD <!-- 업무 구분 코드 -->
, (GET_CODE_NM('FIM054', C.TASK_SE_CD)) AS TASK_SE_NM
, C.CRDN_INPT_SE_CD <!-- 단속 입력 구분 코드 -->
, (GET_CODE_NM('FIM003', C.CRDN_INPT_SE_CD)) AS CRDN_INPT_SE_NM
, C.CRDN_REG_SE_CD <!-- 단속 등록 구분 코드 -->
, (GET_CODE_NM('FIM026', C.CRDN_REG_SE_CD)) AS CRDN_REG_SE_NM
, CA.CRDN_SE_CD <!-- 단속 구분 코드 -->
, (GET_CODE_NM('FIM002', CA.CRDN_SE_CD)) AS CRDN_SE_NM
, C.CVLCPT_LINK_YN <!-- 민원 연계 여부 -->
, C.CVLCPT_LINK_TBL_NM <!-- 민원 연계 테이블 명 -->
, C.CVLCPT_LINK_ID <!-- 민원 연계 ID -->
, C.CRDN_YMD <!-- 단속 일자 -->
, C.CRDN_TM <!-- 단속 시각 -->
, CONCAT(C.CRDN_YMD, C.CRDN_TM) AS CRDN_YMD_TM
, C.VHRNO <!-- 차량번호 -->
, L.RPM_SZR_VHRNO <!-- 대체차량번호 -->
, (GET_CODE_NM('FIM009', CA.FFNLG_CARMDL_CD)) AS FFNLG_CARMDL_NM
, C.ATCH_FILE_CNT <!-- 첨부 파일 수 -->
, CA.PRK_PSBLTY_RSLT_CD <!-- 주차 가능 결과 코드 -->
, (GET_CODE_NM('FIM034', CA.PRK_PSBLTY_RSLT_CD)) AS PRK_PSBLTY_RSLT_NM
, P.RTPYR_ID <!-- 납부자 ID -->
, P.RTPYR_INPT_SE_CD <!-- 납부자 입력 구분 코드 -->
, P.RTPYR_SE_CD <!-- 납부자 구분 코드 -->
, (GET_CODE_NM('FIM011', P.RTPYR_SE_CD)) AS RTPYR_SE_NM
, P.RTPYR_NO <!-- 납부자 번호 -->
, P.RTPYR_NM <!-- 납부자 명 -->
, P.RTPYR_TELNO <!-- 납부자 전화번호 -->
, P.RTPYR_MBL_TELNO <!-- 납부자 휴대 전화번호 -->
, P.RTPYR_EML <!-- 납부자 이메일 -->
, P.RTPYR_STTS_CD <!-- 납부자 상태 코드 -->
, (GET_CODE_NM('FIM014', P.RTPYR_STTS_CD)) AS RTPYR_STTS_NM
, PA.ADDR_SE_CD <!-- 주소 구분 코드 -->
, (GET_CODE_NM('FIM013', PA.ADDR_SE_CD)) AS ADDR_SE_NM
, PA.ZIP AS RTPYR_ZIP <!-- 우편번호 -->
, PA.ADDR AS RTPYR_ADDR <!-- 주소 -->
, PA.DTL_ADDR AS RTPYR_DTL_ADDR <!-- 상세 주소 -->
, CONCAT(PA.ADDR,' ',PA.DTL_ADDR) AS RTPYR_FULL_ADDR
, C.ETC_CN <!-- 기타 내용 -->
, C.CRDN_STTS_CD <!-- 단속 상태 코드 -->
, (GET_CODE_NM('FIM010', C.CRDN_STTS_CD)) AS CRDN_STTS_NM
, C.CRDN_STDG_NM <!-- 단속 법정동 명 -->
, C.CRDN_ROAD_NM <!-- 단속 도로 명 -->
, C.CRDN_PLC <!-- 단속 장소 -->
, CA.DTL_CRDN_PLC <!-- 상세 단속 장소 -->
, C.VLTN_ID <!-- 위반 ID -->
, V.VLTN_ARTCL <!-- 위반 항목 -->
, V.VLTN_LAW_NM <!-- 위반 법 명 -->
, IFNULL(CA.TOWNG_YN,'N') AS TOWNG_YN
, (GET_CODE_NM('CMN006', IFNULL(CA.TOWNG_YN,'N'))) AS TOWNG_YN_NM
, C.CRDN_STTS_CHG_DT <!-- 단속 상태 변경 일시 -->
, SUBSTR(C.CRDN_STTS_CHG_DT,1,8) AS CRDN_STTS_CHG_YMD
, C.FFNLG_CRDN_AMT <!-- 과태료 단속 금액 -->
, C.FFNLG_RDCRT <!-- 과태료 감경율 -->
, C.FFNLG_AMT <!-- 과태료 금액 -->
, C.ADVNTCE_BGNG_YMD <!-- 사전통지 시작 일자 -->
, C.ADVNTCE_DUDT_YMD <!-- 사전통지 납기 일자 -->
, C.ADVNTCE_AMT <!-- 사전통지 금액 -->
, IFNULL(C.OPNN_SBMSN_YN,'N') AS OPNN_SBMSN_YN
, (GET_CODE_NM('CMN006', IFNULL(C.OPNN_SBMSN_YN,'N'))) AS OPNN_SBMSN_YN_NM
, L.LEVY_ID <!-- 부과 ID -->
, L.INST_CD <!-- 기관 코드 -->
, L.DEPT_CD <!-- 부서 코드 -->
, L.SPCL_BIZ_CD <!-- 특별회계 사업 코드 -->
, L.FYR <!-- 회계 연도 -->
, L.ACNTG_SE_CD <!-- 회계 구분 -->
, L.TXITM_CD <!-- 세목 코드 -->
, L.LEVY_NO <!-- 부과 번호 -->
, L.NXRP_LEVY_KEY <!-- 세외수입 부과키 -->
, L.ISPY_SN <!-- 분납 일련번호 -->
, CONCAT(L.FYR, '-', L.LEVY_NO) AS GOJI_NO
, L.LEVY_SE_CD <!-- 부과 구분 코드 -->
, (GET_CODE_NM('FIM040', L.LEVY_SE_CD)) AS LEVY_SE_NM
, L.RDCT_SE_CD <!-- 감경 구분 코드 -->
, (GET_CODE_NM('FIM046', L.RDCT_SE_CD)) AS RDCT_SE_NM
, L.LEVY_PCPTAX <!-- 부과 본세 -->
, L.LEVY_ADAMT <!-- 부과 가산금 -->
, L.RCVMT_PCPTAX <!-- 수납 본세 -->
, L.RCVMT_ADAMT <!-- 수납 가산금 -->
, L.RDAMT_PCPTAX <!-- 감액 본세 -->
, L.RDAMT_ADAMT <!-- 감액 가산금 -->
, L.LAST_AMT <!-- 최종 금액 -->
, (L.LEVY_PCPTAX + L.LEVY_ADAMT) AS LEVY_AMT <!-- 부과 금액 -->
, (L.RCVMT_PCPTAX + L.RCVMT_ADAMT) AS RCVMT_AMT <!-- 수납 금액 -->
, (L.RDAMT_PCPTAX + L.RDAMT_ADAMT) AS REDUC_AMT <!-- 감액 금액 -->
, GET_MINAP_AMT(C.CRDN_ID) AS MINAP_AMT <!-- 미납 금액 -->
, L.LEVY_YMD <!-- 부과 일자 -->
, L.FRST_DUDT_YMD <!-- 최초 납기 일자 -->
, L.DUDT_YMD <!-- 납기 일자 -->
, L.DUDT_AFTR_YMD <!-- 납기후 금액 -->
, L.DUDT_AFTR_AMT <!-- 납기후 일자 -->
, L.RCVMT_YMD <!-- 수납 일자 -->
, L.PAY_MTHD_SE_CD <!-- 납부 방법 구분 코드 -->
, (GET_CODE_NM('FIM045', L.PAY_MTHD_SE_CD)) AS PAY_MTHD_SE_NM
, L.EPAYNO <!-- 전자납부번호 -->
, L.BANK_NM <!-- 은행명 -->
, L.VR_ACTNO <!-- 가상계좌번호 -->
, L.SZR_YMD <!-- 압류 일자 -->
, L.SZR_RMV_YMD <!-- 압류 해제 일자 -->
, V.TXITM_NM <!-- 세목 명 -->
, (CASE WHEN C.CRDN_STTS_CD IN ('71','72','73','74','75','76','77','80','81','82','83','84','85','86','87','88')
THEN 'Y'
ELSE 'N'
END) AS RCVMT_ETC_YN <!-- 수납,기타 여부 -->
, L.BANK_NM
, L.VR_ACTNO
, L.BANK_NM2
, L.VR_ACTNO2
, L.BANK_NM3
, L.VR_ACTNO3
, L.BANK_NM4
, L.VR_ACTNO4
, L.BANK_NM5
, L.VR_ACTNO5
, L.BANK_NM6
, L.VR_ACTNO6
, L.BANK_NM7
, L.VR_ACTNO7
, L.BANK_NM8
, L.VR_ACTNO8
, L.BANK_NM9
, L.VR_ACTNO9
, L.BANK_NM10
, L.VR_ACTNO10
, L.BANK_NM11
, L.VR_ACTNO11
, L.BANK_NM12
, L.VR_ACTNO12
, L.BANK_NM13
, L.VR_ACTNO13
, L.BANK_NM14
, L.VR_ACTNO14
, L.BANK_NM15
, L.VR_ACTNO15
, L.BANK_NM16
, L.VR_ACTNO16
, L.BANK_NM17
, L.VR_ACTNO17
, L.BANK_NM18
, L.VR_ACTNO18
, L.BANK_NM19
, L.VR_ACTNO19
, L.BANK_NM20
, L.VR_ACTNO20
FROM TB_CRDN C <!-- 단속 대장 -->
INNER JOIN TB_CRDN_ADI CA ON (C.CRDN_ID = CA.CRDN_ID) <!-- 단속 부가 정보 -->
INNER JOIN TB_VLTN V ON (C.VLTN_ID = V.VLTN_ID) <!-- 위반 정보 -->
INNER JOIN TB_SNDNG_DTL SD ON (C.CRDN_ID = SD.CRDN_ID)
LEFT OUTER JOIN TB_PAYER P ON (C.RTPYR_ID = P.RTPYR_ID) <!-- 납부자 대장 -->
LEFT OUTER JOIN TB_PAYER_ADDR PA ON (C.RTPYR_ID = PA.RTPYR_ID AND C.ADDR_SN = PA.ADDR_SN) <!-- 납부자 주소 대장 -->
LEFT OUTER JOIN TB_LEVY L ON (C.CRDN_ID = L.CRDN_ID AND L.DEL_YN = 'N') <!-- 부과 대장 -->
WHERE SD.SNDNG_ID IN (<foreach collection="list" item="sndngId" separator=",">#{sndngId}</foreach>)
ORDER BY SD.REG_DT</select>
</mapper>

@ -74,6 +74,7 @@
, L.ACNTG_SE_CD <!-- 회계 구분 -->
, L.TXITM_CD <!-- 세목 코드 -->
, L.LEVY_NO <!-- 부과 번호 -->
, L.NXRP_LEVY_KEY <!-- 세외수입 부과키 -->
, L.ISPY_SN <!-- 분납 일련번호 -->
, CONCAT(L.FYR, '-', L.LEVY_NO) AS GOJI_NO
, L.LEVY_SE_CD <!-- 부과 구분 코드 -->
@ -134,15 +135,9 @@ LEFT OUTER JOIN TB_PAYER P ON (C.RTPYR_ID = P.RTPYR_ID) <!-- 납부자
LEFT OUTER JOIN TB_PAYER_ADDR PA ON (C.RTPYR_ID = PA.RTPYR_ID AND C.ADDR_SN = PA.ADDR_SN) <!-- 납부자 주소 대장 -->
LEFT OUTER JOIN TB_LEVY L ON (C.CRDN_ID = L.CRDN_ID AND L.DEL_YN = 'N') <!-- 부과 대장 -->
WHERE C.DEL_YN = 'N'
<if test='crdnIds != null'>
AND C.CRDN_ID IN (<foreach collection="crdnIds" item="CRDN_ID" separator=",">#{CRDN_ID}</foreach>)
</if>
<if test='sggCd != null'>
AND C.SGG_CD = #{sggCd}
</if>
<if test="taskSeCd != null">
AND C.TASK_SE_CD = #{taskSeCd}
</if>
<if test='crdnIds != null'> AND C.CRDN_ID IN (<foreach collection="crdnIds" item="crdnId" separator=",">#{crdnId}</foreach>)</if>
<if test='sggCd != null'> AND C.SGG_CD = #{sggCd}</if>
<if test="taskSeCd != null"> AND C.TASK_SE_CD = #{taskSeCd}</if>
<!-- 통합조회 키워드 -->
<if test="ischKeywordSet != null">

Loading…
Cancel
Save