조사원 > 조사원 팝업: 코드 리팩토링 및 모듈 이름 변경 (ExmnrPop → CrdnExmnr), 위치정보 모듈 리네임 (PstnInfo → CrdnPstnInfo), JSP 경로 및 관련 MyBatis 매퍼 파일 경로 수정

dev
박성영 4 months ago
parent 51d8892f62
commit 204ce2c6c4

@ -4,60 +4,111 @@
This project is the "Ilsan Dong-gu Illegal Building Integrated Management System" (일산 동구 건축물 위법행위 통합관리시스템). It appears to be a web application for government officials to manage and track violations related to illegal buildings.
**Key Technologies:**
* **Backend:** Java, Spring Boot
* **Framework:** eGovFramework (A Spring-based framework widely used by the South Korean government)
* **Build Tool:** Gradle
* **Database:** MariaDB with MyBatis for data mapping.
* **Frontend:** JSP (JavaServer Pages) with the Apache Tiles templating framework.
* **Security:** Spring Security for authentication and authorization.
**Architecture:**
The application is a monolithic web application packaged as a WAR file. It follows a standard Model-View-Controller (MVC) architecture:
* **Controller:** Spring MVC controllers handle HTTP requests (URLs often end in `.do`).
* **Service:** A service layer likely contains the core business logic.
* **Data Access:** MyBatis mappers connect to a MariaDB database. The configuration maps snake_case database columns to camelCase Java fields.
* **View:** JSP files rendered using the Tiles framework compose the UI.
* **Authentication:** A custom `AuthInterceptor` (`AuthInterceptor.java`) checks for a user session on each request and redirects to a login page if the user is not authenticated.
## Building and Running
**Prerequisites:**
* Java Development Kit (JDK)
* Gradle
**Configuration:**
1. Database connection details must be configured in the appropriate profile YAML file located at `src/main/resources/`.
2. The active Spring profile (`local`, `dev`, or `prd`) can be set in `src/main/resources/application.yml`.
**Commands:**
* **Build the project:**
```bash
./gradlew clean build
```
This will produce a `.war` file in the `build/libs/` directory.
* **Run for development:**
```bash
./gradlew bootRun
```
The application will start on the port configured in `application.yml` (default is 8080).
* **Run tests:**
```bash
./gradlew test
```
* **Deploy to a server:**
Deploy the generated `.war` file from `build/libs/` to a compatible Java servlet container like Apache Tomcat.
## Development Conventions
* **Framework Style:** The project adheres to the conventions of the eGovFramework, including its specific package structure and component model.
* **Code Consistency:** When modifying source code (especially Java, XML, and JSP/HTML), always analyze existing files to understand and apply the established coding patterns, formatting, and conventions.
* **Database Schema:** DDL (Data Definition Language) files for the MariaDB database are maintained in the `DB-DDL/maria/ddl/` directory.
* **Data Mapping:** MyBatis is configured with `map-underscore-to-camel-case: true`, so database columns like `user_id` are automatically mapped to Java fields like `userId`. Mapper XML files are located in `src/main/resources/mybatis/mapper/`.
* **API Endpoints:** Web page and API URLs generally follow a `*.do` pattern (e.g., `/login.do`, `/getUser.do`).
* **View Templates:** The UI is built with JSP files, which are assembled using templates defined in `/WEB-INF/tiles/`.
* **Session Management:** User authentication is stored in the HTTP session. The `AuthInterceptor` protects pages that require a login.
## 기본 중요 가이드
### 한글로 대화, 한글 필수
### junie 의 중간 진행상황도 한글로 작성해서 보여줘
### 테스트소스는 작성 불가!!
### 중요로직 주석 필수 (한글)
### 각 컨트롤러 클래스에 스웨거 적용
### 기존소스의 공백제거 등 로직에 필요없는 부분은 수정 불가!!
### mvc 패턴, springboot + mybatis + jsp 구조, tiles 사용
### session 보안
### 기본적인 코딩 스타일은 noticeSample 참조 (xml, java, jsp)
### url 은 기본적으로 <c:url/> 사용
### 정적 리소스는 src/main/webapp/resources/css,js,xit 등등 해당 위치에 있음.
- 모달은 src/main/webapp/WEB-INF/views/system/loginLog/list.jsp :: 로그인로그 목록 조회 페이지 참조
- 팝업은 src/main/webapp/WEB-INF/views/system/user/auth_popup.jsp :: 팝업 호출 참조
- 모달과 메인윈도우는 src/main/webapp/resources/xit/xit-common.css 에 css 추가
- 팝업은 src/main/webapp/resources/xit/xit-popup.css 에 css 추가
### 신규 sql, DDL 생성시 DB-DDL/maria/dictionary/column_word_dictionary.md, 컬럼 단어사전 무조건 참조!!
### 단어사전에 없다면 단어사전 신규 추가!! (규칙은 무조건 지켜야함 특히, 일시->dttm, 같은 경우)
### 시간이란 명칭의 컬럼도 LocalDateTime 일경우 일시(dttm) 으로 변경하여 저장
### mybatis 기본적으로 camelCase 적용되어 있어 컬럼의 알리아스(별시) 별도로 사용하지 않아도 돼
### DB 구조는 DB-DDL/maria/ddl/xitframework/*.sql 참조
### 기본적인 key 는 시컨스를 이용, 총 20자리, 데이터약어 4자리, 시컨스포함 16자리
```mariadb
SELECT CONCAT('BBSN', LPAD(NEXTVAL(seq_notice_id), 16, '0'))
```
### paging 처리 시 controller 에서 1.totalCount 구하기, 2.setTotalCount, 3.setPagingYn 순서 중요!! 해당순서를 지켜야지만 에러 발생안함.
```java
// 1. 총 개수 조회
int totalCount = excelSampleService.selectExcelSampleListTotalCount(paramVO);
// 2. 응답 데이터 구성
paramVO.setTotalCount(totalCount);
// 3. 페이징 처리
paramVO.setPagingYn("Y");
```
### JS 구현시 setTimeout 최대한 구현하지마, 모여서 문제 발생됨.
## 2 주요 기술 및 라이브러리
### 2.1 핵심 기술 스택
| 기술 | 버전 | 설명 |
|------|------|------|
| Java | 개발: 1.8, 배포: 1.8 | 자바 개발 및 실행 환경 |
| Spring Boot | 2.7.18 | 스프링 기반 애플리케이션 개발 프레임워크 |
| 전자정부 프레임워크 | 4.3.0 | 한국 정부 표준 웹 개발 프레임워크 |
| Servlet | 3.1 | 웹 애플리케이션 표준 |
| Gradle | - | 빌드 및 의존성 관리 도구 |
| MariaDB | - | 관계형 데이터베이스 |
## 2.2 주요 라이브러리
| 라이브러리 | 버전 | 설명 |
|------------|------|------|
| MyBatis | 2.3.1 | SQL 매핑 프레임워크 |
| Apache Tiles | 3.0.8 | 레이아웃 템플릿 엔진 |
| TOAST UI Grid | 4.19.2 | 자바스크립트 그리드 라이브러리 |
| Lombok | - | 자바 코드 생성 라이브러리 |
| Apache Commons Text | 1.10.0 | 텍스트 처리 유틸리티 |
| Apache POI | 5.3.0 | 엑셀 파일 처리 라이브러리 |
## 3. 프로젝트 구조
### 3.1 디렉토리 구조
```
IBMS_NEW/
├── DB-DDL/ # 데이터베이스 스크립트
│ └── maria/ # MariaDB 스크립트
│ ├── ddl/ # 테이블 정의 스크립트
│ └── dml/ # 샘플 데이터 스크립트
├── src/
│ ├── main/
│ │ ├── java/ # 자바 소스 코드
│ │ │ ├── egovframework/ # 전자정부 프레임워크 확장 코드
│ │ │ └── go/kr/project/ # 프로젝트 소스 코드
│ │ ├── resources/ # 리소스 파일
│ │ │ ├── mybatis/ # MyBatis 설정 및 매퍼
│ │ │ └── application.yml # 애플리케이션 설정 파일
│ │ └── webapp/ # 웹 리소스
│ │ ├── resources/ # 정적 리소스 (CSS, JS, 이미지 등)
│ │ └── WEB-INF/views/ # JSP 뷰 파일
│ └── test/ # 테스트 코드
└── build.gradle # Gradle 빌드 스크립트
```
### 3.2 패키지 구조
```
go.kr.project/
├── common/ # 공통 컴포넌트
├── login/ # 로그인 관련 기능
│ ├── controller/ # 컨트롤러 클래스
│ ├── mapper/ # MyBatis 매퍼 인터페이스
│ ├── model/ # 데이터 모델 클래스
│ └── service/ # 서비스 클래스
└── system/ # 시스템 관리 기능
├── auth/ # 권한 관리
├── code/ # 코드 관리
├── group/ # 그룹 관리
├── menu/ # 메뉴 관리
├── role/ # 역할 관리
└── user/ # 사용자 관리
├── controller/ # 컨트롤러 클래스
├── mapper/ # MyBatis 매퍼 인터페이스
├── model/ # 데이터 모델 클래스
└── service/ # 서비스 클래스
egovframework/
├── config/ # 프레임워크 설정
├── exception/ # 예외 처리
├── filter/ # 필터
├── interceptor/ # 인터셉터
└── util/ # 유틸리티 클래스
```

