From 21a210300d1d29978b43b79fb3f0b2378e8535c8 Mon Sep 17 00:00:00 2001 From: mjkhan21 Date: Fri, 6 Oct 2023 17:58:38 +0900 Subject: [PATCH] =?UTF-8?q?=EC=8B=9C=EA=B5=B0=EA=B5=AC=20=EA=B4=80?= =?UTF-8?q?=EB=A6=AC,=20=EB=B6=80=EC=84=9C=20=EA=B4=80=EB=A6=AC=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/cokr/xit/base/user/Department.java | 118 ++++++++++++ .../cokr/xit/base/user/DepartmentQuery.java | 53 ++++++ src/main/java/cokr/xit/base/user/Sigungu.java | 172 ++++++++++++++++++ .../java/cokr/xit/base/user/SigunguQuery.java | 56 ++++++ .../base/user/{service => }/UserQuery.java | 2 +- .../xit/base/user/dao/DepartmentMapper.java | 118 ++++++++++++ .../cokr/xit/base/user/dao/SigunguMapper.java | 127 +++++++++++++ .../cokr/xit/base/user/dao/UserMapper.java | 2 +- .../base/user/service/DepartmentService.java | 50 +++++ .../xit/base/user/service/SigunguService.java | 49 +++++ .../xit/base/user/service/UserService.java | 1 + .../user/service/bean/DepartmentBean.java | 87 +++++++++ .../service/bean/DepartmentServiceBean.java | 50 +++++ .../base/user/service/bean/SigunguBean.java | 100 ++++++++++ .../user/service/bean/SigunguServiceBean.java | 50 +++++ .../xit/base/user/service/bean/UserBean.java | 2 +- .../user/service/bean/UserServiceBean.java | 2 +- .../base/user/web/DepartmentController.java | 104 +++++++++++ .../xit/base/user/web/SigunguController.java | 103 +++++++++++ .../xit/base/user/web/UserController.java | 2 +- 20 files changed, 1243 insertions(+), 5 deletions(-) create mode 100644 src/main/java/cokr/xit/base/user/Department.java create mode 100644 src/main/java/cokr/xit/base/user/DepartmentQuery.java create mode 100644 src/main/java/cokr/xit/base/user/Sigungu.java create mode 100644 src/main/java/cokr/xit/base/user/SigunguQuery.java rename src/main/java/cokr/xit/base/user/{service => }/UserQuery.java (94%) create mode 100644 src/main/java/cokr/xit/base/user/dao/DepartmentMapper.java create mode 100644 src/main/java/cokr/xit/base/user/dao/SigunguMapper.java create mode 100644 src/main/java/cokr/xit/base/user/service/DepartmentService.java create mode 100644 src/main/java/cokr/xit/base/user/service/SigunguService.java create mode 100644 src/main/java/cokr/xit/base/user/service/bean/DepartmentBean.java create mode 100644 src/main/java/cokr/xit/base/user/service/bean/DepartmentServiceBean.java create mode 100644 src/main/java/cokr/xit/base/user/service/bean/SigunguBean.java create mode 100644 src/main/java/cokr/xit/base/user/service/bean/SigunguServiceBean.java create mode 100644 src/main/java/cokr/xit/base/user/web/DepartmentController.java create mode 100644 src/main/java/cokr/xit/base/user/web/SigunguController.java diff --git a/src/main/java/cokr/xit/base/user/Department.java b/src/main/java/cokr/xit/base/user/Department.java new file mode 100644 index 0000000..1db85aa --- /dev/null +++ b/src/main/java/cokr/xit/base/user/Department.java @@ -0,0 +1,118 @@ +package cokr.xit.base.user; + +import cokr.xit.foundation.AbstractEntity; + +/** + * 부서 정보 + * @author mjkhan + */ +public class Department extends AbstractEntity { + /** 시군구 코드 */ + private String sggID; + /** 기관 코드 */ + private String instCode; + /** 부서 코드 */ + private String deptID; + /** 부서 명 */ + private String name; + /** 부서 전화번호 */ + private String telno; + /** 부서 팩스번호 */ + private String faxno; + + /** + * 시군구 코드을(를) 반환한다. + * @return 시군구 코드 + */ + public String getSggID() { + return sggID; + } + + /** + * 시군구 코드을(를) 설정한다. + * @param sggID 시군구 코드 + */ + public void setSggID(String sggID) { + this.sggID = sggID; + } + + /** + * 부서 코드을(를) 반환한다. + * @return 부서 코드 + */ + public String getDeptID() { + return deptID; + } + + /** + * 부서 코드을(를) 설정한다. + * @param deptID 부서 코드 + */ + public void setDeptID(String deptID) { + this.deptID = deptID; + } + + /** + * 기관 코드을(를) 반환한다. + * @return 기관 코드 + */ + public String getInstCode() { + return instCode; + } + + /** + * 기관 코드을(를) 설정한다. + * @param instCode 기관 코드 + */ + public void setInstCode(String instCode) { + this.instCode = instCode; + } + + /** + * 부서 명을(를) 반환한다. + * @return 부서 명 + */ + public String getName() { + return name; + } + + /** + * 부서 명을(를) 설정한다. + * @param name 부서 명 + */ + public void setName(String name) { + this.name = name; + } + + /** + * 부서 전화번호을(를) 반환한다. + * @return 부서 전화번호 + */ + public String getTelno() { + return telno; + } + + /** + * 부서 전화번호을(를) 설정한다. + * @param telno 부서 전화번호 + */ + public void setTelno(String telno) { + this.telno = telno; + } + + /** + * 부서 팩스번호을(를) 반환한다. + * @return 부서 팩스번호 + */ + public String getFaxno() { + return faxno; + } + + /** + * 부서 팩스번호을(를) 설정한다. + * @param faxno 부서 팩스번호 + */ + public void setFaxno(String faxno) { + this.faxno = faxno; + } +} \ No newline at end of file diff --git a/src/main/java/cokr/xit/base/user/DepartmentQuery.java b/src/main/java/cokr/xit/base/user/DepartmentQuery.java new file mode 100644 index 0000000..862f813 --- /dev/null +++ b/src/main/java/cokr/xit/base/user/DepartmentQuery.java @@ -0,0 +1,53 @@ +package cokr.xit.base.user; + +import cokr.xit.foundation.component.QueryRequest; + +/**부서 정보 정보 조회 요청 + * + *

상세 설명: + * + *

+ * ============ 변경 이력 ============
+ * 2023-10-06	mjkhan 최초 작성
+ * ================================
+ * 
+ */ +public class DepartmentQuery extends QueryRequest { + private static final long serialVersionUID = 1L; + /** 시군구 코드 */ + private String sggID; + /** 부서 코드 */ + private String[] deptIDs; + + /**시군구 코드를 반환한다. + * @return 시군구 코드 + */ + public String getSggID() { + return sggID; + } + + /**시군구 코드를 설정한다. + * @param sggID 시군구 코드 + * @return 현재 DepartmentQuery + */ + public DepartmentQuery setSggID(String sggID) { + this.sggID = sggID; + return this; + } + + /**부서코드를 반환한다. + * @return 부서코드 + */ + public String[] getDeptIDs() { + return ifEmpty(deptIDs, () -> null); + } + + /**부서코드를 설정한다. + * @param deptIDs 부서코드 + * @return 현재 DepartmentQuery + */ + public DepartmentQuery setDeptIDs(String... deptIDs) { + this.deptIDs = deptIDs; + return this; + } +} \ No newline at end of file diff --git a/src/main/java/cokr/xit/base/user/Sigungu.java b/src/main/java/cokr/xit/base/user/Sigungu.java new file mode 100644 index 0000000..ae9514e --- /dev/null +++ b/src/main/java/cokr/xit/base/user/Sigungu.java @@ -0,0 +1,172 @@ +package cokr.xit.base.user; + +import cokr.xit.foundation.AbstractEntity; + +/** + * 시군구 + * @author mjkhan + */ +public class Sigungu extends AbstractEntity { + /** 시군구 코드 */ + private String sggID; + /** 시군구 이름 */ + private String sggName; + /** 기관 코드 */ + private String instCode; + /** 기관 명 */ + private String instName; + /** 기관 주소 */ + private String instAddress; + /** 기관 상세주소 */ + private String instDetailAddress; + /** 기관 우편번호 */ + private String instituteZipCode; + /** 직인 파일 경로 */ + private String officialSealFilepath; + /** 직인 파일 명 */ + private String officialSealFilename; + + /** + * 시군구 코드을(를) 반환한다. + * @return 시군구 코드 + */ + public String getSggID() { + return sggID; + } + + /** + * 시군구 코드을(를) 설정한다. + * @param id 시군구 코드 + */ + public void setSggID(String id) { + this.sggID = id; + } + + /** + * 시군구 이름을(를) 반환한다. + * @return 시군구 이름 + */ + public String getSggName() { + return sggName; + } + + /** + * 시군구 이름을(를) 설정한다. + * @param name 시군구 이름 + */ + public void setSggName(String name) { + this.sggName = name; + } + + /** + * 기관 코드을(를) 반환한다. + * @return 기관 코드 + */ + public String getInstCode() { + return instCode; + } + + /** + * 기관 코드을(를) 설정한다. + * @param instituteCode 기관 코드 + */ + public void setInstCode(String instituteCode) { + this.instCode = instituteCode; + } + + /** + * 기관 명을(를) 반환한다. + * @return 기관 명 + */ + public String getInstName() { + return instName; + } + + /** + * 기관 명을(를) 설정한다. + * @param instituteName 기관 명 + */ + public void setInstName(String instituteName) { + this.instName = instituteName; + } + + /** + * 기관 주소을(를) 반환한다. + * @return 기관 주소 + */ + public String getInstAddress() { + return instAddress; + } + + /** + * 기관 주소을(를) 설정한다. + * @param address 기관 주소 + */ + public void setInstAddress(String address) { + this.instAddress = address; + } + + /** + * 기관 상세주소을(를) 반환한다. + * @return 기관 상세주소 + */ + public String getInstDetailAddress() { + return instDetailAddress; + } + + /** + * 기관 상세주소을(를) 설정한다. + * @param detailAddress 기관 상세주소 + */ + public void setInstDetailAddress(String detailAddress) { + this.instDetailAddress = detailAddress; + } + + /** + * 기관 우편번호을(를) 반환한다. + * @return 기관 우편번호 + */ + public String getInstituteZipCode() { + return instituteZipCode; + } + + /** + * 기관 우편번호을(를) 설정한다. + * @param zipCode 기관 우편번호 + */ + public void setInstituteZipCode(String zipCode) { + this.instituteZipCode = zipCode; + } + + /** + * 직인 파일 경로을(를) 반환한다. + * @return 직인 파일 경로 + */ + public String getOfficialSealFilepath() { + return officialSealFilepath; + } + + /** + * 직인 파일 경로을(를) 설정한다. + * @param filepath 직인 파일 경로 + */ + public void setOfficialSealFilepath(String filepath) { + this.officialSealFilepath = filepath; + } + + /** + * 직인 파일 명을(를) 반환한다. + * @return 직인 파일 명 + */ + public String getOfficialSealFilename() { + return officialSealFilename; + } + + /** + * 직인 파일 명을(를) 설정한다. + * @param filename 직인 파일 명 + */ + public void setOfficialSealFilename(String filename) { + this.officialSealFilename = filename; + } +} diff --git a/src/main/java/cokr/xit/base/user/SigunguQuery.java b/src/main/java/cokr/xit/base/user/SigunguQuery.java new file mode 100644 index 0000000..ebdf48a --- /dev/null +++ b/src/main/java/cokr/xit/base/user/SigunguQuery.java @@ -0,0 +1,56 @@ +package cokr.xit.base.user; + +import cokr.xit.foundation.component.QueryRequest; + +/**시군구 정보 조회 요청 + * + *

상세 설명: + * + *

+ * ============ 변경 이력 ============
+ * 2023-10-06	mjkhan 최초 작성
+ * ================================
+ * 
+ */ +public class SigunguQuery extends QueryRequest { + private static final long serialVersionUID = 1L; + + /** 시군구 코드 */ + private String[] sggIDs; + /** 기관 코드 */ + private String[] instCodes; + + + /**시군구 코드를 반환한다. + * @return 시군구 코드 + */ + public String[] getSggIDs() { + return ifEmpty(sggIDs, () -> null); + } + + /**시군구 코드를 설정한다. + * @param sggIDs 시군구 코드 + * @return 현재 SigunguQuery + */ + public SigunguQuery setSggIDs(String... sggIDs) { + this.sggIDs = sggIDs; + return this; + } + + /**기관 코드를 반환한다. + * @return 기관 코드 + */ + public String[] getInstCodes() { + return ifEmpty(instCodes, () -> null); + } + + /**기관 코드를 설정한다. + * @param instituteCodes 기관 코드 + * @return 현재 SigunguQuery + */ + public SigunguQuery setInstCodes(String[] instituteCodes) { + this.instCodes = instituteCodes; + return this; + } + +} \ No newline at end of file diff --git a/src/main/java/cokr/xit/base/user/service/UserQuery.java b/src/main/java/cokr/xit/base/user/UserQuery.java similarity index 94% rename from src/main/java/cokr/xit/base/user/service/UserQuery.java rename to src/main/java/cokr/xit/base/user/UserQuery.java index 79fee21..ec7cd4b 100644 --- a/src/main/java/cokr/xit/base/user/service/UserQuery.java +++ b/src/main/java/cokr/xit/base/user/UserQuery.java @@ -1,4 +1,4 @@ -package cokr.xit.base.user.service; +package cokr.xit.base.user; import cokr.xit.foundation.component.QueryRequest; diff --git a/src/main/java/cokr/xit/base/user/dao/DepartmentMapper.java b/src/main/java/cokr/xit/base/user/dao/DepartmentMapper.java new file mode 100644 index 0000000..15975aa --- /dev/null +++ b/src/main/java/cokr/xit/base/user/dao/DepartmentMapper.java @@ -0,0 +1,118 @@ +package cokr.xit.base.user.dao; + +import java.util.List; +import java.util.Map; + +import org.egovframe.rte.psl.dataaccess.mapper.Mapper; + +import cokr.xit.base.user.Department; +import cokr.xit.base.user.DepartmentQuery; +import cokr.xit.foundation.component.AbstractMapper; +import cokr.xit.foundation.data.DataObject; + +/** 부서 정보 정보 DAO + * + *

상세 설명: + * + *

+ * ============ 변경 이력 ============
+ * 2023-10-06	mjkhan 최초 작성
+ * ================================
+ * 
+ */ +@Mapper("departmentMapper") +public interface DepartmentMapper extends AbstractMapper { + /**지정한 조건에 따라 부서 정보 목록을 조회하여 반환한다.
+ * @param req 부서 정보 조회 조건 + * @return 부서 정보 목록 + */ + List selectDepartmentList(DepartmentQuery req); + + /**지정한 조건에 따라 부서 정보 객체들을 반환한다. + * @param req 부서 정보 조회 조건 + * @return 부서 정보 객체 목록 + */ + List selectDepartments(DepartmentQuery req); + + /**지정한 조건에 따라 부서 정보 객체들을 반환한다. + * @param sggID 시군구 코드 + * @param deptIDs 부서 코드 + * @return 부서 정보 객체 목록 + */ + default List selectDepartments(String sggID, String... deptIDs) { + return selectDepartments(new DepartmentQuery() + .setSggID(sggID) + .setDeptIDs(deptIDs) + ); + } + + /**지정한 조건에 따라 부서 정보 객체들을 반환한다. + * @param sggID 시군구 코드 + * @param deptID 부서 코드 + * @return 부서 정보 객체 목록 + */ + default Department selectDepartment(String sggID, String deptID) { + List list = selectDepartments(sggID, deptID); + return !list.isEmpty() ? list.get(0) : null; + } + + /**부서 정보 정보를 등록한다. + * @param params 파라미터 + *
  • "department" - 부서 정보
  • + *
  • "currentUser" - 현재 접속한 사용자
  • + *
+ * @return 저장된 정보수 + */ + int insertDepartment(Map params); + + /**부서 정보 정보를 등록한다. + * @param department 부서 정보 + * @return 저장 여부 + *
  • 저장됐으면 true
  • + *
  • 그렇지 않으면 false
  • + *
+ */ + default boolean insert(Department department) { + return department != null && insertDepartment(params().set("department", department)) == 1; + } + + /**부서 정보 정보를 수정한다. + * @param params 파라미터 + *
  • "department" - 부서 정보
  • + *
  • "currentUser" - 현재 접속한 사용자
  • + *
+ * @return 저장된 정보수 + */ + int updateDepartment(Map params); + + /**부서 정보 정보를 수정한다. + * @param department 부서 정보 + * @return 저장 여부 + *
  • 저장됐으면 true
  • + *
  • 그렇지 않으면 false
  • + *
+ */ + default boolean update(Department department) { + return department != null && updateDepartment(params().set("department", department)) == 1; + } + + /**지정한 부서 정보을 삭제한다. + * @param params 파라미터 + *
  • "department" - 부서 정보
  • + *
  • "currentUser" - 현재 접속한 사용자
  • + *
+ * @return 저장된 정보수 + */ + int deleteDepartment(Map params); + + /**부서 정보 정보를 삭제한다. + * @param department 부서 정보 + * @return 저장 여부 + *
  • 저장됐으면 true
  • + *
  • 그렇지 않으면 false
  • + *
+ */ + default int delete(String sggID, String... deptIDs) { + return deleteDepartment(params().set("sggID", sggID).set("deptIDs", deptIDs)); + } +} \ No newline at end of file diff --git a/src/main/java/cokr/xit/base/user/dao/SigunguMapper.java b/src/main/java/cokr/xit/base/user/dao/SigunguMapper.java new file mode 100644 index 0000000..0ccd022 --- /dev/null +++ b/src/main/java/cokr/xit/base/user/dao/SigunguMapper.java @@ -0,0 +1,127 @@ +package cokr.xit.base.user.dao; + +import java.util.List; +import java.util.Map; + +import org.egovframe.rte.psl.dataaccess.mapper.Mapper; + +import cokr.xit.base.user.Sigungu; +import cokr.xit.base.user.SigunguQuery; +import cokr.xit.foundation.component.AbstractMapper; +import cokr.xit.foundation.data.DataObject; + +/** 시군구 정보 DAO + * + *

상세 설명: + * + *

+ * ============ 변경 이력 ============
+ * 2023-10-06	mjkhan 최초 작성
+ * ================================
+ * 
+ */ +@Mapper("sigunguMapper") +public interface SigunguMapper extends AbstractMapper { + /**지정한 조건에 따라 시군구 목록을 조회하여 반환한다.
+ * @param req 시군구 조회 조건 + * @return 시군구 목록 + */ + List selectSigunguList(SigunguQuery req); + + /**지정한 조건에 따라 시군구 객체들을 반환한다. + * @param req 시군구 조회 조건 + * @return 시군구 객체 목록 + */ + List selectSigungus(SigunguQuery req); + + /**지정한 아이디의 시군구 객체들을 반환한다. + * @param sggIDs 시군구 아이디 + * @return 시군구 객체 목록 + */ + default List selectSigungus(String... sggIDs) { + return selectSigungus(new SigunguQuery().setSggIDs(sggIDs)); + } + + /**지정한 아이디의 시군구 객체를 반환한다. + * @param sggID 시군구 아이디 + * @return 시군구 객체 + */ + default Sigungu selectSigungu(String sggID) { + List list = selectSigungus(sggID); + return !list.isEmpty() ? list.get(0) : null; + } + + /**지정한 기관 코드의 시군구 객체들을 반환한다. + * @param instCodes 기관 코드 + * @return 시군구 객체 목록 + */ + default List selectInstitutes(String... instCodes) { + return selectSigungus(new SigunguQuery().setInstCodes(instCodes)); + } + + /**지정한 기관 코드의 시군구 객체를 반환한다. + * @param instCodes 기관 코드 + * @return 시군구 객체 + */ + default Sigungu selectInstitute(String instCode) { + List list = selectInstitutes(instCode); + return !list.isEmpty() ? list.get(0) : null; + } + + /**시군구 정보를 등록한다. + * @param params 파라미터 + *
  • "sigungu" - 시군구
  • + *
  • "currentUser" - 현재 접속한 사용자
  • + *
+ * @return 저장된 정보수 + */ + int insertSigungu(Map params); + + /**시군구 정보를 등록한다. + * @param sigungu 시군구 + * @return 저장 여부 + *
  • 저장됐으면 true
  • + *
  • 그렇지 않으면 false
  • + *
+ */ + default boolean insert(Sigungu sigungu) { + return sigungu != null && insertSigungu(params().set("sigungu", sigungu)) == 1; + } + + /**시군구 정보를 수정한다. + * @param params 파라미터 + *
  • "sigungu" - 시군구
  • + *
  • "currentUser" - 현재 접속한 사용자
  • + *
+ * @return 저장된 정보수 + */ + int updateSigungu(Map params); + + /**시군구 정보를 수정한다. + * @param sigungu 시군구 + * @return 저장 여부 + *
  • 저장됐으면 true
  • + *
  • 그렇지 않으면 false
  • + *
+ */ + default boolean update(Sigungu sigungu) { + return sigungu != null && updateSigungu(params().set("sigungu", sigungu)) == 1; + } + + /**지정한 시군구을 삭제한다. + * @param params 파라미터 + *
  • "sggIDs" - 시군구 아이디
  • + *
  • "currentUser" - 현재 접속한 사용자
  • + *
+ * @return 저장된 정보수 + */ + int deleteSigungu(Map params); + + /**시군구 정보를 삭제한다. + * @param sggIDs 시군구 아이디 + * @return 저장된 정보수 + */ + default int delete(String... sggIDs) { + return !isEmpty(sggIDs) ? deleteSigungu(params().set("sggIDs", sggIDs)) : 0; + } +} \ No newline at end of file diff --git a/src/main/java/cokr/xit/base/user/dao/UserMapper.java b/src/main/java/cokr/xit/base/user/dao/UserMapper.java index 5cb0024..eb41d36 100644 --- a/src/main/java/cokr/xit/base/user/dao/UserMapper.java +++ b/src/main/java/cokr/xit/base/user/dao/UserMapper.java @@ -7,7 +7,7 @@ import java.util.stream.Stream; import org.egovframe.rte.psl.dataaccess.mapper.Mapper; -import cokr.xit.base.user.service.UserQuery; +import cokr.xit.base.user.UserQuery; import cokr.xit.foundation.User; import cokr.xit.foundation.component.AbstractMapper; import cokr.xit.foundation.data.DataObject; diff --git a/src/main/java/cokr/xit/base/user/service/DepartmentService.java b/src/main/java/cokr/xit/base/user/service/DepartmentService.java new file mode 100644 index 0000000..9b72d12 --- /dev/null +++ b/src/main/java/cokr/xit/base/user/service/DepartmentService.java @@ -0,0 +1,50 @@ +package cokr.xit.base.user.service; + +import java.util.List; + +import cokr.xit.base.user.Department; +import cokr.xit.base.user.DepartmentQuery; +import cokr.xit.foundation.data.DataObject; + +/**부서 정보 관리 서비스 인터페이스. + * + *

상세 설명: + * + *

+ * ============ 변경 이력 ============
+ * 2023-10-06	mjkhan 최초 작성
+ * ================================
+ * 
+ */ +public interface DepartmentService { + /**지정한 조건에 따라 부서 정보 목록을 조회하여 반환한다. + * @param req 부서 정보 조회 조건 + * @return 부서 정보 목록 + */ + List getDepartmentList(DepartmentQuery req); + + /**부서 정보 정보를 등록한다. + * @param department 부서 정보 + * @return 저장 여부 + *
  • 저장됐으면 true
  • + *
  • 그렇지 않으면 false
  • + *
+ */ + boolean create(Department department); + + /**부서 정보 정보를 수정한다. + * @param department 부서 정보 + * @return 저장 여부 + *
  • 저장됐으면 true
  • + *
  • 그렇지 않으면 false
  • + *
+ */ + boolean update(Department department); + + /**부서 정보 정보를 삭제한다. + * @param sggID 시군구 코드 + * @param deptIDs 부서 코드 + * @return 저장된 정보수 + */ + int remove(String sggID, String... deptIDs); +} \ No newline at end of file diff --git a/src/main/java/cokr/xit/base/user/service/SigunguService.java b/src/main/java/cokr/xit/base/user/service/SigunguService.java new file mode 100644 index 0000000..2f21a2f --- /dev/null +++ b/src/main/java/cokr/xit/base/user/service/SigunguService.java @@ -0,0 +1,49 @@ +package cokr.xit.base.user.service; + +import java.util.List; + +import cokr.xit.base.user.Sigungu; +import cokr.xit.base.user.SigunguQuery; +import cokr.xit.foundation.data.DataObject; + +/**시군구 관리 서비스 인터페이스. + * + *

상세 설명: + * + *

+ * ============ 변경 이력 ============
+ * 2023-10-06	mjkhan 최초 작성
+ * ================================
+ * 
+ */ +public interface SigunguService { + /**지정한 조건에 따라 시군구 목록을 조회하여 반환한다. + * @param req 시군구 조회 조건 + * @return 시군구 목록 + */ + List getSigunguList(SigunguQuery req); + + /**시군구 정보를 등록한다. + * @param sigungu 시군구 + * @return 저장 여부 + *
  • 저장됐으면 true
  • + *
  • 그렇지 않으면 false
  • + *
+ */ + boolean create(Sigungu sigungu); + + /**시군구 정보를 수정한다. + * @param sigungu 시군구 + * @return 저장 여부 + *
  • 저장됐으면 true
  • + *
  • 그렇지 않으면 false
  • + *
+ */ + boolean update(Sigungu sigungu); + + /**시군구 정보를 삭제한다. + * @param sggIDs 시군구 아이디 + * @return 저장된 정보수 + */ + int remove(String... sggIDs); +} \ No newline at end of file diff --git a/src/main/java/cokr/xit/base/user/service/UserService.java b/src/main/java/cokr/xit/base/user/service/UserService.java index 7de9e04..720d009 100644 --- a/src/main/java/cokr/xit/base/user/service/UserService.java +++ b/src/main/java/cokr/xit/base/user/service/UserService.java @@ -2,6 +2,7 @@ package cokr.xit.base.user.service; import java.util.List; +import cokr.xit.base.user.UserQuery; import cokr.xit.foundation.User; import cokr.xit.foundation.data.DataObject; diff --git a/src/main/java/cokr/xit/base/user/service/bean/DepartmentBean.java b/src/main/java/cokr/xit/base/user/service/bean/DepartmentBean.java new file mode 100644 index 0000000..2439703 --- /dev/null +++ b/src/main/java/cokr/xit/base/user/service/bean/DepartmentBean.java @@ -0,0 +1,87 @@ +package cokr.xit.base.user.service.bean; + +import java.util.List; + +import javax.annotation.Resource; + +import org.springframework.stereotype.Component; + +import cokr.xit.base.user.Department; +import cokr.xit.base.user.DepartmentQuery; +import cokr.xit.base.user.dao.DepartmentMapper; +import cokr.xit.foundation.AbstractComponent; +import cokr.xit.foundation.data.DataObject; + +/**부서 정보 정보 관리 Bean + * + *

상세 설명: + * + *

+ * ============ 변경 이력 ============
+ * 2023-10-06	mjkhan 최초 작성
+ * ================================
+ * 
+ */ +@Component("departmentBean") +public class DepartmentBean extends AbstractComponent { + /** 부서 정보 정보 DAO */ + @Resource(name = "departmentMapper") + private DepartmentMapper departmentMapper; + + /**지정한 조건에 따라 부서 정보 목록을 조회하여 반환한다. + * @param req 부서 정보 조회 조건 + * @return 부서 정보 목록 + */ + public List getDepartmentList(DepartmentQuery req) { + return departmentMapper.selectDepartmentList(req); + } + + /**지정한 조건에 따라 부서 정보 객체들을 반환한다. + * @param sggID 시군구 코드 + * @param deptIDs 부서 코드 + * @return 부서 정보 객체 목록 + */ + public List getDepartments(String sggID, String... deptIDs) { + return departmentMapper.selectDepartments(sggID, deptIDs); + } + + /**지정한 조건에 따라 부서 정보 객체를 반환한다. + * @param sggID 시군구 코드 + * @param deptID 부서 코드 + * @return 부서 정보 객체 + */ + public Department getDepartment(String sggID, String deptID) { + return departmentMapper.selectDepartment(sggID, deptID); + } + + /**부서 정보 정보를 등록한다. + * @param department 부서 정보 + * @return 저장 여부 + *
  • 저장됐으면 true
  • + *
  • 그렇지 않으면 false
  • + *
+ */ + public boolean create(Department department) { + return departmentMapper.insert(department); + } + + /**부서 정보 정보를 수정한다. + * @param department 부서 정보 + * @return 저장 여부 + *
  • 저장됐으면 true
  • + *
  • 그렇지 않으면 false
  • + *
+ */ + public boolean update(Department department) { + return departmentMapper.update(department); + } + + /**부서 정보 정보를 삭제한다. + * @param sggID 시군구 코드 + * @param deptIDs 부서 코드 + * @return 저장된 정보수 + */ + public int remove(String sggID, String... deptIDs) { + return departmentMapper.delete(sggID, deptIDs); + } +} \ No newline at end of file diff --git a/src/main/java/cokr/xit/base/user/service/bean/DepartmentServiceBean.java b/src/main/java/cokr/xit/base/user/service/bean/DepartmentServiceBean.java new file mode 100644 index 0000000..3ffe111 --- /dev/null +++ b/src/main/java/cokr/xit/base/user/service/bean/DepartmentServiceBean.java @@ -0,0 +1,50 @@ +package cokr.xit.base.user.service.bean; + +import java.util.List; + +import javax.annotation.Resource; + +import org.springframework.stereotype.Service; + +import cokr.xit.base.user.Department; +import cokr.xit.base.user.DepartmentQuery; +import cokr.xit.base.user.service.DepartmentService; +import cokr.xit.foundation.component.AbstractServiceBean; +import cokr.xit.foundation.data.DataObject; + +/**부서 정보 서비스 구현체. + * + *

상세 설명: + * + *

+ * ============ 변경 이력 ============
+ * 2023-10-06	mjkhan 최초 작성
+ * ================================
+ * 
+ */ +@Service("departmentService") +public class DepartmentServiceBean extends AbstractServiceBean implements DepartmentService { + /** 부서 정보 정보 Bean */ + @Resource(name = "departmentBean") + private DepartmentBean departmentBean; + + @Override + public List getDepartmentList(DepartmentQuery req) { + return departmentBean.getDepartmentList(req); + } + + @Override + public boolean create(Department department) { + return departmentBean.create(department); + } + + @Override + public boolean update(Department department) { + return departmentBean.update(department); + } + + @Override + public int remove(String sggID, String... deptIDs) { + return departmentBean.remove(sggID, deptIDs); + } +} \ No newline at end of file diff --git a/src/main/java/cokr/xit/base/user/service/bean/SigunguBean.java b/src/main/java/cokr/xit/base/user/service/bean/SigunguBean.java new file mode 100644 index 0000000..64d6bf5 --- /dev/null +++ b/src/main/java/cokr/xit/base/user/service/bean/SigunguBean.java @@ -0,0 +1,100 @@ +package cokr.xit.base.user.service.bean; + +import java.util.List; + +import javax.annotation.Resource; + +import org.springframework.stereotype.Component; + +import cokr.xit.base.user.Sigungu; +import cokr.xit.base.user.SigunguQuery; +import cokr.xit.base.user.dao.SigunguMapper; +import cokr.xit.foundation.AbstractComponent; +import cokr.xit.foundation.data.DataObject; + +/**시군구 정보 관리 Bean + * + *

상세 설명: + * + *

+ * ============ 변경 이력 ============
+ * 2023-10-06	mjkhan 최초 작성
+ * ================================
+ * 
+ */ +@Component("sigunguBean") +public class SigunguBean extends AbstractComponent { + /** 시군구 정보 DAO */ + @Resource(name = "sigunguMapper") + private SigunguMapper sigunguMapper; + + /**지정한 조건에 따라 시군구 목록을 조회하여 반환한다. + * @param req 시군구 조회 조건 + * @return 시군구 목록 + */ + public List getSigunguList(SigunguQuery req) { + return sigunguMapper.selectSigunguList(req); + } + + /**지정한 아이디의 따라 시군구 객체들을 반환한다. + * @param sggIDs 시군구 코드 + * @return 시군구 객체 목록 + */ + public List getSigungus(String... sggIDs) { + return sigunguMapper.selectSigungus(sggIDs); + } + + /**지정한 아이디의 시군구 객체를 반환한다. + * @param sggID 시군구 조회 조건 + * @return 시군구 객체 + */ + public Sigungu getSigungu(String sggID) { + return sigunguMapper.selectSigungu(sggID); + } + + /**지정한 기관코드의 시군구 객체들을 반환한다. + * @param instCodes 기관 코드 + * @return 시군구 객체 목록 + */ + public List getInstitutes(String... instCodes) { + return sigunguMapper.selectInstitutes(instCodes); + } + + /**지정한 기관 코드의 시군구 객체를 반환한다. + * @param instCode 기관 코드 + * @return 시군구 객체 + */ + public Sigungu getInstitute(String instCode) { + return sigunguMapper.selectInstitute(instCode); + } + + /**시군구 정보를 등록한다. + * @param sigungu 시군구 + * @return 저장 여부 + *
  • 저장됐으면 true
  • + *
  • 그렇지 않으면 false
  • + *
+ */ + public boolean create(Sigungu sigungu) { + return sigunguMapper.insert(sigungu); + } + + /**시군구 정보를 수정한다. + * @param sigungu 시군구 + * @return 저장 여부 + *
  • 저장됐으면 true
  • + *
  • 그렇지 않으면 false
  • + *
+ */ + public boolean update(Sigungu sigungu) { + return sigunguMapper.update(sigungu); + } + + /**시군구 정보를 삭제한다. + * @param sggIDs 시군구 아이디 + * @return 저장된 정보수 + */ + public int remove(String... sggIDs) { + return sigunguMapper.delete(sggIDs); + } +} \ No newline at end of file diff --git a/src/main/java/cokr/xit/base/user/service/bean/SigunguServiceBean.java b/src/main/java/cokr/xit/base/user/service/bean/SigunguServiceBean.java new file mode 100644 index 0000000..ae7864c --- /dev/null +++ b/src/main/java/cokr/xit/base/user/service/bean/SigunguServiceBean.java @@ -0,0 +1,50 @@ +package cokr.xit.base.user.service.bean; + +import java.util.List; + +import javax.annotation.Resource; + +import org.springframework.stereotype.Service; + +import cokr.xit.base.user.Sigungu; +import cokr.xit.base.user.SigunguQuery; +import cokr.xit.base.user.service.SigunguService; +import cokr.xit.foundation.component.AbstractServiceBean; +import cokr.xit.foundation.data.DataObject; + +/**시군구 서비스 구현체. + * + *

상세 설명: + * + *

+ * ============ 변경 이력 ============
+ * 2023-10-06	mjkhan 최초 작성
+ * ================================
+ * 
+ */ +@Service("sigunguService") +public class SigunguServiceBean extends AbstractServiceBean implements SigunguService { + /** 시군구 정보 Bean */ + @Resource(name = "sigunguBean") + private SigunguBean sigunguBean; + + @Override + public List getSigunguList(SigunguQuery req) { + return sigunguBean.getSigunguList(req); + } + + @Override + public boolean create(Sigungu sigungu) { + return sigunguBean.create(sigungu); + } + + @Override + public boolean update(Sigungu sigungu) { + return sigunguBean.update(sigungu); + } + + @Override + public int remove(String... sggIDs) { + return sigunguBean.remove(sggIDs); + } +} \ No newline at end of file diff --git a/src/main/java/cokr/xit/base/user/service/bean/UserBean.java b/src/main/java/cokr/xit/base/user/service/bean/UserBean.java index 7994297..fab7b87 100644 --- a/src/main/java/cokr/xit/base/user/service/bean/UserBean.java +++ b/src/main/java/cokr/xit/base/user/service/bean/UserBean.java @@ -6,8 +6,8 @@ import javax.annotation.Resource; import org.springframework.stereotype.Component; +import cokr.xit.base.user.UserQuery; import cokr.xit.base.user.dao.UserMapper; -import cokr.xit.base.user.service.UserQuery; import cokr.xit.foundation.AbstractComponent; import cokr.xit.foundation.User; import cokr.xit.foundation.data.DataObject; diff --git a/src/main/java/cokr/xit/base/user/service/bean/UserServiceBean.java b/src/main/java/cokr/xit/base/user/service/bean/UserServiceBean.java index fc9ebb6..0c0f94c 100644 --- a/src/main/java/cokr/xit/base/user/service/bean/UserServiceBean.java +++ b/src/main/java/cokr/xit/base/user/service/bean/UserServiceBean.java @@ -7,7 +7,7 @@ import javax.annotation.Resource; import org.springframework.stereotype.Service; import cokr.xit.base.user.GenericUser; -import cokr.xit.base.user.service.UserQuery; +import cokr.xit.base.user.UserQuery; import cokr.xit.base.user.service.UserService; import cokr.xit.foundation.User; import cokr.xit.foundation.component.AbstractServiceBean; diff --git a/src/main/java/cokr/xit/base/user/web/DepartmentController.java b/src/main/java/cokr/xit/base/user/web/DepartmentController.java new file mode 100644 index 0000000..eff200d --- /dev/null +++ b/src/main/java/cokr/xit/base/user/web/DepartmentController.java @@ -0,0 +1,104 @@ +package cokr.xit.base.user.web; + +import java.util.List; + +import javax.annotation.Resource; + +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.servlet.ModelAndView; + +import cokr.xit.base.user.Department; +import cokr.xit.base.user.DepartmentQuery; +import cokr.xit.base.user.service.DepartmentService; +import cokr.xit.foundation.web.AbstractController; + +/**부서 정보 서비스의 웹 컨트롤러 + * + *

상세 설명: + * + *

+ * ============ 변경 이력 ============
+ * 2023-10-06	mjkhan 최초 작성
+ * ================================
+ * 
+ */ +@RequestMapping(name = "부서 정보", value = "/department") +public class DepartmentController extends AbstractController { + /**부서 정보 서비스*/ + @Resource(name = "departmentService") + private DepartmentService departmentService; + + /**부서 정보 관리 메인화면(department/department-main)을 연다. + * 조건없는 {@link #getDepartmentList(DepartmentQuery) 부서 정보 조회 결과}를 포함시킨다. + * @return /department/department-main + */ + @RequestMapping(name = "부서 정보 메인", value = "/main.do") + public ModelAndView main() { + ModelAndView mav = getDepartmentList(new DepartmentQuery().setPageNum(1)); + mav.setViewName("/department/department-main"); + return mav.addObject("departmentList", toJson(mav.getModel().get("departmentList"))); + } + + /**부서 정보 목록을 조회하여 반환한다.
+ * {@link DepartmentService#getDepartmentList(DepartmentQuery)} 참고 + * @param req 부서 정보 조회 조건 + * @return jsonView + *
 {
+	 *     "departmentList": [부서 정보 목록]
+	 *     "departmentStart": 부서 정보 목록 시작 인덱스
+	 *     "departmentFetch": 한 번에 가져오는 부서 정보 목록 수
+	 *     "departmentTotal": 조회 결과 찾은 전체 부서 정보 수
+	 * }
+ */ + @RequestMapping(name = "부서 정보 조회", value = "/list.do") + public ModelAndView getDepartmentList(DepartmentQuery req) { + List result = departmentService.getDepartmentList(setFetchSize(req)); + return setCollectionInfo(new ModelAndView("jsonView"), result, "department"); + } + + /**부서 정보를 등록한다. + * @param department 부서 정보 정보 + * @return jsonView + *
 {
+	 *     "saved": 등록되었으면 true, 그렇지 않으면 false
+	 * }
+ */ + @PostMapping(name = "부서 정보 등록", value = "/create.do") + public ModelAndView create(Department department) { + boolean saved = departmentService.create(department); + return new ModelAndView("jsonView") + .addObject("saved", saved); + } + + /**부서 정보 정보를 수정한다. + * @param department 부서 정보 정보 + * @return jsonView + *
 {
+	 *     "saved": 수정되었으면 true, 그렇지 않으면 false
+	 * }
+ */ + @PostMapping(name = "부서 정보 수정", value = "/update.do") + public ModelAndView update(Department department) { + boolean saved = departmentService.update(department); + return new ModelAndView("jsonView") + .addObject("saved", saved); + } + + /**지정한 부서 정보를 제거한다. + * @param sggID 시군구 코드 + * @param deptIDs 부서 코드 + * @return jsonView + *
 {
+	 *     "affected": 저장된 정보수
+	 *     "saved": 저장되었으면 true, 그렇지 않으면 false
+	 * }
+ */ + @PostMapping(name = "부서 정보 제거", value = "/remove.do") + public ModelAndView remove(String sggID, String... deptIDs) { + int affected = departmentService.remove(sggID, deptIDs); + return new ModelAndView("jsonView") + .addObject("affected", affected) + .addObject("saved", affected > 0); + } +} \ No newline at end of file diff --git a/src/main/java/cokr/xit/base/user/web/SigunguController.java b/src/main/java/cokr/xit/base/user/web/SigunguController.java new file mode 100644 index 0000000..8cc54e1 --- /dev/null +++ b/src/main/java/cokr/xit/base/user/web/SigunguController.java @@ -0,0 +1,103 @@ +package cokr.xit.base.user.web; + +import java.util.List; + +import javax.annotation.Resource; + +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.servlet.ModelAndView; + +import cokr.xit.base.user.Sigungu; +import cokr.xit.base.user.SigunguQuery; +import cokr.xit.base.user.service.SigunguService; +import cokr.xit.foundation.web.AbstractController; + +/**시군구 서비스의 웹 컨트롤러 + * + *

상세 설명: + * + *

+ * ============ 변경 이력 ============
+ * 2023-10-06	mjkhan 최초 작성
+ * ================================
+ * 
+ */ +@RequestMapping(name = "시군구", value = "/sigungu") +public class SigunguController extends AbstractController { + /**시군구 서비스*/ + @Resource(name = "sigunguService") + private SigunguService sigunguService; + + /**시군구 관리 메인화면(sigungu/sigungu-main)을 연다. + * 조건없는 {@link #getSigunguList(SigunguQuery) 시군구 조회 결과}를 포함시킨다. + * @return /sigungu/sigungu-main + */ + @RequestMapping(name = "시군구 메인", value = "/main.do") + public ModelAndView main() { + ModelAndView mav = getSigunguList(new SigunguQuery().setPageNum(1)); + mav.setViewName("/sigungu/sigungu-main"); + return mav.addObject("sigunguList", toJson(mav.getModel().get("sigunguList"))); + } + + /**시군구 목록을 조회하여 반환한다.
+ * {@link SigunguService#getSigunguList(SigunguQuery)} 참고 + * @param req 시군구 조회 조건 + * @return jsonView + *
 {
+	 *     "sigunguList": [시군구 목록]
+	 *     "sigunguStart": 시군구 목록 시작 인덱스
+	 *     "sigunguFetch": 한 번에 가져오는 시군구 목록 수
+	 *     "sigunguTotal": 조회 결과 찾은 전체 시군구 수
+	 * }
+ */ + @RequestMapping(name = "시군구 조회", value = "/list.do") + public ModelAndView getSigunguList(SigunguQuery req) { + List result = sigunguService.getSigunguList(setFetchSize(req)); + return setCollectionInfo(new ModelAndView("jsonView"), result, "sigungu"); + } + + /**시군구를 등록한다. + * @param sigungu 시군구 정보 + * @return jsonView + *
 {
+	 *     "saved": 등록되었으면 true, 그렇지 않으면 false
+	 * }
+ */ + @PostMapping(name = "시군구 등록", value = "/create.do") + public ModelAndView create(Sigungu sigungu) { + boolean saved = sigunguService.create(sigungu); + return new ModelAndView("jsonView") + .addObject("saved", saved); + } + + /**시군구 정보를 수정한다. + * @param sigungu 시군구 정보 + * @return jsonView + *
 {
+	 *     "saved": 수정되었으면 true, 그렇지 않으면 false
+	 * }
+ */ + @PostMapping(name = "시군구 수정", value = "/update.do") + public ModelAndView update(Sigungu sigungu) { + boolean saved = sigunguService.update(sigungu); + return new ModelAndView("jsonView") + .addObject("saved", saved); + } + + /**지정한 시군구를 제거한다. + * @param sigunguIDs 시군구 아이디 + * @return jsonView + *
 {
+	 *     "affected": 저장된 정보수
+	 *     "saved": 저장되었으면 true, 그렇지 않으면 false
+	 * }
+ */ + @PostMapping(name = "시군구 제거", value = "/remove.do") + public ModelAndView remove(String... sggIDs) { + int affected = sigunguService.remove(sggIDs); + return new ModelAndView("jsonView") + .addObject("affected", affected) + .addObject("saved", affected > 0); + } +} \ No newline at end of file diff --git a/src/main/java/cokr/xit/base/user/web/UserController.java b/src/main/java/cokr/xit/base/user/web/UserController.java index d8e6156..2d9626d 100644 --- a/src/main/java/cokr/xit/base/user/web/UserController.java +++ b/src/main/java/cokr/xit/base/user/web/UserController.java @@ -8,7 +8,7 @@ import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.servlet.ModelAndView; -import cokr.xit.base.user.service.UserQuery; +import cokr.xit.base.user.UserQuery; import cokr.xit.base.user.service.UserService; import cokr.xit.foundation.User; import cokr.xit.foundation.data.DataObject;