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 { + /**지정한 조건에 따라 부서 정보 목록을 조회하여 반환한다.
상세 설명: + * + *
+ * ============ 변경 이력 ============ + * 2023-10-06 mjkhan 최초 작성 + * ================================ + *+ */ +@Mapper("sigunguMapper") +public interface SigunguMapper extends AbstractMapper { + /**지정한 조건에 따라 시군구 목록을 조회하여 반환한다.
상세 설명: + * + *
+ * ============ 변경 이력 ============ + * 2023-10-06 mjkhan 최초 작성 + * ================================ + *+ */ +public interface DepartmentService { + /**지정한 조건에 따라 부서 정보 목록을 조회하여 반환한다. + * @param req 부서 정보 조회 조건 + * @return 부서 정보 목록 + */ + List
상세 설명: + * + *
+ * ============ 변경 이력 ============ + * 2023-10-06 mjkhan 최초 작성 + * ================================ + *+ */ +public interface SigunguService { + /**지정한 조건에 따라 시군구 목록을 조회하여 반환한다. + * @param req 시군구 조회 조건 + * @return 시군구 목록 + */ + List
상세 설명: + * + *
+ * ============ 변경 이력 ============ + * 2023-10-06 mjkhan 최초 작성 + * ================================ + *+ */ +@Component("departmentBean") +public class DepartmentBean extends AbstractComponent { + /** 부서 정보 정보 DAO */ + @Resource(name = "departmentMapper") + private DepartmentMapper departmentMapper; + + /**지정한 조건에 따라 부서 정보 목록을 조회하여 반환한다. + * @param req 부서 정보 조회 조건 + * @return 부서 정보 목록 + */ + public List
상세 설명: + * + *
+ * ============ 변경 이력 ============ + * 2023-10-06 mjkhan 최초 작성 + * ================================ + *+ */ +@Service("departmentService") +public class DepartmentServiceBean extends AbstractServiceBean implements DepartmentService { + /** 부서 정보 정보 Bean */ + @Resource(name = "departmentBean") + private DepartmentBean departmentBean; + + @Override + public List
상세 설명: + * + *
+ * ============ 변경 이력 ============ + * 2023-10-06 mjkhan 최초 작성 + * ================================ + *+ */ +@Component("sigunguBean") +public class SigunguBean extends AbstractComponent { + /** 시군구 정보 DAO */ + @Resource(name = "sigunguMapper") + private SigunguMapper sigunguMapper; + + /**지정한 조건에 따라 시군구 목록을 조회하여 반환한다. + * @param req 시군구 조회 조건 + * @return 시군구 목록 + */ + public List
상세 설명: + * + *
+ * ============ 변경 이력 ============ + * 2023-10-06 mjkhan 최초 작성 + * ================================ + *+ */ +@Service("sigunguService") +public class SigunguServiceBean extends AbstractServiceBean implements SigunguService { + /** 시군구 정보 Bean */ + @Resource(name = "sigunguBean") + private SigunguBean sigunguBean; + + @Override + public List
상세 설명: + * + *
+ * ============ 변경 이력 ============ + * 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"))); + } + + /**부서 정보 목록을 조회하여 반환한다.
{
+ * "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"))); + } + + /**시군구 목록을 조회하여 반환한다.
{
+ * "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;