@ -1,11 +1,10 @@
package go.kr.project.crdn.crndRegistAndView.exmnrPop.controller;
package go.kr.project.crdn.crndRegistAndView.crdnExmnr.controller;
import egovframework.constant.TilesConstants;
import egovframework.util.ApiResponseUtil;
import go.kr.project.crdn.crndRegistAndView.exmnrPop.model.ExmnrPopVO;
import go.kr.project.crdn.crndRegistAndView.exmnrPop.model.ExmnrPopSearchVO;
import go.kr.project.crdn.crndRegistAndView.exmnrPop.service.ExmnrPopService;
import go.kr.project.system.user.model.SystemUserVO;
import go.kr.project.crdn.crndRegistAndView.crdnExmnr.model.CrdnExmnrVO;
import go.kr.project.crdn.crndRegistAndView.crdnExmnr.model.CrdnExmnrSearchVO;
import go.kr.project.crdn.crndRegistAndView.crdnExmnr.service.CrdnExmnrService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
@ -16,9 +15,7 @@ import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
*
@ -27,10 +24,10 @@ import java.util.Map;
@Slf4j
@Controller
@RequiredArgsConstructor
@RequestMapping("/crdn/crndRegistAndView/exmnrPop")
public class ExmnrPopController {
@RequestMapping("/crdn/crndRegistAndView/crdnExmnr")
public class CrdnExmnrController {
private final ExmnrPopService exmnrPopService;
private final CrdnExmnrService exmnrPopService;
/**
*
@ -41,7 +38,7 @@ public class ExmnrPopController {
@GetMapping("/popup.do")
public String exmnrPopup(Model model) {
log.debug("조사원 선택 팝업 페이지 호출");
return "crdn/crndRegistAndView/exmnrPop/popup" + TilesConstants.POPUP;
return "crdn/crndRegistAndView/crdnExmnr/popup" + TilesConstants.POPUP;
}
/**
@ -52,7 +49,7 @@ public class ExmnrPopController {
@Operation(summary = "조사원 목록 조회", description = "검색 조건에 따른 조사원 목록을 조회합니다.")
@PostMapping("/list.ajax")
public ResponseEntity<?> selectExmnrPopList(
@Parameter(description = "검색 조건") @ModelAttribute ExmnrPopSearchVO searchVO) {
@Parameter(description = "검색 조건") @ModelAttribute CrdnExmnrSearchVO searchVO) {
log.debug("조사원 팝업 목록 조회 요청 - 검색 조건: {}", searchVO);
@ -66,7 +63,7 @@ public class ExmnrPopController {
searchVO.setPagingYn("N");
// 조사원 목록 조회
List<ExmnrPopVO> exmnrList = exmnrPopService.selectExmnrPopList(searchVO);
List<CrdnExmnrVO> exmnrList = exmnrPopService.selectExmnrPopList(searchVO);
return ApiResponseUtil.successWithGrid(exmnrList, searchVO);
}

@ -1,7 +1,7 @@
package go.kr.project.crdn.crndRegistAndView.exmnrPop.mapper;
package go.kr.project.crdn.crndRegistAndView.crdnExmnr.mapper;
import go.kr.project.crdn.crndRegistAndView.exmnrPop.model.ExmnrPopVO;
import go.kr.project.crdn.crndRegistAndView.exmnrPop.model.ExmnrPopSearchVO;
import go.kr.project.crdn.crndRegistAndView.crdnExmnr.model.CrdnExmnrVO;
import go.kr.project.crdn.crndRegistAndView.crdnExmnr.model.CrdnExmnrSearchVO;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
@ -10,20 +10,20 @@ import java.util.List;
*
*/
@Mapper
public interface ExmnrPopMapper {
public interface CrdnExmnrMapper {
/**
* ()
* @param searchVO
* @return
*/
List<ExmnrPopVO> selectExmnrPopList(ExmnrPopSearchVO searchVO);
List<CrdnExmnrVO> selectExmnrPopList(CrdnExmnrSearchVO searchVO);
/**
*
* @param searchVO
* @return
*/
int selectExmnrPopListTotalCount(ExmnrPopSearchVO searchVO);
int selectExmnrPopListTotalCount(CrdnExmnrSearchVO searchVO);
}

@ -1,4 +1,4 @@
package go.kr.project.crdn.crndRegistAndView.exmnrPop.model;
package go.kr.project.crdn.crndRegistAndView.crdnExmnr.model;
import go.kr.project.common.model.PagingVO;
import lombok.*;
@ -9,8 +9,8 @@ import lombok.*;
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class ExmnrPopSearchVO extends PagingVO {
public class CrdnExmnrSearchVO extends PagingVO {
private String schExmnr;
private String schSggCd;
private String delYn = "N";
private String delYn;
}

@ -1,4 +1,4 @@
package go.kr.project.crdn.crndRegistAndView.exmnrPop.model;
package go.kr.project.crdn.crndRegistAndView.crdnExmnr.model;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.*;
@ -11,7 +11,7 @@ import java.time.LocalDateTime;
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class ExmnrPopVO {
public class CrdnExmnrVO {
private String exmnrId;
private String sggCd;

@ -0,0 +1,28 @@
package go.kr.project.crdn.crndRegistAndView.crdnExmnr.service;
import go.kr.project.crdn.crndRegistAndView.crdnExmnr.model.CrdnExmnrVO;
import go.kr.project.crdn.crndRegistAndView.crdnExmnr.model.CrdnExmnrSearchVO;
import java.util.List;
/**
*
*/
public interface CrdnExmnrService {
/**
* ()
* @param searchVO
* @return
*/
List<CrdnExmnrVO> selectExmnrPopList(CrdnExmnrSearchVO searchVO);
/**
*
* @param searchVO
* @return
*/
int selectExmnrPopListTotalCount(CrdnExmnrSearchVO searchVO);
}

@ -1,9 +1,9 @@
package go.kr.project.crdn.crndRegistAndView.exmnrPop.service.impl;
package go.kr.project.crdn.crndRegistAndView.crdnExmnr.service.impl;
import go.kr.project.crdn.crndRegistAndView.exmnrPop.mapper.ExmnrPopMapper;
import go.kr.project.crdn.crndRegistAndView.exmnrPop.model.ExmnrPopVO;
import go.kr.project.crdn.crndRegistAndView.exmnrPop.model.ExmnrPopSearchVO;
import go.kr.project.crdn.crndRegistAndView.exmnrPop.service.ExmnrPopService;
import go.kr.project.crdn.crndRegistAndView.crdnExmnr.mapper.CrdnExmnrMapper;
import go.kr.project.crdn.crndRegistAndView.crdnExmnr.model.CrdnExmnrVO;
import go.kr.project.crdn.crndRegistAndView.crdnExmnr.model.CrdnExmnrSearchVO;
import go.kr.project.crdn.crndRegistAndView.crdnExmnr.service.CrdnExmnrService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
@ -16,9 +16,9 @@ import java.util.List;
@Slf4j
@Service
@RequiredArgsConstructor
public class ExmnrPopServiceImpl implements ExmnrPopService {
public class CrdnExmnrServiceImpl implements CrdnExmnrService {
private final ExmnrPopMapper exmnrPopMapper;
private final CrdnExmnrMapper exmnrPopMapper;
/**
* ()
@ -26,7 +26,7 @@ public class ExmnrPopServiceImpl implements ExmnrPopService {
* @return
*/
@Override
public List<ExmnrPopVO> selectExmnrPopList(ExmnrPopSearchVO searchVO) {
public List<CrdnExmnrVO> selectExmnrPopList(CrdnExmnrSearchVO searchVO) {
log.debug("조사원 팝업 목록 조회 - 검색 조건: {}", searchVO);
return exmnrPopMapper.selectExmnrPopList(searchVO);
}
@ -37,7 +37,7 @@ public class ExmnrPopServiceImpl implements ExmnrPopService {
* @return
*/
@Override
public int selectExmnrPopListTotalCount(ExmnrPopSearchVO searchVO) {
public int selectExmnrPopListTotalCount(CrdnExmnrSearchVO searchVO) {
log.debug("조사원 팝업 목록 총 건수 조회 - 검색 조건: {}", searchVO);
return exmnrPopMapper.selectExmnrPopListTotalCount(searchVO);
}

@ -1,4 +1,4 @@
package go.kr.project.crdn.crndRegistAndView.pstnInfo.controller;
package go.kr.project.crdn.crndRegistAndView.crdnPstnInfo.controller;
import egovframework.constant.MessageConstants;
import egovframework.constant.TilesConstants;
@ -6,8 +6,8 @@ import egovframework.util.ApiResponseUtil;
import egovframework.util.SessionUtil;
import go.kr.project.common.model.CmmnCodeSearchVO;
import go.kr.project.common.service.CommonCodeService;
import go.kr.project.crdn.crndRegistAndView.pstnInfo.model.PstnInfoVO;
import go.kr.project.crdn.crndRegistAndView.pstnInfo.service.PstnInfoService;
import go.kr.project.crdn.crndRegistAndView.crdnPstnInfo.model.CrdnPstnInfoVO;
import go.kr.project.crdn.crndRegistAndView.crdnPstnInfo.service.CrdnPstnInfoService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
@ -28,13 +28,13 @@ import java.util.List;
* : Grid1( ) / API . (setTotalCountsetPagingYn) .
*/
@Controller
@RequestMapping("/crdn/crndRegistAndView/pstnInfo")
@RequestMapping("/crdn/crndRegistAndView/crdnPstnInfo")
@RequiredArgsConstructor
@Slf4j
@Tag(name = "단속 위치정보", description = "단속 자료 위치정보 API")
public class PstnInfoController {
public class CrdnPstnInfoController {
private final PstnInfoService service;
private final CrdnPstnInfoService service;
private final CommonCodeService commonCodeService;
/**
@ -46,7 +46,7 @@ public class PstnInfoController {
@ApiResponse(responseCode = "400", description = "조회 실패")
})
@PostMapping("/list.ajax")
public ResponseEntity<?> listAjax(@ModelAttribute PstnInfoVO vo) {
public ResponseEntity<?> listAjax(@ModelAttribute CrdnPstnInfoVO vo) {
// 1. 총 개수 조회
int totalCount = service.selectPstnInfoListTotalCount(vo);
// 2. 응답 데이터 구성
@ -54,7 +54,7 @@ public class PstnInfoController {
// 3. 페이징 처리 (가이드 준수)
vo.setPagingYn("Y");
List<PstnInfoVO> list = service.selectPstnInfoList(vo);
List<CrdnPstnInfoVO> list = service.selectPstnInfoList(vo);
return ApiResponseUtil.successWithGrid(list, vo);
}
@ -86,7 +86,7 @@ public class PstnInfoController {
.build();
model.addAttribute("ldcgCdList", commonCodeService.selectCodeDetailList(ldcgSearch));
ModelAndView mav = new ModelAndView("crdn/crndRegistAndView/pstnInfo/popup" + TilesConstants.POPUP);
ModelAndView mav = new ModelAndView("crdn/crndRegistAndView/crdnPstnInfo/popup" + TilesConstants.POPUP);
mav.addObject("crdnYr", crdnYr);
mav.addObject("crdnNo", crdnNo);
mav.addObject("mode", mode);
@ -103,7 +103,7 @@ public class PstnInfoController {
@ApiResponse(responseCode = "400", description = "등록 실패")
})
@PostMapping("/insert.ajax")
public ResponseEntity<?> insertAjax(@ModelAttribute PstnInfoVO vo) {
public ResponseEntity<?> insertAjax(@ModelAttribute CrdnPstnInfoVO vo) {
vo.setRgtr(SessionUtil.getUserId());
// 세션의 조직코드를 시군구 코드로 설정
vo.setSggCd(SessionUtil.getSessionVO().getUser().getOrgCd());

@ -0,0 +1,23 @@
package go.kr.project.crdn.crndRegistAndView.crdnPstnInfo.mapper;
import go.kr.project.crdn.crndRegistAndView.crdnPstnInfo.model.CrdnPstnInfoVO;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
/**
* MyBatis
* : tb_pstn_info CRUD / .
*/
@Mapper
public interface CrdnPstnInfoMapper {
/** 목록 조회 */
List<CrdnPstnInfoVO> selectPstnInfoList(CrdnPstnInfoVO vo);
/** 총 개수 */
int selectPstnInfoListTotalCount(CrdnPstnInfoVO vo);
/** 등록 */
int insertPstnInfo(CrdnPstnInfoVO vo);
}

@ -1,4 +1,4 @@
package go.kr.project.crdn.crndRegistAndView.pstnInfo.model;
package go.kr.project.crdn.crndRegistAndView.crdnPstnInfo.model;
import com.fasterxml.jackson.annotation.JsonFormat;
import go.kr.project.common.model.PagingVO;
@ -17,7 +17,7 @@ import java.time.LocalDateTime;
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class PstnInfoVO extends PagingVO {
public class CrdnPstnInfoVO extends PagingVO {
// ============ 테이블 컬럼 ============
private String pstnInfoId; // 위치 정보 ID

@ -0,0 +1,14 @@
package go.kr.project.crdn.crndRegistAndView.crdnPstnInfo.service;
import go.kr.project.crdn.crndRegistAndView.crdnPstnInfo.model.CrdnPstnInfoVO;
import java.util.List;
/**
*
*/
public interface CrdnPstnInfoService {
List<CrdnPstnInfoVO> selectPstnInfoList(CrdnPstnInfoVO vo);
int selectPstnInfoListTotalCount(CrdnPstnInfoVO vo);
int insertPstnInfo(CrdnPstnInfoVO vo);
}

@ -0,0 +1,38 @@
package go.kr.project.crdn.crndRegistAndView.crdnPstnInfo.service.impl;
import go.kr.project.crdn.crndRegistAndView.crdnPstnInfo.mapper.CrdnPstnInfoMapper;
import go.kr.project.crdn.crndRegistAndView.crdnPstnInfo.model.CrdnPstnInfoVO;
import go.kr.project.crdn.crndRegistAndView.crdnPstnInfo.service.CrdnPstnInfoService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.egovframe.rte.fdl.cmmn.EgovAbstractServiceImpl;
import org.springframework.stereotype.Service;
import java.util.List;
/**
*
* : - , .
*/
@Service
@RequiredArgsConstructor
@Slf4j
public class CrdnPstnInfoServiceImpl extends EgovAbstractServiceImpl implements CrdnPstnInfoService {
private final CrdnPstnInfoMapper mapper;
@Override
public List<CrdnPstnInfoVO> selectPstnInfoList(CrdnPstnInfoVO vo) {
return mapper.selectPstnInfoList(vo);
}
@Override
public int selectPstnInfoListTotalCount(CrdnPstnInfoVO vo) {
return mapper.selectPstnInfoListTotalCount(vo);
}
@Override
public int insertPstnInfo(CrdnPstnInfoVO vo) {
return mapper.insertPstnInfo(vo);
}
}

@ -1,28 +0,0 @@
package go.kr.project.crdn.crndRegistAndView.exmnrPop.service;
import go.kr.project.crdn.crndRegistAndView.exmnrPop.model.ExmnrPopVO;
import go.kr.project.crdn.crndRegistAndView.exmnrPop.model.ExmnrPopSearchVO;
import java.util.List;
/**
*
*/
public interface ExmnrPopService {
/**
* ()
* @param searchVO
* @return
*/
List<ExmnrPopVO> selectExmnrPopList(ExmnrPopSearchVO searchVO);
/**
*
* @param searchVO
* @return
*/
int selectExmnrPopListTotalCount(ExmnrPopSearchVO searchVO);
}

@ -1,23 +0,0 @@
package go.kr.project.crdn.crndRegistAndView.pstnInfo.mapper;
import go.kr.project.crdn.crndRegistAndView.pstnInfo.model.PstnInfoVO;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
/**
* MyBatis
* : tb_pstn_info CRUD / .
*/
@Mapper
public interface PstnInfoMapper {
/** 목록 조회 */
List<PstnInfoVO> selectPstnInfoList(PstnInfoVO vo);
/** 총 개수 */
int selectPstnInfoListTotalCount(PstnInfoVO vo);
/** 등록 */
int insertPstnInfo(PstnInfoVO vo);
}

@ -1,14 +0,0 @@
package go.kr.project.crdn.crndRegistAndView.pstnInfo.service;
import go.kr.project.crdn.crndRegistAndView.pstnInfo.model.PstnInfoVO;
import java.util.List;
/**
*
*/
public interface PstnInfoService {
List<PstnInfoVO> selectPstnInfoList(PstnInfoVO vo);
int selectPstnInfoListTotalCount(PstnInfoVO vo);
int insertPstnInfo(PstnInfoVO vo);
}

@ -1,38 +0,0 @@
package go.kr.project.crdn.crndRegistAndView.pstnInfo.service.impl;
import go.kr.project.crdn.crndRegistAndView.pstnInfo.mapper.PstnInfoMapper;
import go.kr.project.crdn.crndRegistAndView.pstnInfo.model.PstnInfoVO;
import go.kr.project.crdn.crndRegistAndView.pstnInfo.service.PstnInfoService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.egovframe.rte.fdl.cmmn.EgovAbstractServiceImpl;
import org.springframework.stereotype.Service;
import java.util.List;
/**
*
* : - , .
*/
@Service
@RequiredArgsConstructor
@Slf4j
public class PstnInfoServiceImpl extends EgovAbstractServiceImpl implements PstnInfoService {
private final PstnInfoMapper mapper;
@Override
public List<PstnInfoVO> selectPstnInfoList(PstnInfoVO vo) {
return mapper.selectPstnInfoList(vo);
}
@Override
public int selectPstnInfoListTotalCount(PstnInfoVO vo) {
return mapper.selectPstnInfoListTotalCount(vo);
}
@Override
public int insertPstnInfo(PstnInfoVO vo) {
return mapper.insertPstnInfo(vo);
}
}

@ -1,11 +1,11 @@
<?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.crdn.crndRegistAndView.exmnrPop.mapper.ExmnrPopMapper">
<mapper namespace="go.kr.project.crdn.crndRegistAndView.crdnExmnr.mapper.CrdnExmnrMapper">
<!-- 조사원 팝업 목록 조회 -->
<select id="selectExmnrPopList" parameterType="go.kr.project.crdn.crndRegistAndView.exmnrPop.model.ExmnrPopSearchVO"
resultType="go.kr.project.crdn.crndRegistAndView.exmnrPop.model.ExmnrPopVO">
<select id="selectExmnrPopList" parameterType="CrdnExmnrSearchVO"
resultType="CrdnExmnrVO">
SELECT
e.EXMNR_ID as exmnrId,
e.SGG_CD as sggCd,
@ -35,7 +35,7 @@
</select>
<!-- 조사원 팝업 목록 총 건수 조회 -->
<select id="selectExmnrPopListTotalCount" parameterType="go.kr.project.crdn.crndRegistAndView.exmnrPop.model.ExmnrPopSearchVO"
<select id="selectExmnrPopListTotalCount" parameterType="CrdnExmnrSearchVO"
resultType="int">
SELECT COUNT(*)
FROM tb_exmnr e
@ -53,7 +53,7 @@
<!-- 조사원 팝업 상세 조회 -->
<select id="selectExmnrPopDetail" parameterType="String"
resultType="go.kr.project.crdn.crndRegistAndView.exmnrPop.model.ExmnrPopVO">
resultType="CrdnExmnrVO">
SELECT
e.EXMNR_ID as exmnrId,
e.SGG_CD as sggCd,

@ -1,11 +1,11 @@
<?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.crdn.crndRegistAndView.pstnInfo.mapper.PstnInfoMapper">
<mapper namespace="go.kr.project.crdn.crndRegistAndView.crdnPstnInfo.mapper.CrdnPstnInfoMapper">
<!-- 위치정보 목록 조회 -->
<select id="selectPstnInfoList" parameterType="go.kr.project.crdn.crndRegistAndView.pstnInfo.model.PstnInfoVO"
resultType="go.kr.project.crdn.crndRegistAndView.pstnInfo.model.PstnInfoVO">
<select id="selectPstnInfoList" parameterType="CrdnPstnInfoVO"
resultType="CrdnPstnInfoVO">
/* PstnInfoMapper.selectPstnInfoList : 위치정보 목록 조회 */
SELECT
p.PSTN_INFO_ID,
@ -60,7 +60,7 @@
</select>
<!-- 위치정보 총 개수 조회 -->
<select id="selectPstnInfoListTotalCount" parameterType="go.kr.project.crdn.crndRegistAndView.pstnInfo.model.PstnInfoVO" resultType="int">
<select id="selectPstnInfoListTotalCount" parameterType="CrdnPstnInfoVO" resultType="int">
/* PstnInfoMapper.selectPstnInfoListTotalCount : 위치정보 총 개수 조회 */
SELECT COUNT(*)
FROM tb_pstn_info p
@ -74,7 +74,7 @@
</select>
<!-- 위치정보 등록 (시컨스 사용) -->
<insert id="insertPstnInfo" parameterType="go.kr.project.crdn.crndRegistAndView.pstnInfo.model.PstnInfoVO">
<insert id="insertPstnInfo" parameterType="CrdnPstnInfoVO">
/* PstnInfoMapper.insertPstnInfo : 위치정보 등록 */
INSERT INTO tb_pstn_info (
PSTN_INFO_ID,

@ -175,7 +175,7 @@
return {
api: {
readData: {
url: '<c:url value="/crdn/crndRegistAndView/exmnrPop/list.ajax"/>',
url: '<c:url value="/crdn/crndRegistAndView/crdnExmnr/list.ajax"/>',
method: 'POST',
contentType: 'application/x-www-form-urlencoded',
processData: true

@ -94,7 +94,7 @@
return {
api: {
readData: {
url: '<c:url value="/crdn/crndRegistAndView/pstnInfo/list.ajax"/>' ,
url: '<c:url value="/crdn/crndRegistAndView/crdnPstnInfo/list.ajax"/>' ,
method: 'POST',
contentType: 'application/x-www-form-urlencoded',
processData: true

@ -236,7 +236,7 @@
var formData = $('#pstnInfoForm').serialize();
$.ajax({
url: '<c:url value="/crdn/crndRegistAndView/pstnInfo/insert.ajax"/>',
url: '<c:url value="/crdn/crndRegistAndView/crdnPstnInfo/insert.ajax"/>',
type: 'POST',
data: formData,
success: function (res) {

@ -152,7 +152,7 @@
<!-- /Main body -->
<!-- 각 그리드별 개별 JSP 포함 -->
<%@ include file="pstnInfo/detailView-pstn.jsp" %>
<%@ include file="crdnPstnInfo/detailView-pstn.jsp" %>
<%@ include file="detailView-grid2.jsp" %>
<%@ include file="detailView-grid3.jsp" %>
<%@ include file="detailView-grid4.jsp" %>
@ -369,7 +369,7 @@
alert('단속 기본정보가 없습니다.');
return;
}
var url = '<c:url value="/crdn/crndRegistAndView/pstnInfo/popup.do"/>' + '?crdnYr=' + encodeURIComponent(crdnYr) + '&crdnNo=' + encodeURIComponent(crdnNo) + '&mode=C';
var url = '<c:url value="/crdn/crndRegistAndView/crdnPstnInfo/popup.do"/>' + '?crdnYr=' + encodeURIComponent(crdnYr) + '&crdnNo=' + encodeURIComponent(crdnNo) + '&mode=C';
var w = 1200, h = 800;
var left = Math.max(0, (screen.width - w) / 2);
var top = Math.max(0, (screen.height - h) / 2);

@ -188,7 +188,7 @@
* 조사원 선택 팝업 열기
*/
openExmnrPopup: function () {
var popupUrl = '<c:url value="/crdn/crndRegistAndView/exmnrPop/popup.do" />';
var popupUrl = '<c:url value="/crdn/crndRegistAndView/crdnExmnr/popup.do" />';
var popupName = 'exmnrPopup';
var popupOptions = 'width=900,height=700,scrollbars=yes,resizable=yes,left=' +
Math.round((screen.width - 900) / 2 + 200) + ',top=' +

Loading…
Cancel
Save