Ma30 모듈 제거 및 관련 파일 삭제

dev
박성영 2 months ago
parent da86d752cb
commit 63949ac522

@ -85,7 +85,7 @@ public class SqlLoggingInterceptor implements Interceptor {
logger.error("Parameters: {}", parameter);
logger.error("SQL: {}", ms.getBoundSql(parameter).getSql());
logger.error("Error: {}", e.getMessage());
logger.error("Error StackTrace: {}", e.getStackTrace());
logger.error("Error StackTrace: {}", (Object[]) e.getStackTrace());
throw e;
}
// 주의: ThreadLocal 정리는 DataSourceProxy의 afterQuery에서 수행

@ -16,6 +16,7 @@ import java.math.BigDecimal;
* -----------------------------------------------------------
* 25. 9. 18.
*/
@EqualsAndHashCode(callSuper=true)
@Data
@Builder
@AllArgsConstructor

@ -1,85 +0,0 @@
package go.kr.project.ma30.controller;
import egovframework.constant.TilesConstants;
import egovframework.util.ApiResponseUtil;
import egovframework.util.SessionUtil;
import go.kr.project.ma30.model.Ma30FindListVO;
import go.kr.project.ma30.model.Ma30FindRlistSearchVO;
import go.kr.project.ma30.service.Ma30Service;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import java.util.List;
/**
* packageName : go.kr.project.system.user.controller
* fileName : UserController
* author :
* date : 25. 5. 7.
* description :
* ===========================================================
* DATE AUTHOR NOTE
* -----------------------------------------------------------
* 25. 5. 7.
*/
@RequestMapping("/ma30")
@Controller
@RequiredArgsConstructor
@Slf4j
public class Ma30Controller {
private final Ma30Service ma30Service;
@GetMapping("/list.do")
public String listPage(Model model) {
return "ma30/list"+ TilesConstants.BASE;
}
@PostMapping("/list.ajax")
public ResponseEntity<?> listAjax(@ModelAttribute Ma30FindRlistSearchVO paramVO) {
paramVO.setCurrentUserId(SessionUtil.getUserId());
paramVO.setCurrentUserOrgCd(SessionUtil.getSessionVO().getUser().getOrgCd());
// 로그인 로그 목록 조회
int totalCount = ma30Service.findListCount(paramVO);
paramVO.setTotalCount(totalCount);
// 페이징 처리를 위한 설정
paramVO.setPagingYn("Y");
List<Ma30FindListVO> list = ma30Service.findList(paramVO);
return ApiResponseUtil.successWithGrid(list, paramVO);
}
@GetMapping("/four_list.do")
public String fourListPage(Model model) {
return "ma30/four_list"+ TilesConstants.BASE;
}
@PostMapping("/four_list.ajax")
public ResponseEntity<?> fourListAjax(@ModelAttribute Ma30FindRlistSearchVO paramVO) {
paramVO.setCurrentUserId(SessionUtil.getUserId());
paramVO.setCurrentUserOrgCd(SessionUtil.getSessionVO().getUser().getOrgCd());
// 로그인 로그 목록 조회
int totalCount = ma30Service.findListCount(paramVO);
paramVO.setTotalCount(totalCount);
// 페이징 처리를 위한 설정
List<Ma30FindListVO> list = ma30Service.findList(paramVO);
return ApiResponseUtil.successWithGrid(list, paramVO);
}
}

@ -1,22 +0,0 @@
package go.kr.project.ma30.mapper;
import go.kr.project.ma30.model.Ma30FindListVO;
import go.kr.project.ma30.model.Ma30FindRlistSearchVO;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
/**
* @author
* @description
* @createDate 2025-05-07 14:34:50
* @Entity go.kr.project.system.user.domain.TbUser
*/
@Mapper
public interface Ma30Mapper {
int findListCount(Ma30FindRlistSearchVO searchVO);
List<Ma30FindListVO> findList(Ma30FindRlistSearchVO searchVO);
}

@ -1,66 +0,0 @@
package go.kr.project.ma30.model;
import lombok.Data;
/**
* @author
* @description Ma30 VO
* @createDate 2025-07-23
*/
@Data
public class Ma30FindListVO {
private String orgCd;
private String areaType;
private String mngYy;
private String mngNo;
private String receiptYm;
private String receiptNo;
private String jbMethodCd;
private String jbMethodName;
private String bdongCd;
private String bdongName;
private String josaDt;
private String josaEnddt;
private String josaDate;
private String fstWarnningDt;
private String fstWarnningEnddt;
private String sndWarnningDt;
private String sndWarnningEnddt;
private String gobalDt;
private String gobalEnddt;
private String preBugwaDt;
private String preBugwaEnddt;
private String napbuChokguDt;
private String napbuChokguEnddt;
private String bugwaDt;
private String bugwaEnddt;
private String recoverDt;
private String jochiYn;
private String jochiDt;
private String remark;
private String repetitionLevy;
private String jibhangDt;
private String bugwaTarget;
private String actionYear;
private String actNo;
private String actCnt;
private String useObjName;
private String unlawShortName;
private String sttName;
private String unlawSize;
private String actStartDt;
private String lawName;
private String wibanJohang;
private String bugwaLawCd;
private String jimokName;
private String hResDiv;
private String hResNo;
private String hResName;
private String oResDiv;
private String oResNo;
private String oResName;
private String posBunji;
private String regstrMngNo;
private String remaingExtent;
private String addrEtc;
}

@ -1,47 +0,0 @@
package go.kr.project.ma30.model;
import go.kr.project.common.model.PagingVO;
import lombok.Data;
/**
* @author
* @description Ma30 VO
* @createDate 2025-07-23
*/
@Data
public class Ma30FindRlistSearchVO extends PagingVO {
// 공통 검색 조건
private String currentUserOrgCd;
private String currentUserAreaType;
private String currentUserId;
private String schMyworkGubun;
private String schDataChk;
// 내 업무 관련 검색 조건
private Boolean schUserDongMap;
private Boolean schMngYn;
private String schMngYy;
private String schBeginMngNo;
private String schEndMngNo;
private String schPunish;
private Boolean schOnlyMyDataChk;
private String schJucbal;
private String schDong;
private String schHangwija;
private String schTeam;
private Boolean schDateChk;
private String schDayGubun;
private String schBeginDt;
private String schEndDt;
private String isMywork;
// 기본 검색 조건
private String schKeyword;
private String schKeywordGubun;
private String schBdongName;
private String schBuldMnnm;
private String schBuldSlno;
private String schOResName;
private String schHResName;
private String schRegstrMngNo;
}

@ -1,25 +0,0 @@
package go.kr.project.ma30.service;
import go.kr.project.ma30.model.Ma30FindListVO;
import go.kr.project.ma30.model.Ma30FindRlistSearchVO;
import java.util.List;
/**
* packageName : go.kr.project.system.user.service.impl
* fileName : UserService
* author :
* date : 25. 5. 7.
* description :
* ===========================================================
* DATE AUTHOR NOTE
* -----------------------------------------------------------
* 25. 5. 7.
*/
public interface Ma30Service {
int findListCount(Ma30FindRlistSearchVO searchVO);
List<Ma30FindListVO> findList(Ma30FindRlistSearchVO searchVO);
}

@ -1,42 +0,0 @@
package go.kr.project.ma30.service.impl;
import go.kr.project.ma30.mapper.Ma30Mapper;
import go.kr.project.ma30.model.Ma30FindListVO;
import go.kr.project.ma30.model.Ma30FindRlistSearchVO;
import go.kr.project.ma30.service.Ma30Service;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.egovframe.rte.fdl.cmmn.EgovAbstractServiceImpl;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* packageName : go.kr.project.system.user.service.impl
* fileName : UserServiceImpl
* author :
* date : 25. 5. 7.
* description :
* ===========================================================
* DATE AUTHOR NOTE
* -----------------------------------------------------------
* 25. 5. 7.
*/
@Service
@RequiredArgsConstructor
@Slf4j
public class Ma30ServiceImpl extends EgovAbstractServiceImpl implements Ma30Service {
private final Ma30Mapper ma30Mapper;
@Override
public int findListCount(Ma30FindRlistSearchVO searchVO) {
return ma30Mapper.findListCount(searchVO);
}
@Override
public List<Ma30FindListVO> findList(Ma30FindRlistSearchVO searchVO) {
return ma30Mapper.findList(searchVO);
}
}

