diff --git a/src/main/java/go/kr/project/common/model/DefaultVO.java b/src/main/java/go/kr/project/common/model/DefaultVO.java index 0ef6e44..0de4b30 100644 --- a/src/main/java/go/kr/project/common/model/DefaultVO.java +++ b/src/main/java/go/kr/project/common/model/DefaultVO.java @@ -3,6 +3,7 @@ package go.kr.project.common.model; import lombok.Data; import java.io.Serializable; +import java.util.Map; /** * packageName : go.kr.project.common @@ -45,6 +46,7 @@ public class DefaultVO implements Serializable { /** 정렬구분 */ private Boolean sortAscending; - + /** TUI Grid 속성 (row class 등) */ + private Map _attributes; } diff --git a/src/main/java/go/kr/project/levy/levyRelevy/model/LevyRelevyVO.java b/src/main/java/go/kr/project/levy/levyRelevy/model/LevyRelevyVO.java index 86c0b85..0068a3e 100644 --- a/src/main/java/go/kr/project/levy/levyRelevy/model/LevyRelevyVO.java +++ b/src/main/java/go/kr/project/levy/levyRelevy/model/LevyRelevyVO.java @@ -98,7 +98,10 @@ public class LevyRelevyVO extends PagingVO { /** 재부과 여부 */ private String relevyYn; - + + /** 재부과 대상 여부 (당해년도 재부과 가능 여부) */ + private String relevyTrgtYn; + /** 가중 부과 대상 여부 */ private String agrvtnLevyTrgtYn; @@ -208,4 +211,7 @@ public class LevyRelevyVO extends PagingVO { /** 검색 조건 - 가중 부과 대상 여부 */ private String schAgrvtnLevyTrgtYn; + /** 현재 연도 (재부과 대상 체크용) */ + private String currentYear; + } \ No newline at end of file diff --git a/src/main/java/go/kr/project/levy/levyRelevy/service/impl/LevyRelevyServiceImpl.java b/src/main/java/go/kr/project/levy/levyRelevy/service/impl/LevyRelevyServiceImpl.java index 43a2569..b18fedb 100644 --- a/src/main/java/go/kr/project/levy/levyRelevy/service/impl/LevyRelevyServiceImpl.java +++ b/src/main/java/go/kr/project/levy/levyRelevy/service/impl/LevyRelevyServiceImpl.java @@ -8,7 +8,10 @@ import lombok.extern.slf4j.Slf4j; import org.egovframe.rte.fdl.cmmn.EgovAbstractServiceImpl; import org.springframework.stereotype.Service; +import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; /** * packageName : go.kr.project.levy.levyRelevy.service.impl @@ -31,13 +34,35 @@ public class LevyRelevyServiceImpl extends EgovAbstractServiceImpl implements Le /** * 재부과 대상 목록을 조회합니다. + * 중요로직: 재부과 대상이 아닌 경우 빨간색으로 표시 * * @param vo 검색 조건과 페이징 정보를 담은 VO 객체 * @return 재부과 대상 목록 */ @Override public List selectList(LevyRelevyVO vo) { - return mapper.selectList(vo); + // 현재 연도 설정 (재부과 대상 체크용) + String currentYear = String.valueOf(java.time.Year.now().getValue()); + vo.setCurrentYear(currentYear); + + List list = mapper.selectList(vo); + + // 재부과 대상이 아닌 경우 rowClass 추가 + for (LevyRelevyVO item : list) { + if ("N".equals(item.getRelevyTrgtYn())) { + // TUI Grid _attributes 설정 + Map attributes = new HashMap<>(); + Map className = new HashMap<>(); + List rowClass = new ArrayList<>(); + + rowClass.add("tui-grid-custom-color-red"); + className.put("row", rowClass); + attributes.put("className", className); + item.set_attributes(attributes); + } + } + + return list; } /** diff --git a/src/main/resources/mybatis/mapper/levy/levyRelevy/RevyRelevyMapper_maria.xml b/src/main/resources/mybatis/mapper/levy/levyRelevy/RevyRelevyMapper_maria.xml index 90b72df..c69e741 100644 --- a/src/main/resources/mybatis/mapper/levy/levyRelevy/RevyRelevyMapper_maria.xml +++ b/src/main/resources/mybatis/mapper/levy/levyRelevy/RevyRelevyMapper_maria.xml @@ -62,7 +62,28 @@ CONCAT(act.VLTN_BDST, ' 등 ', (SELECT COUNT(1) FROM tb_act_info a2 WHERE a2.CRDN_YR = a.CRDN_YR AND a2.CRDN_NO = a.CRDN_NO AND a2.DEL_YN='N'), '건') ELSE act.VLTN_BDST END ACT_TYPE_CD_NM, a.USG_IDX_CD, /* 용도 지수 코드 */ - usg.USG_NM AS USG_IDX_CD_NM + usg.USG_NM AS USG_IDX_CD_NM, + /* 재부과 대상 여부 체크: 당해년도에 이미 재부과가 있으면 N, 없으면 Y */ + CASE + WHEN EXISTS ( + SELECT 1 + FROM tb_crdn c2 + WHERE ( + /* 케이스1: 선택한 단속 자체가 당해년도인 경우 */ + (c2.CRDN_YR = c.CRDN_YR AND c2.CRDN_NO = c.CRDN_NO AND c2.CRDN_YR = #{currentYear}) + OR + /* 케이스2: 선택한 단속의 최초 단속을 참조하는 당해년도 재부과가 있는 경우 */ + ( + c2.FRST_CRDN_YR = COALESCE(c.FRST_CRDN_YR, c.CRDN_YR) + AND c2.FRST_CRDN_NO = COALESCE(c.FRST_CRDN_NO, c.CRDN_NO) + AND c2.CRDN_YR = #{currentYear} + ) + ) + AND c2.DEL_YN = 'N' + ) + THEN 'N' + ELSE 'Y' + END AS RELEVY_TRGT_YN FROM tb_crdn c LEFT JOIN tb_cd_detail sgg ON sgg.CD_GROUP_ID = 'ORG_CD' AND sgg.CD_ID = c.SGG_CD LEFT JOIN tb_cd_detail rgn ON rgn.CD_GROUP_ID = 'RGN_SE_CD' AND rgn.CD_ID = c.RGN_SE_CD @@ -70,7 +91,7 @@ LEFT JOIN tb_cd_detail stts ON stts.CD_GROUP_ID = 'CRDN_PRCS_STTS_CD' AND stts.CD_ID = c.CRDN_PRCS_STTS_CD LEFT JOIN tb_user u ON u.USER_ID = c.RGTR AND u.USE_YN = 'Y' LEFT JOIN tb_pstn_info p ON p.CRDN_YR = c.CRDN_YR AND p.CRDN_NO = c.CRDN_NO AND p.DEL_YN = 'N' - LEFT JOIN tb_cd_detail emd ON emd.CD_GROUP_ID = 'STDG_EMD_CD' AND emd.CD_ID = p.STDG_EMD_CD + LEFT JOIN tb_cd_detail emd ON emd.CD_GROUP_ID = 'STDG_EMD_CD' AND emd.CD_ID = p.STDG_EMD_CD LEFT Join tb_act_info a ON a.CRDN_YR = c.CRDN_YR and a.CRDN_NO = c.CRDN_NO AND a.DEL_YN = 'N' AND a.ACT_NO = (SELECT MIN(a1.ACT_NO) FROM tb_act_info a1 WHERE a1.CRDN_YR = a.CRDN_YR AND a1.CRDN_NO = a.CRDN_NO AND a1.DEL_YN='N') LEFT JOIN tb_act_type act ON act.ACT_TYPE_CD = a.ACT_TYPE_CD LEFT JOIN tb_usg_idx usg ON usg.USG_IDX_CD = a.USG_IDX_CD AND usg.DEL_YN = 'N' diff --git a/src/main/webapp/WEB-INF/views/levy/levyRelevy/list.jsp b/src/main/webapp/WEB-INF/views/levy/levyRelevy/list.jsp index b1b17cd..d785354 100644 --- a/src/main/webapp/WEB-INF/views/levy/levyRelevy/list.jsp +++ b/src/main/webapp/WEB-INF/views/levy/levyRelevy/list.jsp @@ -4,27 +4,6 @@ <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> <%@ taglib prefix="dateUtil" uri="http://egovframework.go.kr/functions/date-util" %> -<%-- - -재부과 관련 기초 그리드 조회 프로그램 -src/main/webapp/WEB-INF/views/levy/levyRelevy/list.jsp -src/main/java/go/kr/project/levy/levyRelevy/controller/LevyRelevyController.java -src/main/java/go/kr/project/levy/levyRelevy/mapper/LevyRelevyMapper.java -src/main/java/go/kr/project/levy/levyRelevy/model/LevyRelevyVO.java -src/main/java/go/kr/project/levy/levyRelevy/service/impl/LevyRelevyServiceImpl.java -src/main/java/go/kr/project/levy/levyRelevy/service/LevyRelevyService.java -src/main/resources/mybatis/mapper/levy/levyRelevy/RevyRelevyMapper_maria.xml - -tb_crdn.FRST_CRDN_YR:최초 단속 연도 -tb_crdn.FRST_CRDN_NO:최초 단속 번호 -tb_crdn.RELEVY_TRGT_CRDN_YR:재부과 대상 단속 연도,자신의 바로 위 부모 -tb_crdn.RELEVY_TRGT_CRDN_NO:재부과 대상 단속 번호,자신의 바로 위 부모 - -구현 대상, 일부 기능은 구현 완료, 하위 그리드에 대한 내용은 구현안되어 있음 -1. 이메뉴는 재부과 대상(schCrdnYr : 올해-1년) 메인 리스트를 보여준뒤, focus 가 되면 -2. 하위 그리드(현재 구현안되어 있음)에 최초 단속부터, 자기 자신을 제외한 chain 단속(재부과) 목록을 부여줘야해 ---%> -
@@ -263,6 +242,15 @@ tb_crdn.RELEVY_TRGT_CRDN_NO:재부과 대상 단속 번호,자신의 바로 위 return e.value === 'Y' ? '재부과' : '일반'; } }, + { + header: '재부과대상', + name: 'relevyTrgtYn', + align: 'center', + width: 90, + formatter: function(e) { + return e.value === 'Y' ? '대상' : '비대상'; + } + }, { header: '가중부과대상', name: 'agrvtnLevyTrgtYn', @@ -527,16 +515,6 @@ tb_crdn.RELEVY_TRGT_CRDN_NO:재부과 대상 단속 번호,자신의 바로 위 */ getGridColumns: function() { return [ - { - header: '순번', - name: '_rowNum', - align: 'center', - width: 60, - sortable: false, - formatter: function(e) { - return e.row.rowKey + 1; - } - }, { header: '단속년도', name: 'crdnYr', align: 'center', width: 80 }, { header: '단속번호', name: 'crdnNo', align: 'center', width: 90 }, { header: '법정동', name: 'stdgEmdCdNm', align: 'center', width: 90 }, @@ -569,26 +547,41 @@ tb_crdn.RELEVY_TRGT_CRDN_NO:재부과 대상 단속 번호,자신의 바로 위 minWidth: 250, formatter: function(e) { return e.value; + }, + hidden: true + }, + { header: '처분사전 일자', name: 'dspsBfhdBgngYmd', align: 'center', width: 120, + formatter: function (e) { + return e.value ? moment(e.value).format('YYYY-MM-DD') : ''; } }, - { - header: '부과예고 일자', - name: 'levyPrvntcBgngYmd', - align: 'center', - width: 120, + { header: '시정명령 일자', name: 'crcCmdBgngYmd', align: 'center', width: 120, formatter: function (e) { return e.value ? moment(e.value).format('YYYY-MM-DD') : ''; } }, - { - header: '부과 일자', - name: 'levyBgngYmd', - align: 'center', - width: 120, + { header: '시정촉구 일자', name: 'crcUrgBgngYmd', align: 'center', width: 120, formatter: function (e) { return e.value ? moment(e.value).format('YYYY-MM-DD') : ''; } - } + }, + { header: '부과예고 일자', name: 'levyPrvntcBgngYmd', align: 'center', width: 120, + formatter: function (e) { + return e.value ? moment(e.value).format('YYYY-MM-DD') : ''; + } + }, + { header: '부과 일자', name: 'levyBgngYmd', align: 'center', width: 120, + formatter: function (e) { + return e.value ? moment(e.value).format('YYYY-MM-DD') : ''; + } + }, + { header: '납부촉구 일자', name: 'payUrgBgngYmd', align: 'center', width: 120, + formatter: function (e) { + return e.value ? moment(e.value).format('YYYY-MM-DD') : ''; + } + }, + { header: '등록일시', name: 'regDt', align: 'center', width: 150 }, + { header: '등록자', name: 'rgtrNm', align: 'center', width: 100 }, ]; },