@ -1,380 +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="go.kr.project.ma30.mapper.Ma30Mapper">
<sql id="findListMywork">
<if test="schUserDongMap == true"> <!-- 사용자 관리동만 검색 -->
<!-- [2021.10.18] 임현수 수정 : 조건절이 잘못 되어 있어 수정함
AND EXISTS ( SELECT *
FROM USER_DONG_MAP X, USER_C Y
WHERE X.USER_CD = Y.USER_CD
AND A.ORG_CD = X.ORG_CD
AND A.BDONG_CD = X.BDONG_CD
AND X.USER_CD = #{currentUserId}
)
-->
AND A.BDONG_CD IN (SELECT X.BDONG_CD
FROM USER_DONG_MAP X, USER_C Y
WHERE X.USER_CD = Y.USER_CD
AND x.USER_CD = #{currentUserId}) /* 유저의 관리동인데 필요한가? */
</if>
<if test="schMngYn == true">
<if test="schMngYy != null and schMngYy != ''"> <!-- 관리번호 -->
AND A.MNG_YY = #{schMngYy}
AND A.MNG_NO BETWEEN #{schBeginMngNo} AND #{schEndMngNo}
</if>
</if>
<if test="schPunish != null and schPunish != 0"> <!-- 처분대상 -->
<choose>
<when test="schPunish == 1">
AND A.FST_WARNNING_YN = 0
AND A.JOCHI_YN = 0
AND A.RECOVER_YN = 0
<if test="schOnlyMyDataChk == true">
AND A.MANAGER_CD = #{currentUserId}
</if>
</when>
<when test="schPunish == 2">
<!-- [2021.10.19]임현수 주석처리 : 상관없는 조건절이라 주석처리 및 선행 업무의 납기이후인 경우 조건 추가
AND A.FST_WARNNING_YN = 1
AND A.SND_WARNNING_YN = 0
AND A.FST_WARNNING_DT <![CDATA[ <= ]]> DATE_FORMAT(DATE_SUB(NOW(), INTERVAL 1 MONTH), '%Y%m%d')
AND A.JOCHI_YN = 0
AND A.RECOVER_YN = 0
AND (A.BUGWA_DT IS NULL OR A.BUGWA_DT <![CDATA[ <= ]]> DATE_FORMAT(DATE_SUB(NOW(), INTERVAL 5 MONTH), '%Y%m%d')) -->
AND A.FST_WARNNING_YN = 1
AND A.SND_WARNNING_YN = 0
AND A.FST_WARNNING_ENDDT <![CDATA[ <]]> DATE_FORMAT(NOW(), '%Y%m%d')
AND A.JOCHI_YN = 0
AND A.RECOVER_YN = 0
<if test="schOnlyMyDataChk == true">
AND A.FST_WARNNING_USER_CD = #{currentUserId}
</if>
</when>
<when test="schPunish == 3">
AND A.FST_WARNNING_YN = 1
AND A.SND_WARNNING_YN = 1
AND A.GOBAL_YN = 0
AND A.SND_WARNNING_ENDDT <![CDATA[ <]]> DATE_FORMAT(NOW(), '%Y%m%d') <!-- [2021.10.19]임현수 추가 -->
AND A.JOCHI_YN = 0
AND A.RECOVER_YN = 0
<if test="schOnlyMyDataChk == true">
AND A.SND_WARNNING_USER_CD = #{currentUserId}
</if>
</when>
<when test="schPunish == 4">
<!-- [2021.10.19]임현수 주석처리
AND A.FST_WARNNING_YN = 1
AND A.SND_WARNNING_YN = 1
AND A.SND_WARNNING_DT <![CDATA[ <= ]]> DATE_SUB(NOW(), INTERVAL 20 DAY)
AND (A.PRE_BUGWA_YN = 0 OR A.BUGWA_DT <![CDATA[ <= ]]>
DATE_FORMAT(DATE_SUB(NOW(), INTERVAL 5 MONTH), '%Y%m%d'))
AND (A.PRE_BUGWA_DT IS NULL OR A.PRE_BUGWA_DT <![CDATA[ <= ]]>
DATE_FORMAT(DATE_SUB(NOW(), INTERVAL 5 MONTH), '%Y%m%d'))
AND A.JOCHI_YN = 0
AND A.RECOVER_YN = 0
-->
AND A.FST_WARNNING_YN = 1
AND A.SND_WARNNING_YN = 1
AND A.GOBAL_YN = 1
AND A.PRE_BUGWA_YN = 0
AND A.GOBAL_ENDDT <![CDATA[ <]]> DATE_FORMAT(NOW(), '%Y%m%d')
AND A.JOCHI_YN = 0
AND A.RECOVER_YN = 0
<if test="schOnlyMyDataChk == true">
AND A.GOBAL_USER_CD = #{currentUserId}
</if>
</when>
<when test="schPunish == 5">
<!-- [2021.10.19]임현수 주석처리
AND A.FST_WARNNING_YN = 1
AND A.SND_WARNNING_YN = 1
AND A.PRE_BUGWA_YN = 1
AND A.PRE_BUGWA_DT <![CDATA[ <= ]]> DATE_FORMAT(DATE_SUB(NOW(), INTERVAL 1 MONTH), '%Y%m%d')
AND (A.BUGWA_DT IS NULL OR (A.BUGWA_DT <![CDATA[ <= ]]> DATE_FORMAT(DATE_SUB(NOW(), INTERVAL 1 MONTH), '%Y%m%d'))
AND PRE_BUGWA_DT BETWEEN A.BUGWA_DT AND DATE_FORMAT(DATE_SUB(NOW(), INTERVAL 6 MONTH), '%Y%m%d') )
AND A.JOCHI_YN = 0
AND A.RECOVER_YN = 0
-->
AND A.FST_WARNNING_YN = 1
AND A.SND_WARNNING_YN = 1
AND A.GOBAL_YN = 1
AND A.PRE_BUGWA_YN = 1
AND A.BUGWA_YN = 0
AND A.PRE_BUGWA_ENDDT <![CDATA[ <]]> DATE_FORMAT(NOW(), '%Y%m%d')
AND A.JOCHI_YN = 0
AND A.RECOVER_YN = 0
<if test="schOnlyMyDataChk == true">
AND A.PRE_BUGWA_USER_CD = #{currentUserId}
</if>
</when>
<when test="schPunish == 6">
AND A.FST_WARNNING_YN = 1
AND A.SND_WARNNING_YN = 1
AND A.GOBAL_YN = 1
AND A.PRE_BUGWA_YN = 1
AND A.BUGWA_YN = 1
AND A.NAPBU_CHOKGU_YN = 0
AND A.BUGWA_ENDDT <![CDATA[ <]]> DATE_FORMAT(NOW(), '%Y%m%d')
AND A.JOCHI_YN = 0
AND A.RECOVER_YN = 0
<if test="schOnlyMyDataChk == true">
AND A.BUGWA_USER_CD = #{currentUserId}
</if>
</when>
<otherwise>
</otherwise>
</choose>
AND (A.YUYEENDDATE = '' OR A.YUYEENDDATE IS NULL OR A.YUYEENDDATE <![CDATA[ <= ]]> DATE_FORMAT(NOW(), '%Y%m%d'))
</if>
<if test ="schPunish == null or schPunish ==0">
<if test="schOnlyMyDataChk == true"> <!-- [2021.10.19] 임현수 추가 내가 등록한 자료만 조회 : 전체 리스트 조회할땐 관리 담당자로 조건??-->
AND A.MANAGER_CD = #{currentUserId}
</if>
</if>
<if test="schJucbal != null and schJucbal != 0"> <!-- 단속구분 -->
AND A.JB_METHOD_CD = #{schJucbal}
</if>
<if test="schDong != null and schDong != 0">
AND C.BDONG_CD = #{schDong}
</if>
<if test="schHangwija != null and schHangwija != ''">
AND D.H_RES_NAME = #{schHangwija}
</if>
<if test="schTeam != null and schTeam != ''">
AND A.RGL_TEAM_CD = #{schTeam}
</if>
<!-- [2021.10.19] 임현수 : 날짜 조회 쿼리 누락되어 추가함 -->
<if test="schDateChk == true">
<choose>
<when test="schDayGubun == 0">
AND A.JOSA_ENDDT BETWEEN #{schBeginDt} AND #{schEndDt}
</when >
<when test="schDayGubun == 1">
AND A.FST_WARNNING_ENDDT BETWEEN #{schBeginDt} AND #{schEndDt}
</when >
<when test="schDayGubun == 2">
AND A.SND_WARNNING_ENDDT BETWEEN #{schBeginDt} AND #{schEndDt}
</when >
<when test="schDayGubun == 3">
AND A.GOBAL_ENDDT BETWEEN #{schBeginDt} AND #{schEndDt}
</when >
<when test="schDayGubun == 4">
AND A.PRE_BUGWA_ENDDT BETWEEN #{schBeginDt} AND #{schEndDt}
</when >
<when test="schDayGubun == 5">
AND A.BUGWA_ENDDT BETWEEN #{schBeginDt} AND #{schEndDt}
</when >
<when test="schDayGubun == 6">
AND A.NAPBU_CHOKGU_ENDDT BETWEEN #{schBeginDt} AND #{schEndDt}
</when >
<when test="schDayGubun == 7">
AND A.RECOVER_DT BETWEEN #{schBeginDt} AND #{schEndDt}
</when >
<when test="schDayGubun == 8">
AND YUYEENDDATE BETWEEN #{schBeginDt} AND #{schEndDt}
</when >
</choose>
</if>
<!-- [2021.10.20]임현수 : 기간 금일 도래한 업무에 대한 업무에 대한 구분값 추가 -->
<if test="isMywork != null and isMywork == 'true'">
<if test="schDateChk == true">
<choose>
<when test="schDayGubun == 1">
AND A.FST_WARNNING_YN = 1
AND A.SND_WARNNING_YN = 0
AND A.JOCHI_YN = 0
AND A.RECOVER_YN = 0
<if test="schOnlyMyDataChk == true">
AND A.FST_WARNNING_USER_CD = #{currentUserId}
</if>
</when>
<when test="schDayGubun == 2">
AND A.FST_WARNNING_YN = 1
AND A.SND_WARNNING_YN = 1
AND A.GOBAL_YN = 0
AND A.JOCHI_YN = 0
AND A.RECOVER_YN = 0
<if test="schOnlyMyDataChk == true">
AND A.SND_WARNNING_USER_CD = #{currentUserId}
</if>
</when>
<when test="schDayGubun == 3">
AND A.FST_WARNNING_YN = 1
AND A.SND_WARNNING_YN = 1
AND A.GOBAL_YN = 1
AND A.PRE_BUGWA_YN = 0
AND A.JOCHI_YN = 0
AND A.RECOVER_YN = 0
<if test="schOnlyMyDataChk == true">
AND A.GOBAL_USER_CD = #{currentUserId}
</if>
</when>
</choose>
AND (A.YUYEENDDATE = '' OR A.YUYEENDDATE IS NULL OR A.YUYEENDDATE <![CDATA[ <= ]]> DATE_FORMAT(NOW(), '%Y%m%d'))
</if>
</if>
</sql>
<sql id="findListDefault">
<if test="schDateChk == true">
AND ${schDayGubun} BETWEEN REPLACE( #{schBeginDt}, '-', '') AND REPLACE(#{schEndDt}, '-', '')
</if>
<if test='schKeyword != null and schKeyword != ""'>
<if test='schKeywordGubun != null and schKeywordGubun != ""'>
AND ${schKeywordGubun} LIKE CONCAT('%', #{schKeyword} ,'%')
</if>
</if>
<if test="schBdongName != null and schBdongName != ''">
AND C.BDONG_NAME LIKE CONCAT('%', #{schBdongName} ,'%')
</if>
<if test="schBuldMnnm != null and schBuldMnnm != ''">
AND E.BULD_MNNM = #{schBuldMnnm}
</if>
<if test="schBuldSlno != null and schBuldSlno != ''">
AND E.BULD_SLNO = #{schBuldSlno}
</if>
<if test="schOResName != null and schOResName != ''">
AND O_RES_NAME LIKE CONCAT('%', #{schOResName} ,'%')
</if>
<if test="schHResName != null and schHResName != ''">
AND H_RES_NAME LIKE CONCAT('%', #{schHResName} ,'%')
</if>
<if test="schRegstrMngNo != null and schRegstrMngNo != ''">
AND REGSTR_MNG_NO LIKE CONCAT('%', #{schRegstrMngNo} ,'%')
</if>
<if test="schOnlyMyDataChk == true">
AND A.MANAGER_CD = #{currentUserId}
</if>
</sql>
<!-- 단속자료 조회 -->
<select id="findListCount" parameterType="Ma30FindRlistSearchVO" resultType="int">
SELECT COUNT(A.ACTION_YEAR) CNT
FROM RGL_RET_M A
INNER JOIN JUKBAL_METHOD_C B ON (A.JB_METHOD_CD=B.JB_METHOD_CD)
INNER JOIN BDONG_C C ON (A.ORG_CD=C.ORG_CD AND A.BDONG_CD=C.BDONG_CD)
LEFT OUTER JOIN UNLAW_ACT_D_DAEPYO D ON (A.ORG_CD=D.ORG_CD AND A.AREA_TYPE=D.AREA_TYPE AND A.MNG_YY=D.MNG_YY AND A.MNG_NO=D.MNG_NO)
LEFT OUTER JOIN UNLAW_POS_D_DAEPYO E ON (D.ORG_CD=E.ORG_CD AND D.AREA_TYPE=E.AREA_TYPE AND D.MNG_YY=E.MNG_YY AND D.MNG_NO=E.MNG_NO AND D.ACT_NO=E.ACT_NO)
WHERE A.DEL_YN = 0
AND A.ORG_CD = #{currentUserOrgCd} /* 쿼리 주석안에 ? 가 들어있어... */
<if test='schMyworkGubun == "Y"'>
<include refid="findListMywork"/>
</if>
<if test='schMyworkGubun == "N"'>
<include refid="findListDefault"/>
</if>
<if test='schDataChk == "B"'>
AND A.REPETITION_LEVY = "신규"
</if>
<if test='schDataChk == "C"'>
AND A.REPETITION_LEVY = "재부과"
</if>
</select>
<!-- 단속자료 조회 -->
<select id="findList" parameterType="Ma30FindRlistSearchVO" resultType="Ma30FindListVO">
SELECT A.ORG_CD as orgCd
, A.AREA_TYPE as areaType
, A.MNG_YY as mngYy
, A.MNG_NO as mngNo
, A.RECEIPT_YM as receiptYm
, A.RECEIPT_NO as receiptNo
, A.JB_METHOD_CD as jbMethodCd
, B.JB_METHOD_NAME as jbMethodName
, A.BDONG_CD as bdongCd
, C.BDONG_NAME as bdongName
, A.JOSA_DT as josaDt
, A.JOSA_ENDDT as josaEnddt
, CASE WHEN LENGTH(A.JOSA_ENDDT) = 8 THEN CONCAT(GET_MASK_DATE(A.JOSA_DT, '-'), ' ~ ', GET_MASK_DATE(A.JOSA_ENDDT, '-'))
ELSE GET_MASK_DATE(A.JOSA_DT, '-')
END AS josaDate
, A.FST_WARNNING_DT as fstWarnningDt
, A.FST_WARNNING_ENDDT as fstWarnningEnddt
, A.SND_WARNNING_DT as sndWarnningDt
, A.SND_WARNNING_ENDDT as sndWarnningEnddt
, A.GOBAL_DT as gobalDt
, A.GOBAL_ENDDT as gobalEnddt
, A.PRE_BUGWA_DT as preBugwaDt
, A.PRE_BUGWA_ENDDT as preBugwaEnddt
, A.NAPBU_CHOKGU_DT as napbuChokguDt <!-- 2021.06.09 현수 추가 (납부촉구 기능 추가건) -->
, A.NAPBU_CHOKGU_ENDDT as napbuChokguEnddt <!-- 2021.06.09 현수 추가 (납부촉구 기능 추가건) -->
, A.BUGWA_DT as bugwaDt
, A.BUGWA_ENDDT as bugwaEnddt
, A.RECOVER_DT as recoverDt
, A.JOCHI_YN as jochiYn
, A.JOCHI_DT as jochiDt
, A.REMARK as remark
, A.REPETITION_LEVY as repetitionLevy
, A.JIBHANG_DT as jibhangDt
, A.BUGWA_TARGET as bugwaTarget
, A.ACTION_YEAR as actionYear
, D.ACT_NO as actNo
, D.ACT_CNT as actCnt
, D.USE_OBJ_NAME as useObjName
, D.UNLAW_SHORT_NAME as unlawShortName
, D.STT_NAME as sttName
, D.UNLAW_SIZE as unlawSize
, D.ACT_START_DT as actStartDt
, D.LAW_NAME as lawName
, D.WIBAN_JOHANG as wibanJohang
, D.BUGWA_LAW_CD as bugwaLawCd
, E.JIMOK_NAME as jimokName
, D.H_RES_DIV as hResDiv
, D.H_RES_NO as hResNo
, D.H_RES_NAME as hResName
, E.O_RES_DIV as oResDiv
, E.O_RES_NO as oResNo
, E.O_RES_NAME as oResName
<!-- 도로명 주소에 따른 변경(위치정보가 아닌 소유자 정보가 들어가므로
쿼리 검증 필요)
, CASE WHEN E.ADDR_BON = '0' THEN ''
WHEN E.ADDR_BON = '' THEN ''
ELSE CASE WHEN E.ADDR_BU = '0' THEN RTRIM(E.ADDR_BON)
WHEN E.ADDR_BU = '' THEN RTRIM(E.ADDR_BON)
ELSE CONCAT(RTRIM(E.ADDR_BON), '-', RTRIM(E.ADDR_BU))
END
END AS POS_BUNJI -->
, CASE WHEN E.BULD_MNNM = '0' THEN ''
WHEN E.BULD_MNNM = '' THEN ''
ELSE CASE WHEN E.BULD_SLNO = '0' THEN RTRIM(E.BULD_MNNM)
WHEN E.BULD_SLNO = '' THEN RTRIM(E.BULD_MNNM)
ELSE CONCAT(RTRIM(E.BULD_MNNM), '-', RTRIM(E.BULD_SLNO))
END
END AS posBunji
, A.REGSTR_MNG_NO as regstrMngNo <!-- [2022.01.10] 임현수 : 담당자 요청에 의하여 관리번호 별도로 추가됨 -->
<!-- ,datediff(date_format(GREATEST(IFNULL(A.FST_WARNNING_ENDDT,'0'), IFNULL(A.SND_WARNNING_ENDDT,'0'), IFNULL(A.GOBAL_ENDDT,'0'),
IFNULL(A.PRE_BUGWA_ENDDT,'0'),IFNULL(A.BUGWA_ENDDT,'0'),IFNULL(A.NAPBU_CHOKGU_ENDDT,'0')), '%Y%m%d'),date_format(now(), '%Y%m%d')) AS REMAING_EXTENT -->
,CASE
WHEN A.RECOVER_DT IS NULL THEN datediff(date_format(GREATEST(IFNULL(A.FST_WARNNING_ENDDT,'0'), IFNULL(A.SND_WARNNING_ENDDT,'0'), IFNULL(A.GOBAL_ENDDT,'0'),
IFNULL(A.PRE_BUGWA_ENDDT,'0'),IFNULL(A.BUGWA_ENDDT,'0'),IFNULL(A.NAPBU_CHOKGU_ENDDT,'0')), '%Y%m%d'),date_format(now(), '%Y%m%d'))
ELSE ''
END AS remaingExtent
,E.ADDR_ETC AS addrEtc
FROM RGL_RET_M A
INNER JOIN JUKBAL_METHOD_C B ON (A.JB_METHOD_CD=B.JB_METHOD_CD)
INNER JOIN BDONG_C C ON (A.ORG_CD=C.ORG_CD AND A.BDONG_CD=C.BDONG_CD)
LEFT OUTER JOIN UNLAW_ACT_D_DAEPYO D ON (A.ORG_CD=D.ORG_CD AND A.AREA_TYPE=D.AREA_TYPE AND A.MNG_YY=D.MNG_YY AND A.MNG_NO=D.MNG_NO)
LEFT OUTER JOIN UNLAW_POS_D_DAEPYO E ON (D.ORG_CD=E.ORG_CD AND D.AREA_TYPE=E.AREA_TYPE AND D.MNG_YY=E.MNG_YY AND D.MNG_NO=E.MNG_NO AND D.ACT_NO=E.ACT_NO)
WHERE A.DEL_YN = 0
AND A.ORG_CD = #{currentUserOrgCd} /* TODO : 일산서구코드인데 필요한가? */
<if test='schMyworkGubun == "Y"'>
<include refid="findListMywork"/>
</if>
<if test='schMyworkGubun == "N"'>
<include refid="findListDefault"/>
</if>
<if test='schDataChk == "B"'>
AND A.REPETITION_LEVY = "신규"
</if>
<if test='schDataChk == "C"'>
AND A.REPETITION_LEVY = "재부과"
</if>
<if test='pagingYn != null and pagingYn == "Y"'>
LIMIT #{startIndex}, #{perPage}
</if>
</select>
</mapper>

@ -1,553 +0,0 @@
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<%@ taglib prefix="dateUtil" uri="http://egovframework.go.kr/functions/date-util" %>
<!-- Main body -->
<div class="main_body">
<section id="section8" class="main_bars">
<div class="bgs-main">
<section id="section5">
<div class="sub_title"></div>
</section>
</div>
</section>
<div class="contants_body">
<div class="gs_b_top" style="border-bottom: 0;">
<ul class="lef">
<li class="th">
<label>
<input id="schDateChk" name="schDateChk" type="checkbox" style="width: 18px; height: 18px; padding-bottom: 15px;" value="1">
일자검색 :
</label>
</li>
<li>
<select id="schDayGubun" name="schDayGubun" title="일자구분" class="input" disabled="disabled">
<option value="JOSA_ENDDT">적발일자</option>
<option value="FST_WARNNING_ENDDT">사전통지</option>
<option value="SND_WARNNING_ENDDT">시정명령</option>
<option value="GOBAL_ENDDT">시정촉구</option>
<option value="PRE_BUGWA_ENDDT">부과예고</option>
<option value="BUGWA_ENDDT">부과</option>
<option value="NAPBU_CHOKGU_ENDDT">납부촉구</option>
<option value="A.RECOVER_DT">시정완료</option>
<option value="YUYEENDDATE">유예기간</option>
<option value="A.MNG_YY">연도</option>
</select>
<input type="text" id="schBeginDt" name="schBeginDt" class="input calender datepicker" value="${dateUtil:getCurrentDateAddDays('yyyy-MM-dd',-30)}" disabled="disabled"/> ~
<input type="text" id="schEndDt" name="schEndDt" class="input calender datepicker" value="${dateUtil:getCurrentDateTime('yyyy-MM-dd')}" disabled="disabled" />
</li>
<li class="th">법정동 :</li>
<li><input type="text" id="schBdongName" name="schBdongName" maxlength="10" class="input"/></li>
<li class="th">지번 :</li>
<li>
<input type="text" id="schBuldMnnm" name="schBuldMnnm" maxlength="10" class="input"/>
-
<input type="text" id="schBuldSlno" name="schBuldSlno" class="input">
</li>
<li class="th">소유주 :</li>
<li><input type="text" id="schOResName" name="schOResName" maxlength="10" class="input"/></li>
<li class="th">행위자 :</li>
<li><input type="text" id="schHResName" name="schHResName" class="input"/></li>
<li class="th">관리번호 :</li>
<li><input type="text" id="schRegstrMngNo" name="schRegstrMngNo" class="input"/></li>
</ul>
<ul class="rig2">
<li><button type="button" id="search_btn" class="newbtnss bg1">검색</button></li>
</ul>
</div>
<div class="gs_b_top">
<ul class="lef">
<li class="th">
<label>
<input id="schOnlyMyDataChk" name="schOnlyMyDataChk" type="checkbox" style="width: 18px; height: 18px; padding-bottom: 15px;" value="1">
내가 등록한 자료만 조회
</label>
</li>
<li class="th">
<label style="padding-left: 15px;"><input type="radio" id="schAllDataChk" name="schDataChk" value="A"/> 전체</label>
<label style="padding-left: 15px;"><input type="radio" id="schNewDataChk" name="schDataChk" value="B"/> 신규</label>
<label style="padding-left: 15px;"><input type="radio" id="schJaeBugwaDataChk" name="schDataChk" value="C"/> 재부과</label>
</li>
</ul>
</div>
<!-- 4개 그리드 분할 레이아웃 -->
<div class="gs_booking">
<!-- 상단 2개 그리드 -->
<div class="row" style="margin-bottom: 10px;">
<div class="col-sm-6">
<div class="box_column">
<ul class="box_title">
<li class="tit">단속자료 목록 1</li>
</ul>
<div class="containers">
<div id="grid1"></div>
</div>
</div>
</div>
<div class="col-sm-6">
<div class="box_column">
<ul class="box_title">
<li class="tit">단속자료 목록 2</li>
</ul>
<div class="containers">
<div id="grid2"></div>
</div>
</div>
</div>
</div>
<!-- 하단 2개 그리드 -->
<div class="row">
<div class="col-sm-6">
<div class="box_column">
<ul class="box_title">
<li class="tit">단속자료 목록 3</li>
</ul>
<div class="containers">
<div id="grid3"></div>
</div>
</div>
</div>
<div class="col-sm-6">
<div class="box_column">
<ul class="box_title">
<li class="tit">단속자료 목록 4</li>
</ul>
<div class="containers">
<div id="grid4"></div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- /Main body -->
<script type="text/javascript">
/**
* 4개 분할 그리드 테스트 모듈
* 동일한 데이터를 4개의 그리드에 분할하여 표시하는 테스트 기능을 제공합니다.
*/
(function(window, $) {
'use strict';
var SEARCH_COND = {};
// 검색정보 셋팅
var setSearchCond = function() {
var schDateChk = !!$("#schDateChk").is(':checked');
var schDayGubun = $.trim(nvl($("#schDayGubun").val(), ""));
var schBeginDt = $.trim(nvl($("#schBeginDt").val(), ""));
var schEndDt = $.trim(nvl($("#schEndDt").val(), ""));
var schBdongName = $.trim(nvl($("#schBdongName").val(), ""));
var schBuldMnnm = $.trim(nvl($("#schBuldMnnm").val(), ""));
var schBuldSlno = $.trim(nvl($("#schBuldSlno").val(), ""));
var schOResName = $.trim(nvl($("#schOResName").val(), ""));
var schHResName = $.trim(nvl($("#schHResName").val(), ""));
var schRegstrMngNo = $.trim(nvl($("#schRegstrMngNo").val(), ""));
var schOnlyMyDataChk = !!$("#schOnlyMyDataChk").is(':checked');
var schDataChk = $.trim(nvl($("input[name=schDataChk]:checked").val(), ""));
SEARCH_COND.schDateChk = schDateChk;
SEARCH_COND.schDayGubun = schDayGubun;
SEARCH_COND.schBeginDt = schBeginDt;
SEARCH_COND.schEndDt = schEndDt;
SEARCH_COND.schBdongName = schBdongName;
SEARCH_COND.schBuldMnnm = schBuldMnnm;
SEARCH_COND.schBuldSlno = schBuldSlno;
SEARCH_COND.schOResName = schOResName;
SEARCH_COND.schHResName = schHResName;
SEARCH_COND.schRegstrMngNo = schRegstrMngNo;
SEARCH_COND.schOnlyMyDataChk = schOnlyMyDataChk;
SEARCH_COND.schDataChk = schDataChk;
SEARCH_COND.isMywork = false; //이거 왜쓰는거임?
SEARCH_COND.schMyworkGubun = "N"; //이거 왜쓰는거임?
};
/**
* 로그인 로그 목록 관리 네임스페이스
*/
var Ma30List = {
/**
* 그리드 관련 객체 - 4개 그리드 관리
*/
grid: {
/**
* 그리드 인스턴스들 (4개)
*/
instances: {
grid1: null,
grid2: null,
grid3: null,
grid4: null
},
/**
* 그리드 설정 초기화
* @param {String} gridId - 그리드 ID (grid1, grid2, grid3, grid4)
* @returns {Object} 그리드 설정 객체
*/
initConfig: function(gridId) {
// 데이터 소스 설정
var dataSource = this.createDataSource();
// 그리드 설정 객체 생성
var gridConfig = new XitTuiGridConfig();
// 기본 설정
gridConfig.setOptDataSource(dataSource); // 데이터소스 연결
gridConfig.setOptGridId(gridId); // 그리드를 출력할 Element ID
gridConfig.setOptGridHeight(150); // 그리드 높이(단위: px) - 페이징 제거로 높이 증가
gridConfig.setOptRowHeight(30); // 그리드 행 높이(단위: px)
gridConfig.setOptRowHeaderType('rowNum'); // 행 첫번째 셀 타입(rowNum: 순번, checkbox: 체크박스, '': 출력 안함)
gridConfig.setOptUseClientSort(true); // 서버사이드 정렬 false
gridConfig.setOptHeader(this.getGridOptHeader());
gridConfig.setOptColumns(this.getGridColumns());
return gridConfig;
},
getGridOptHeader: function() {
return {
height: 60,
complexColumns: [
{
header: '단속현황',
name: 'dansokhyeonhwang',
childNames: ['mngYy', 'regstrMngNo', 'mngNo', 'bdongName', 'posAddr', 'addrEtc', 'actions']
},
]
}
},
/**
* 그리드 컬럼 정의
* @returns {Array} 그리드 컬럼 배열
*/
getGridColumns: function() {
return [
{
header: '연도',
name: 'mngYy',
width: 60,
align: 'center'
},
{
header: '관리번호',
name: 'regstrMngNo',
width: 100,
align: 'center'
},
{
header: '연번',
name: 'mngNo',
width: 60,
align: 'center'
},
{
header: '동',
name: 'bdongName',
width: 80,
align: 'center'
},
{
header: '지번',
name: 'posAddr',
width: 80,
align: 'center'
},
{
header: '상세주소',
name: 'addrEtc',
width: 150,
align: 'left'
},
{
header: '작업',
name: 'actions',
width: 80,
align: 'center',
sortable: false,
resizable: false,
formatter: function(props) {
// 개발자가 직접 커스텀 메뉴 아이템 설정 (새로운 방식 사용)
return XitTuiGridDropdownMenu.createMenuHtml(props, {
menuItems: [
{ text: '보기', action: 'view', class: 'js-row-view' },
{ text: '상세정보', action: 'detail', class: 'js-row-detail' },
{ text: '수정', action: 'edit', class: 'js-row-edit' },
{ text: '삭제', action: 'delete', class: 'js-row-delete', style: 'color: #dc3545;' }
]
});
}
},
];
},
/**
* 데이터 소스 생성
* @returns {Object} 데이터 소스 객체
*/
createDataSource: function() {
return {
api: {
readData: {
url: '<c:url value="/ma30/four_list.ajax"/>',
method: 'POST',
contentType: 'application/x-www-form-urlencoded',
processData: true
}
},
initialRequest: true, // 초기 데이터 요청 여부
serializer: function(params) {
// 기본 파라미터 (페이지 정보 등)
var defaultParams = $.param(params);
// 검색 폼 데이터
setSearchCond();
var searchParams = $.param(SEARCH_COND);
// 모든 파라미터 조합
console.log(defaultParams + '&' + searchParams);
return defaultParams + '&' + searchParams;
}
};
},
/**
* 4개 그리드 인스턴스 생성
*/
create: function() {
var Grid = tui.Grid;
var self = this;
// 그리드 ID 배열
var gridIds = ['grid1', 'grid2', 'grid3', 'grid4'];
// 각 그리드 생성
gridIds.forEach(function(gridId) {
var gridConfig = self.initConfig(gridId);
self.instances[gridId] = gridConfig.instance(Grid);
// 드롭다운 메뉴가 잘리지 않도록 overflow 설정 조정
$('#' + gridId).css('overflow', 'visible');
});
// 그리드 테마 설정
Grid.applyTheme('striped');
// 공통 오버플로우 설정
$('.containers').css('overflow', 'visible');
$('.gs_booking').css('overflow', 'visible');
// 그리드 이벤트 설정
this.gridBindEvents();
},
/**
* 4개 그리드 이벤트 바인딩
*/
gridBindEvents: function() {
var self = this;
var gridIds = ['grid1', 'grid2', 'grid3', 'grid4'];
// 각 그리드별로 이벤트 바인딩
gridIds.forEach(function(gridId, index) {
var instance = self.instances[gridId];
var gridNumber = index + 1;
// 요청 성공 시 처리 (페이징 제거로 특별한 처리 불필요)
instance.on('successResponse', function(ev) {
// 클라이언트 사이드 처리로 변경되어 페이징 관련 처리 불필요
});
// XIT 공통 컴포넌트를 사용하여 드롭다운 메뉴 이벤트 바인딩
var menuCallbacks = {
view: function(row, rowKey) {
Ma30List.openViewModal(row);
},
detail: function(row, rowKey) {
// 새로 추가된 상세정보 메뉴 액션
Ma30List.openDetailModal(row);
},
edit: function(row, rowKey) {
console.log(row);
Ma30List.openEditPage(row);
},
delete: function(row, rowKey) {
if (!confirm('정말 삭제하시겠습니까?')) return;
// 삭제 요청 처리 (실제 구현시 적절한 URL로 변경 필요)
$.ajax({
url: '<c:url value="/ma30/delete.ajax"/>',
type: 'POST',
data: { regstrMngNo: row.regstrMngNo },
success: function(res) {
alert('삭제되었습니다.');
// 성공 시 모든 그리드 새로고침 (페이징 제거로 페이지 파라미터 불필요)
gridIds.forEach(function(gId) {
self.instances[gId].readData();
});
},
error: function() {
alert('삭제 중 오류가 발생했습니다.');
}
});
}
};
// 공통 컴포넌트로 이벤트 바인딩
XitTuiGridDropdownMenu.bindEvents('#' + gridId, menuCallbacks, instance);
});
}
},
/**
* 이벤트 핸들러 설정
*/
eventBindEvents: function() {
var self = this;
$("#schDateChk").on("change", function() {
if( $(this).is(":checked") ){
$("#schDayGubun").removeAttr("disabled");
$("#schBeginDt").removeAttr("disabled");
$("#schEndDt").removeAttr("disabled");
}else{
$("#schDayGubun").attr("disabled", "disabled");
$("#schBeginDt").attr("disabled", "disabled");
$("#schEndDt").attr("disabled", "disabled");}
})
// 검색 버튼 클릭 이벤트 - 모든 그리드 업데이트
$('#search_btn').on('click', function() {
// 모든 그리드 데이터 리로드 (페이징 제거로 페이지 파라미터 불필요)
Object.keys(self.grid.instances).forEach(function(gridId) {
self.grid.instances[gridId].readData();
});
});
// 검색어 입력 필드에서 엔터키 이벤트 처리
$('#schForm input').on('keypress', function(e) {
if (e.which === 13) { // 엔터키 코드는 13
e.preventDefault(); // 기본 이벤트 방지
$('#search_btn').trigger('click'); // 검색 버튼 클릭 이벤트 트리거
}
});
},
/**
* 모듈 초기화
*/
init: function() {
// 그리드 생성
this.grid.create();
// 이벤트 핸들러 설정
this.eventBindEvents();
},
/**
* 상세보기 모달 열기
* @param {Object} row - 선택된 행 데이터
*/
openViewModal: function(row) {
// 상세 정보를 표시할 모달 구현
// 프로젝트 공통 모달 규칙에 맞춰 구현
console.log('상세보기:', row);
alert('상세보기 기능입니다.\n관리번호: ' + row.regstrMngNo + '\n연도: ' + row.mngYy);
// 실제 구현 시 아래와 같이 모달을 열어주세요
// 예시: Xit 공통 모달 활용
/*
var modalConfig = {
title: '단속자료 상세보기',
url: '<c:url value="/ma30/view.do"/>',
params: { regstrMngNo: row.regstrMngNo },
size: 'lg' // 모달 크기
};
XitModal.open(modalConfig);
*/
},
/**
* 상세정보 모달 열기 (새로 추가된 커스텀 메뉴 예제)
* @param {Object} row - 선택된 행 데이터
*/
openDetailModal: function(row) {
// 상세 정보를 더 자세히 표시하는 모달 (기본 보기와 다른 형태)
console.log('상세정보:', row);
var detailInfo =
'=== 상세 단속자료 정보 ===\n' +
'관리번호: ' + (row.regstrMngNo || '없음') + '\n' +
'연도: ' + (row.mngYy || '없음') + '\n' +
'연번: ' + (row.mngNo || '없음') + '\n' +
'동: ' + (row.bdongName || '없음') + '\n' +
'지번: ' + (row.posAddr || '없음') + '\n' +
'상세주소: ' + (row.addrEtc || '없음');
alert(detailInfo);
// 실제 구현 시 더 상세한 모달을 만들 수 있음
/*
var modalConfig = {
title: '단속자료 상세정보',
url: '<c:url value="/ma30/detailView.do"/>',
params: { regstrMngNo: row.regstrMngNo },
size: 'xl' // 큰 모달로 더 많은 정보 표시
};
XitModal.open(modalConfig);
*/
},
/**
* 수정 페이지 이동
* @param {Object} row - 선택된 행 데이터
*/
openEditPage: function(row) {
// 수정 페이지로 이동 또는 수정 모달 열기
console.log('수정:', row);
// 페이지 이동 방식
if (confirm('수정 페이지로 이동하시겠습니까?')) {
location.href = '<c:url value="/ma30/edit.do"/>' + '?regstrMngNo=' + encodeURIComponent(row.regstrMngNo);
}
// 모달 방식으로 구현하려면 아래와 같이 사용
/*
var modalConfig = {
title: '단속자료 수정',
url: '<c:url value="/ma30/editForm.do"/>',
params: { regstrMngNo: row.regstrMngNo },
size: 'xl' // 모달 크기
};
XitModal.open(modalConfig);
*/
}
};
// 페이지 로드 시 초기화
$(function() {
Ma30List.init();
});
// 전역 네임스페이스에 모듈 노출
window.Ma30List = Ma30List;
})(window, jQuery);
</script>

@ -1,519 +0,0 @@
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<%@ taglib prefix="dateUtil" uri="http://egovframework.go.kr/functions/date-util" %>
<!-- Main body -->
<div class="main_body">
<section id="section8" class="main_bars">
<div class="bgs-main">
<section id="section5">
<div class="sub_title"></div>
</section>
</div>
</section>
<div class="contants_body">
<div class="gs_b_top" style="border-bottom: 0;">
<ul class="lef">
<li class="th">
<label>
<input id="schDateChk" name="schDateChk" type="checkbox" style="width: 18px; height: 18px; padding-bottom: 15px;" value="1">
일자검색 :
</label>
</li>
<li>
<select id="schDayGubun" name="schDayGubun" title="일자구분" class="input" disabled="disabled">
<option value="JOSA_ENDDT">적발일자</option>
<option value="FST_WARNNING_ENDDT">사전통지</option>
<option value="SND_WARNNING_ENDDT">시정명령</option>
<option value="GOBAL_ENDDT">시정촉구</option>
<option value="PRE_BUGWA_ENDDT">부과예고</option>
<option value="BUGWA_ENDDT">부과</option>
<option value="NAPBU_CHOKGU_ENDDT">납부촉구</option>
<option value="A.RECOVER_DT">시정완료</option>
<option value="YUYEENDDATE">유예기간</option>
<option value="A.MNG_YY">연도</option>
</select>
<input type="text" id="schBeginDt" name="schBeginDt" class="input calender datepicker" value="${dateUtil:getCurrentDateAddDays('yyyy-MM-dd',-30)}" disabled="disabled"/> ~
<input type="text" id="schEndDt" name="schEndDt" class="input calender datepicker" value="${dateUtil:getCurrentDateTime('yyyy-MM-dd')}" disabled="disabled" />
</li>
<li class="th">법정동 :</li>
<li><input type="text" id="schBdongName" name="schBdongName" maxlength="10" class="input"/></li>
<li class="th">지번 :</li>
<li>
<input type="text" id="schBuldMnnm" name="schBuldMnnm" maxlength="10" class="input"/>
-
<input type="text" id="schBuldSlno" name="schBuldSlno" class="input">
</li>
<li class="th">소유주 :</li>
<li><input type="text" id="schOResName" name="schOResName" maxlength="10" class="input"/></li>
<li class="th">행위자 :</li>
<li><input type="text" id="schHResName" name="schHResName" class="input"/></li>
<li class="th">관리번호 :</li>
<li><input type="text" id="schRegstrMngNo" name="schRegstrMngNo" class="input"/></li>
</ul>
<ul class="rig2">
<li><button type="button" id="search_btn" class="newbtnss bg1">검색</button></li>
</ul>
</div>
<div class="gs_b_top">
<ul class="lef">
<li class="th">
<label>
<input id="schOnlyMyDataChk" name="schOnlyMyDataChk" type="checkbox" style="width: 18px; height: 18px; padding-bottom: 15px;" value="1">
내가 등록한 자료만 조회
</label>
</li>
<li class="th">
<label style="padding-left: 15px;"><input type="radio" id="schAllDataChk" name="schDataChk" value="A"/> 전체</label>
<label style="padding-left: 15px;"><input type="radio" id="schNewDataChk" name="schDataChk" value="B"/> 신규</label>
<label style="padding-left: 15px;"><input type="radio" id="schJaeBugwaDataChk" name="schDataChk" value="C"/> 재부과</label>
</li>
</ul>
</div>
<div class="gs_booking">
<div class="row">
<div class="col-sm-12">
<div class="box_column">
<ul class="box_title" style="display: flex; justify-content: space-between; align-items: center;">
<li class="tit">단속자료 목록</li>
<li style="text-align: right;">
<select id="perPageSelect" class="input" style="width: 110px;">
<option value="15">페이지당 15</option>
<option value="50">페이지당 50</option>
<option value="100">페이지당 100</option>
</select>
<span class="page_number"><span id="currentPage"></span><span class="bar">/</span><span id="totalPages"></span> Pages</span>
</li>
</ul>
<div class="containers">
<div id="grid"></div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- /Main body -->
<script type="text/javascript">
/**
* 로그인 로그 목록 관리 모듈
* 로그인 로그 목록을 조회하고 관리하는 기능을 제공합니다.
*/
(function(window, $) {
'use strict';
var SEARCH_COND = {};
// 검색정보 셋팅
var setSearchCond = function() {
var schDateChk = !!$("#schDateChk").is(':checked');
var schDayGubun = $.trim(nvl($("#schDayGubun").val(), ""));
var schBeginDt = $.trim(nvl($("#schBeginDt").val(), ""));
var schEndDt = $.trim(nvl($("#schEndDt").val(), ""));
var schBdongName = $.trim(nvl($("#schBdongName").val(), ""));
var schBuldMnnm = $.trim(nvl($("#schBuldMnnm").val(), ""));
var schBuldSlno = $.trim(nvl($("#schBuldSlno").val(), ""));
var schOResName = $.trim(nvl($("#schOResName").val(), ""));
var schHResName = $.trim(nvl($("#schHResName").val(), ""));
var schRegstrMngNo = $.trim(nvl($("#schRegstrMngNo").val(), ""));
var schOnlyMyDataChk = !!$("#schOnlyMyDataChk").is(':checked');
var schDataChk = $.trim(nvl($("input[name=schDataChk]:checked").val(), ""));
SEARCH_COND.schDateChk = schDateChk;
SEARCH_COND.schDayGubun = schDayGubun;
SEARCH_COND.schBeginDt = schBeginDt;
SEARCH_COND.schEndDt = schEndDt;
SEARCH_COND.schBdongName = schBdongName;
SEARCH_COND.schBuldMnnm = schBuldMnnm;
SEARCH_COND.schBuldSlno = schBuldSlno;
SEARCH_COND.schOResName = schOResName;
SEARCH_COND.schHResName = schHResName;
SEARCH_COND.schRegstrMngNo = schRegstrMngNo;
SEARCH_COND.schOnlyMyDataChk = schOnlyMyDataChk;
SEARCH_COND.schDataChk = schDataChk;
SEARCH_COND.isMywork = false; //이거 왜쓰는거임?
SEARCH_COND.schMyworkGubun = "N"; //이거 왜쓰는거임?
};
/**
* 로그인 로그 목록 관리 네임스페이스
*/
var Ma30List = {
/**
* 그리드 관련 객체
*/
grid: {
/**
* 그리드 인스턴스
*/
instance: null,
/**
* 그리드 설정 초기화
* @returns {Object} 그리드 설정 객체
*/
initConfig: function() {
// 데이터 소스 설정
var dataSource = this.createDataSource();
// 현재 선택된 perPage 값 가져오기
var perPage = parseInt($('#perPageSelect').val() || 15, 10);
// 그리드 설정 객체 생성
var gridConfig = new XitTuiGridConfig();
// 기본 설정
gridConfig.setOptDataSource(dataSource); // 데이터소스 연결
gridConfig.setOptGridId('grid'); // 그리드를 출력할 Element ID
gridConfig.setOptGridHeight(470); // 그리드 높이(단위: px)
gridConfig.setOptRowHeight(30); // 그리드 행 높이(단위: px)
gridConfig.setOptRowHeaderType('rowNum'); // 행 첫번째 셀 타입(rowNum: 순번, checkbox: 체크박스, '': 출력 안함)
gridConfig.setOptUseClientSort(false); // 서버사이드 정렬 false
// 페이징 옵션 설정
gridConfig.setOptPageOptions({
useClient: false, // 클라이언트 페이징 여부(false: 서버 페이징)
perPage: perPage // 페이지당 표시 건수
});
gridConfig.setOptHeader(this.getGridOptHeader());
gridConfig.setOptColumns(this.getGridColumns());
return gridConfig;
},
getGridOptHeader: function() {
return {
height: 60,
complexColumns: [
{
header: '단속현황',
name: 'dansokhyeonhwang',
childNames: ['mngYy', 'regstrMngNo', 'mngNo', 'bdongName', 'posAddr', 'addrEtc', 'actions']
},
]
}
},
/**
* 그리드 컬럼 정의
* @returns {Array} 그리드 컬럼 배열
*/
getGridColumns: function() {
return [
{
header: '연도',
name: 'mngYy',
width: 60,
align: 'center'
},
{
header: '관리번호',
name: 'regstrMngNo',
width: 100,
align: 'center'
},
{
header: '연번',
name: 'mngNo',
width: 60,
align: 'center'
},
{
header: '동',
name: 'bdongName',
width: 80,
align: 'center'
},
{
header: '지번',
name: 'posAddr',
width: 80,
align: 'center'
},
{
header: '상세주소',
name: 'addrEtc',
width: 150,
align: 'left'
},
{
header: '작업',
name: 'actions',
width: 80,
align: 'center',
sortable: false,
resizable: false,
formatter: function(props) {
// 개발자가 직접 커스텀 메뉴 아이템 설정 (새로운 방식 사용)
return XitTuiGridDropdownMenu.createMenuHtml(props, {
menuItems: [
{ text: '보기', action: 'view', class: 'js-row-view' },
{ text: '상세정보', action: 'detail', class: 'js-row-detail' },
{ text: '수정', action: 'edit', class: 'js-row-edit' },
{ text: '삭제', action: 'delete', class: 'js-row-delete', style: 'color: #dc3545;' }
]
});
}
},
];
},
/**
* 데이터 소스 생성
* @returns {Object} 데이터 소스 객체
*/
createDataSource: function() {
return {
api: {
readData: {
url: '<c:url value="/ma30/list.ajax"/>',
method: 'POST',
contentType: 'application/x-www-form-urlencoded',
processData: true
}
},
initialRequest: true, // 초기 데이터 요청 여부
serializer: function(params) {
// 기본 파라미터 (페이지 정보 등)
var defaultParams = $.param(params);
// 검색 폼 데이터
setSearchCond();
var searchParams = $.param(SEARCH_COND);
// 모든 파라미터 조합
console.log(defaultParams + '&' + searchParams);
return defaultParams + '&' + searchParams;
}
};
},
/**
* 그리드 인스턴스 생성
*/
create: function() {
var gridConfig = this.initConfig();
var Grid = tui.Grid;
this.instance = gridConfig.instance(Grid);
// 그리드 테마 설정
Grid.applyTheme('striped');
// 드롭다운 메뉴가 잘리지 않도록 overflow 설정 조정
$('#grid').css('overflow', 'visible');
$('.containers').css('overflow', 'visible');
$('.gs_booking').css('overflow', 'visible');
// 그리드 이벤트 설정
this.gridBindEvents();
},
/**
* 그리드 이벤트 바인딩
*/
gridBindEvents: function() {
var self = this;
// 요청 성공 시 총 건수 표시
this.instance.on('successResponse', function(ev) {
var responseObj = JSON.parse(ev.xhr.response);
$("#currentPage").text(responseObj.data.pagination.page);
$("#totalPages").text(responseObj.data.pagination.totalPages);
});
// XIT 공통 컴포넌트를 사용하여 드롭다운 메뉴 이벤트 바인딩
var menuCallbacks = {
view: function(row, rowKey) {
Ma30List.openViewModal(row);
},
detail: function(row, rowKey) {
// 새로 추가된 상세정보 메뉴 액션
Ma30List.openDetailModal(row);
},
edit: function(row, rowKey) {
console.log(row);
Ma30List.openEditPage(row);
},
delete: function(row, rowKey) {
if (!confirm('정말 삭제하시겠습니까?')) return;
// 삭제 요청 처리 (실제 구현시 적절한 URL로 변경 필요)
$.ajax({
url: '<c:url value="/ma30/delete.ajax"/>',
type: 'POST',
data: { regstrMngNo: row.regstrMngNo },
success: function(res) {
alert('삭제되었습니다.');
// 성공 시 현재 페이지 유지하여 새로고침
var page = self.instance.getPagination().getCurrentPage();
self.instance.readData(page);
},
error: function() {
alert('삭제 중 오류가 발생했습니다.');
}
});
}
};
// 공통 컴포넌트로 이벤트 바인딩
XitTuiGridDropdownMenu.bindEvents('#grid', menuCallbacks, this.instance);
}
},
/**
* 이벤트 핸들러 설정
*/
eventBindEvents: function() {
var self = this;
$("#schDateChk").on("change", function() {
if( $(this).is(":checked") ){
$("#schDayGubun").removeAttr("disabled");
$("#schBeginDt").removeAttr("disabled");
$("#schEndDt").removeAttr("disabled");
}else{
$("#schDayGubun").attr("disabled", "disabled");
$("#schBeginDt").attr("disabled", "disabled");
$("#schEndDt").attr("disabled", "disabled");}
})
// 검색 버튼 클릭 이벤트
$('#search_btn').on('click', function() {
// 페이지를 1로 리셋
$("#page").val(1);
// 그리드 데이터 리로드
self.grid.instance.readData(1);
});
// 검색어 입력 필드에서 엔터키 이벤트 처리
$('#schForm input').on('keypress', function(e) {
if (e.which === 13) { // 엔터키 코드는 13
e.preventDefault(); // 기본 이벤트 방지
$('#search_btn').trigger('click'); // 검색 버튼 클릭 이벤트 트리거
}
});
// perPage 변경 이벤트 추가
$('#perPageSelect').on('change', function() {
var perPage = parseInt($(this).val(), 10);
// Grid의 perPage 설정 변경 및 데이터 리로드
self.grid.instance.setPerPage(perPage);
});
},
/**
* 모듈 초기화
*/
init: function() {
// 그리드 생성
this.grid.create();
// 이벤트 핸들러 설정
this.eventBindEvents();
},
/**
* 상세보기 모달 열기
* @param {Object} row - 선택된 행 데이터
*/
openViewModal: function(row) {
// 상세 정보를 표시할 모달 구현
// 프로젝트 공통 모달 규칙에 맞춰 구현
console.log('상세보기:', row);
alert('상세보기 기능입니다.\n관리번호: ' + row.regstrMngNo + '\n연도: ' + row.mngYy);
// 실제 구현 시 아래와 같이 모달을 열어주세요
// 예시: Xit 공통 모달 활용
/*
var modalConfig = {
title: '단속자료 상세보기',
url: '<c:url value="/ma30/view.do"/>',
params: { regstrMngNo: row.regstrMngNo },
size: 'lg' // 모달 크기
};
XitModal.open(modalConfig);
*/
},
/**
* 상세정보 모달 열기 (새로 추가된 커스텀 메뉴 예제)
* @param {Object} row - 선택된 행 데이터
*/
openDetailModal: function(row) {
// 상세 정보를 더 자세히 표시하는 모달 (기본 보기와 다른 형태)
console.log('상세정보:', row);
var detailInfo =
'=== 상세 단속자료 정보 ===\n' +
'관리번호: ' + (row.regstrMngNo || '없음') + '\n' +
'연도: ' + (row.mngYy || '없음') + '\n' +
'연번: ' + (row.mngNo || '없음') + '\n' +
'동: ' + (row.bdongName || '없음') + '\n' +
'지번: ' + (row.posAddr || '없음') + '\n' +
'상세주소: ' + (row.addrEtc || '없음');
alert(detailInfo);
// 실제 구현 시 더 상세한 모달을 만들 수 있음
/*
var modalConfig = {
title: '단속자료 상세정보',
url: '<c:url value="/ma30/detailView.do"/>',
params: { regstrMngNo: row.regstrMngNo },
size: 'xl' // 큰 모달로 더 많은 정보 표시
};
XitModal.open(modalConfig);
*/
},
/**
* 수정 페이지 이동
* @param {Object} row - 선택된 행 데이터
*/
openEditPage: function(row) {
// 수정 페이지로 이동 또는 수정 모달 열기
console.log('수정:', row);
// 페이지 이동 방식
if (confirm('수정 페이지로 이동하시겠습니까?')) {
location.href = '<c:url value="/ma30/edit.do"/>' + '?regstrMngNo=' + encodeURIComponent(row.regstrMngNo);
}
// 모달 방식으로 구현하려면 아래와 같이 사용
/*
var modalConfig = {
title: '단속자료 수정',
url: '<c:url value="/ma30/editForm.do"/>',
params: { regstrMngNo: row.regstrMngNo },
size: 'xl' // 모달 크기
};
XitModal.open(modalConfig);
*/
}
};
// 페이지 로드 시 초기화
$(function() {
Ma30List.init();
});
// 전역 네임스페이스에 모듈 노출
window.Ma30List = Ma30List;
})(window, jQuery);
</script>
Loading…
Cancel
Save