diff --git a/src/main/java/cokr/xit/applib/SQLUtil.java b/src/main/java/cokr/xit/applib/SQLUtil.java
new file mode 100644
index 0000000..352849c
--- /dev/null
+++ b/src/main/java/cokr/xit/applib/SQLUtil.java
@@ -0,0 +1,39 @@
+package cokr.xit.applib;
+
+public class SQLUtil {
+
+ public static final String SCRIPT_START = "";
+
+ public static final String now = """
+ DATE_FORMAT(CURRENT_TIMESTAMP, '%Y%m%d%H%i%s')
+ TO_CHAR(CURRENT_TIMESTAMP, 'YYYYMMDDHH24MISS')
+ """;
+
+ public static final String sortBy = """
+ ORDER BY ${orderBy}
+ """;
+
+ public static final String orderBy = """
+ """
+ +sortBy+"""
+ """;
+
+ public static final String pagingPrefix = """
+
+ SELECT QROWS.*
+ FROM (
+ SELECT ROW_NUMBER() OVER("""
+ +sortBy+"""
+ ) ROW_NUM
+ , COUNT(*) OVER() TOT_CNT
+ , QBODY.*
+ FROM (
+ """;
+
+ public static final String pagingSuffix = """
+ ) QBODY
+ ) QROWS
+ WHERE ROW_NUM BETWEEN ((#{pageNum} - 1) * #{fetchSize}) + 1 AND (#{pageNum} * #{fetchSize})
+ """;
+}
diff --git a/src/main/java/cokr/xit/applib/ogdp/OgdpQuery.java b/src/main/java/cokr/xit/applib/ogdp/OgdpQuery.java
new file mode 100644
index 0000000..eaff449
--- /dev/null
+++ b/src/main/java/cokr/xit/applib/ogdp/OgdpQuery.java
@@ -0,0 +1,70 @@
+package cokr.xit.applib.ogdp;
+
+import cokr.xit.foundation.component.QueryRequest;
+
+public class OgdpQuery extends QueryRequest {
+ private static final long serialVersionUID = 1L;
+
+
+ private String sggCd; // 시군구 코드
+ private String deptCd; // 부서 코드
+ private String instCd; // 기관 코드
+ private String useYn; // 사용 여부
+ private String delYn; // 삭제 여부
+
+ private String selectAdd;
+
+ public String getSggCd() {
+ return ifEmpty(sggCd, () -> null);
+ }
+
+ public T setSggCd(String sggCd) {
+ this.sggCd = sggCd;
+ return self();
+ }
+
+ public String getDeptCd() {
+ return ifEmpty(deptCd, () -> null);
+ }
+
+ public T setDeptCd(String deptCd) {
+ this.deptCd = deptCd;
+ return self();
+ }
+
+ public String getInstCd() {
+ return ifEmpty(instCd, () -> null);
+ }
+
+ public T setInstCd(String instCd) {
+ this.instCd = instCd;
+ return self();
+ }
+
+ public String getUseYn() {
+ return ifEmpty(useYn, () -> null);
+ }
+
+ public T setUseYn(String useYn) {
+ this.useYn = useYn;
+ return self();
+ }
+
+ public String getDelYn() {
+ return ifEmpty(delYn, () -> null);
+ }
+
+ public T setDelYn(String delYn) {
+ this.delYn = delYn;
+ return self();
+ }
+
+ public String getSelectAdd() {
+ return ifEmpty(selectAdd, () -> null);
+ }
+
+ public T setSelectAdd(String selectAdd) {
+ this.selectAdd = selectAdd;
+ return self();
+ }
+}
diff --git a/src/main/java/cokr/xit/applib/ogdp/OgdpSigungu.java b/src/main/java/cokr/xit/applib/ogdp/OgdpSigungu.java
new file mode 100644
index 0000000..397b03c
--- /dev/null
+++ b/src/main/java/cokr/xit/applib/ogdp/OgdpSigungu.java
@@ -0,0 +1,36 @@
+package cokr.xit.applib.ogdp;
+
+import cokr.xit.base.user.Sigungu;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 시군구 정보
+ * @author leebj
+ */
+@Getter
+@Setter
+public class OgdpSigungu extends Sigungu {
+
+ /**
+ * 상징 파일 경로
+ */
+ private String symbolFilepath;
+
+ /**
+ * 상징 파일 명
+ */
+ private String symbolFilename;
+
+ /**
+ * 로고 파일 경로
+ */
+ private String logoFilepath;
+
+ /**
+ * 로고 파일 명
+ */
+ private String logoFilename;
+
+
+}
diff --git a/src/main/java/cokr/xit/applib/ogdp/dao/OgdpMapper.java b/src/main/java/cokr/xit/applib/ogdp/dao/OgdpMapper.java
new file mode 100644
index 0000000..4697a34
--- /dev/null
+++ b/src/main/java/cokr/xit/applib/ogdp/dao/OgdpMapper.java
@@ -0,0 +1,466 @@
+package cokr.xit.applib.ogdp.dao;
+
+import java.util.List;
+import java.util.Map;
+
+import org.apache.ibatis.annotations.InsertProvider;
+import org.apache.ibatis.annotations.Select;
+import org.apache.ibatis.annotations.SelectProvider;
+import org.apache.ibatis.annotations.Update;
+import org.apache.ibatis.annotations.UpdateProvider;
+import org.egovframe.rte.psl.dataaccess.mapper.Mapper;
+
+import cokr.xit.applib.SQLUtil;
+import cokr.xit.applib.ogdp.OgdpQuery;
+import cokr.xit.applib.ogdp.OgdpSigungu;
+import cokr.xit.foundation.component.AbstractMapper;
+import cokr.xit.foundation.data.DataObject;
+
+@Mapper("ogdpMapper")
+public interface OgdpMapper extends AbstractMapper {
+
+ /**모든 기관,부서 목록을 반환한다.
+ * @param
+ * @return 기관,부서 목록
+ */
+ @Select(SQLUtil.SCRIPT_START+"""
+ /* 전체 기관,부서 목록 조회(ogdpMapper.selectAllOgdpList) */
+ SELECT CONCAT(A.INST_CD,'/',B.DEPT_CD) AS OGDP_CD
+ , CONCAT(A.INST_NM,' / ',B.DEPT_NM) AS OGDP_NM
+ , A.INST_CD
+ , A.INST_NM
+ , B.DEPT_CD
+ , B.DEPT_NM
+ , A.SGG_CD
+ , A.SGG_NM
+ FROM TB_SGG A
+ LEFT OUTER JOIN TB_DEPT B ON (A.INST_CD = B.INST_CD)
+ UNION
+ SELECT ('default/default') AS OGDP_CD
+ , CONCAT('기본 기관',' / ','기본 부서') AS OGDP_NM
+ , 'default' AS INST_CD
+ , '기본 기관' AS INST_NM
+ , 'default' AS DEPT_CD
+ , '기본 부서' AS DEPT_NM
+ , 'default' AS SGG_CD
+ , '기본 시군구' AS SGG_NM
+ FROM DUAL
+ """+SQLUtil.SCRIPT_END)
+ List selectAllOgdpList();
+
+ /**사용가능한 기관,부서 목록을 반환한다.
+ * @param stringMap
+ * @param
+ * @return 기관,부서 목록
+ */
+ @Select(SQLUtil.SCRIPT_START+"""
+ /* 사용가능한 기관,부서 목록 조회(ogdpMapper.selectAbleOgdpList) */
+ SELECT CONCAT(A.INST_CD,'/',B.DEPT_CD) AS OGDP_CD
+ , CONCAT(A.INST_NM,' / ',B.DEPT_NM) AS OGDP_NM
+ , A.INST_CD
+ , A.INST_NM
+ , B.DEPT_CD
+ , B.DEPT_NM
+ , A.SGG_CD
+ , A.SGG_NM
+ FROM TB_SGG A
+ LEFT OUTER JOIN TB_DEPT B ON (A.INST_CD = B.INST_CD)
+
+
+ WHERE A.INST_CD = #{institute}
+
+
+
+ WHERE A.SGG_CD = #{currentUser.user.orgID}
+
+
+ UNION
+ SELECT 'default/default' AS OGDP_CD
+ , CONCAT('기본 기관',' / ','기본 부서') AS OGDP_NM
+ , 'default' AS INST_CD
+ , '기본 기관' AS INST_NM
+ , 'default' AS DEPT_CD
+ , '기본 부서' AS DEPT_NM
+ , 'default' AS SGG_CD
+ , '기본 시군구' AS SGG_NM
+ FROM DUAL
+
+
+
+ """+SQLUtil.SCRIPT_END)
+ List selectAbleOgdpList(Map params);
+
+
+
+ /**사용자의 시군구코드,시군구명,기관코드,기관명,부서코드,부서명을 반환한다.
+ * @param 사용자ID
+ * @return 시군구코드,시군구명,기관코드,기관명,부서코드,부서명
+ */
+ @Select(SQLUtil.SCRIPT_START+"""
+ /* 사용자의 시군구,기관,부서 조회(ogdpMapper.selectOgdpInfoOfUser) */
+ SELECT S.SGG_CD
+ , S.SGG_NM
+ , U.NSTT_CD AS INST_CD
+ , S.INST_NM
+ , U.DEPT_CD
+ , D.DEPT_NM
+ FROM TB_USER U
+ LEFT OUTER JOIN TB_SGG S ON (U.ORG_ID = S.SGG_CD)
+ LEFT OUTER JOIN TB_DEPT D ON (U.DEPT_CD = D.DEPT_CD)
+ WHERE U.USER_ID = #{userId}
+ """+SQLUtil.SCRIPT_END)
+ DataObject selectOgdpInfoOfUser(String userId);
+
+
+ /**모든 기관 목록을 반환한다.
+ * @param
+ * @return 기관 목록
+ */
+ @Select(SQLUtil.SCRIPT_START+"""
+ /* 모든 기관 조회(ogdpMapper.selectAllInstList) */
+ SELECT INST_CD
+ , INST_NM
+ FROM TB_SGG
+ WHERE USE_YN = 'Y'
+ """+SQLUtil.SCRIPT_END)
+ List selectAllInstList();
+
+ /**모든 시군구 목록을 반환한다.
+ * @param
+ * @return 시군구 목록
+ */
+ @Select(SQLUtil.SCRIPT_START+"""
+ /* 모든 시군구 조회(ogdpMapper.selectAllSggList) */
+ SELECT SGG_CD
+ , SGG_NM
+ FROM TB_SGG
+ WHERE USE_YN = 'Y'
+ """+SQLUtil.SCRIPT_END)
+ List selectAllSggList();
+
+ /**부서코드에 매칭되는 시군구코드를 반환한다.
+ * @param deptCd 부서코드
+ * @return 시군구코드
+ */
+ @Select(SQLUtil.SCRIPT_START+"""
+ /* 부서에 따른 시군구코드 조회(ogdpMapper.selectSggCdByDeptCd) */
+ SELECT SGG_CD
+ FROM TB_DEPT
+ WHERE DEPT_CD = #{deptCd}
+ """+SQLUtil.SCRIPT_END)
+ String selectSggCdByDeptCd(String deptCd);
+
+ /**시군구 정보를 수정한다.
+ * @param sgg 시군구
+ * @return 저장 여부
+ * - 저장됐으면 true
+ * - 그렇지 않으면 false
+ *
+ */
+ default boolean updateSgg(OgdpSigungu sgg) {
+ return sgg != null && updateSgg(params().set("sgg", sgg)) == 1;
+ }
+
+ /**시군구 정보를 수정한다.
+ * @param params 파라미터
+ * - "sgg" - 시군구 정보
+ * - "currentUser" - 현재 접속한 사용자
+ *
+ * @return 저장된 정보수
+ */
+ @Update(SQLUtil.SCRIPT_START+"""
+ /* 시군구 설정정보 수정 (ogdpMapper.updateSgg) */
+ UPDATE TB_SGG
+ SET MDFCN_DT =
+ """
+ +SQLUtil.now
+ +"""
+ , MDFR = #{sgg.modifiedBy}
+ , INST_ZIP = #{sgg.instituteZipCode}
+ , INST_ADDR = #{sgg.instAddress}
+ , INST_DADDR = #{sgg.instDetailAddress}
+
+ , SYMBOL_FILE_PATH = #{sgg.symbolFilepath}
+ , SYMBOL_FILE_NM = #{sgg.symbolFilename}
+
+
+ , LOGO_FILE_PATH = #{sgg.logoFilepath}
+ , LOGO_FILE_NM = #{sgg.logoFilename}
+
+
+ , OFFCS_FILE_PATH = #{sgg.officialSealFilepath}
+ , OFFCS_FILE_NM = #{sgg.officialSealFilename}
+
+ WHERE SGG_CD = #{sgg.sggID}
+ """+SQLUtil.SCRIPT_END)
+ int updateSgg(Map params);
+
+ /**지정한 조건에 따라 시군구 객체를 반환한다.
+ * @param req 시군구 조회 조건
+ * @return 시군구 객체
+ */
+ default DataObject selectSggInfo(OgdpQuery req) {
+
+ // 사용 여부 확인
+ if (req.getUseYn() == null) {
+ req.setUseYn("Y");
+ }
+
+ return selectSgg(req);
+ }
+
+ /**지정한 조건에 따라 시군구 객체들을 반환한다.
+ * @param req 시군구 조회 조건
+ * @return 시군구 객체 목록
+ */
+ @SelectProvider(type=OgdpMapper.class, method="selectSggProvider")
+ DataObject selectSgg(OgdpQuery req);
+
+ public static String selectSggProvider() {
+
+ String comment = " /* 시군구 객체 가져오기(ogdpMapper.selectSgg) */ ";
+
+ String selectFrom = """
+ SELECT S.SGG_CD
+ , S.SGG_NM
+ , S.INST_SE_CD
+ , S.INST_CD
+ , S.INST_NM
+ , (CASE
+ WHEN S.INST_DADDR IS NULL OR S.INST_DADDR = ''
+ THEN S.INST_ADDR
+ ELSE CONCAT(S.INST_ADDR,' ',S.INST_DADDR)
+ END) AS INST_FULL_ADDR
+ , S.INST_ADDR
+ , S.INST_DADDR
+ , S.INST_ZIP
+ , S.SYMBOL_FILE_PATH
+ , S.SYMBOL_FILE_NM
+ , S.LOGO_FILE_PATH
+ , S.LOGO_FILE_NM
+ , S.OFFCS_FILE_PATH
+ , S.OFFCS_FILE_NM
+ FROM TB_SGG S
+ """;
+ String where = """
+
+
+ AND S.SGG_CD = #{sggCd}
+
+
+ AND S.USE_YN = #{useYn}
+
+
+ """;
+
+ return SQLUtil.SCRIPT_START
+ + comment
+ + selectFrom + where
+ + SQLUtil.SCRIPT_END;
+ }
+
+
+ /**부서 사용여부를 변경한다.
+ * @param deptCds 부서 코드 목록
+ * @return 저장된 정보 수
+ */
+ default int setStatus(String useYn, String... deptCds) {
+ DataObject params = params();
+ params.set("useYn", useYn);
+ params.set("deptCds", deptCds);
+ int effected = setStatus(params);
+ return effected;
+ }
+
+ /**부서 사용여부를 변경한다.
+ * @param params 파라미터
+ * - "deptCds" - 부서 코드 목록
+ * - "currentUser" - 현재 접속한 사용자
+ *
+ * @return 저장된 정보수
+ */
+ @Update(SQLUtil.SCRIPT_START+"""
+ /* 부서 사용 여부 변경(ogdpMapper.setStatus) */
+ UPDATE TB_DEPT
+ SET USE_YN = #{useYn}
+ , MDFCN_DT =
+ """
+ +SQLUtil.now
+ +"""
+
+ , MDFR = #{currentUser.id}
+ WHERE DEPT_CD IN ( #{deptCd} )
+ """+SQLUtil.SCRIPT_END)
+ int setStatus(Map params);
+
+
+ @InsertProvider(type=OgdpMapper.class, method="insertDeptProvider")
+ int insertDept(Map params);
+
+ /**부서 정보를 등록한다.
+ * @param params 파라미터
+ * - "dept" - 부서 정보
+ * - "currentUser" - 현재 접속한 사용자
+ *
+ * @return 저장된 정보수
+ */
+ public static String insertDeptProvider(Map params) {
+
+ String comment = "/* 부서 등록(ogdpMapper.insertDept) */ ";
+
+ String insertInto = """
+ INSERT
+ INTO TB_DEPT (
+ DEPT_CD
+ , SGG_CD
+ , INST_CD
+ , DEPT_NM
+ , DEPT_TELNO
+ , DEPT_FXNO
+ , USE_YN
+ , REG_DT
+ , RGTR
+ , MDFCN_DT
+ , MDFR
+ """;
+ String values = """
+ ) VALUES (
+ #{dept.deptID}
+ , #{dept.sggID}
+ , #{dept.instCode}
+ , #{dept.name}
+ , #{dept.telno}
+ , #{dept.faxno}
+ , 'Y'
+ ,
+ """
+ +SQLUtil.now
+ +"""
+ , #{dept.createdBy}
+ ,
+ """
+ +SQLUtil.now
+ +"""
+ , #{dept.modifiedBy}
+ """;
+ String close = ")";
+
+ String insertIntoAdd = params.get("insertIntoAdd") == null ? "" : (String)params.get("insertIntoAdd");
+ String valuesAdd = params.get("valuesAdd") == null ? "" : (String)params.get("valuesAdd");
+
+ return SQLUtil.SCRIPT_START
+ + comment
+ + insertInto + insertIntoAdd + values + valuesAdd + close
+ + SQLUtil.SCRIPT_END;
+ }
+
+
+ @UpdateProvider(type=OgdpMapper.class, method="updateDeptProvider")
+ int updateDept(Map params);
+
+
+ public static String updateDeptProvider(Map params) {
+
+
+ String comment = "/* 부서 수정(ogdpMapper.updateDept) */ ";
+
+ String updateSet = """
+ UPDATE TB_DEPT
+ SET SGG_CD = #{dept.sggID}
+ , INST_CD = #{dept.instCode}
+ , DEPT_NM = #{dept.name}
+ , DEPT_TELNO = #{dept.telno}
+ , DEPT_FXNO = #{dept.faxno}
+ , MDFCN_DT =
+ """
+ +SQLUtil.now
+ +"""
+
+ , MDFR = #{dept.modifiedBy}
+ """;
+ String where = """
+ WHERE DEPT_CD = #{dept.deptID}
+ AND USE_YN = 'Y'
+ """;
+
+ String updateSetAdd = params.get("updateSetAdd") == null ? "" : (String)params.get("updateSetAdd");
+
+ return SQLUtil.SCRIPT_START
+ + comment
+ + updateSet + updateSetAdd + where
+ + SQLUtil.SCRIPT_END;
+ }
+
+
+ @SelectProvider(type=OgdpMapper.class, method="selectDeptInfoProvider")
+ DataObject selectDeptInfo(OgdpQuery req);
+
+ public static String selectDeptInfoProvider(OgdpQuery req) {
+
+ String comment = "/* 부서 객체 가져오기(ogdpMapper.selectDeptInfo) */ ";
+
+ String selectFromWhere = selectDept(req);
+
+ return SQLUtil.SCRIPT_START
+ + comment
+ + selectFromWhere
+ + SQLUtil.SCRIPT_END;
+ }
+
+ @SelectProvider(type=OgdpMapper.class, method="selectDeptListProvider")
+ List selectDeptList(OgdpQuery query);
+
+ public static String selectDeptListProvider(OgdpQuery req) {
+
+
+ String comment = "/* 부서 객체 목록 가져오기(ogdpMapper.selectDeptList) */ ";
+
+ String selectFromWhere = selectDept(req);
+
+ return SQLUtil.SCRIPT_START
+ + comment
+ + SQLUtil.pagingPrefix
+ + selectFromWhere
+ + SQLUtil.orderBy
+ + SQLUtil.pagingSuffix
+ + SQLUtil.SCRIPT_END;
+ }
+
+ public static String selectDept(OgdpQuery req) {
+ String select = """
+ SELECT D.DEPT_CD
+ , D.SGG_CD
+ , (SELECT SGG_NM FROM TB_SGG WHERE SGG_CD = D.SGG_CD) AS SGG_NM
+ , D.INST_CD
+ , (SELECT INST_NM FROM TB_SGG WHERE INST_CD = D.INST_CD) AS INST_NM
+ , D.DEPT_NM
+ , D.DEPT_TELNO
+ , D.DEPT_FXNO
+ , D.USE_YN
+ , (CASE D.USE_YN WHEN 'Y' THEN '사용' WHEN 'N' THEN '미사용' ELSE '' END) AS USE_YN_NM
+ , D.REG_DT
+ , D.RGTR
+ , D.MDFCN_DT
+ , D.MDFR
+ """;
+
+ String fromWhere = """
+ FROM TB_DEPT D
+
+
+ AND D.SGG_CD = #{sggCd}
+
+
+ AND D.DEPT_CD = #{deptCd}
+
+
+ AND D.INST_CD = #{instCd}
+
+
+ AND D.USE_YN = #{useYn}
+
+
+ """;
+ return select + req.getSelectAdd() + fromWhere;
+ }
+}
diff --git a/src/main/java/cokr/xit/applib/ogdp/service/bean/AbstractOgdpBean.java b/src/main/java/cokr/xit/applib/ogdp/service/bean/AbstractOgdpBean.java
new file mode 100644
index 0000000..a15c3a7
--- /dev/null
+++ b/src/main/java/cokr/xit/applib/ogdp/service/bean/AbstractOgdpBean.java
@@ -0,0 +1,133 @@
+package cokr.xit.applib.ogdp.service.bean;
+
+import java.util.List;
+import java.util.Map;
+
+import javax.annotation.Resource;
+
+import cokr.xit.applib.ogdp.OgdpQuery;
+import cokr.xit.applib.ogdp.OgdpSigungu;
+import cokr.xit.applib.ogdp.dao.OgdpMapper;
+import cokr.xit.base.user.Department;
+import cokr.xit.foundation.UserInfo;
+import cokr.xit.foundation.component.AbstractBean;
+import cokr.xit.foundation.data.DataObject;
+
+public abstract class AbstractOgdpBean extends AbstractBean {
+
+ @Resource(name="ogdpMapper")
+ private OgdpMapper ogdpMapper;
+
+ public Object selectAllOgdpList() {
+ return ogdpMapper.selectAllOgdpList();
+ }
+
+ public List selectAbleOgdpList(DataObject params) {
+ return ogdpMapper.selectAbleOgdpList(params);
+ }
+
+ public List selectAllInstList() {
+ return ogdpMapper.selectAllInstList();
+ }
+
+ public List selectAllSggList(){
+ return ogdpMapper.selectAllSggList();
+ }
+
+ public DataObject selectOgdpInfoOfUser(String userId){
+ return ogdpMapper.selectOgdpInfoOfUser(userId);
+ }
+
+ public String selectSggCdByDeptCd(String deptCd) {
+ return ogdpMapper.selectSggCdByDeptCd(deptCd);
+ }
+
+ /**userInfo 객체에 해당 사용자가 소속된 시군구,기관,부서 정보를 저장한다.
+ * @param userInfo 사용자 정보
+ * @return
+ */
+ public void initUserInfo(UserInfo userInfo) {
+
+ DataObject ogdpInfo = ogdpMapper.selectOgdpInfoOfUser(userInfo.getId());
+
+ Map infoMap = userInfo.getInfo();
+ if(ogdpInfo == null) {
+ infoMap.put("sggCd", "");
+ infoMap.put("sggNm", "");
+ infoMap.put("instCd", "");
+ infoMap.put("instNm", "");
+ infoMap.put("deptCd", "");
+ infoMap.put("deptNm", "");
+ } else {
+ infoMap.put("sggCd", ogdpInfo.string("SGG_CD"));
+ infoMap.put("sggNm", ogdpInfo.string("SGG_NM"));
+ infoMap.put("instCd", ogdpInfo.string("INST_CD"));
+ infoMap.put("instNm", ogdpInfo.string("INST_NM"));
+ infoMap.put("deptCd", ogdpInfo.string("DEPT_CD"));
+ infoMap.put("deptNm", ogdpInfo.string("DEPT_NM"));
+ }
+
+ userInfo.setInfo(infoMap);
+ }
+
+ /**시군구 정보를 수정한다.
+ * @param sgg 시군구
+ * @return 저장 여부
+ * - 저장됐으면 true
+ * - 그렇지 않으면 false
+ *
+ */
+ public boolean updateSgg(OgdpSigungu sgg) {
+ return ogdpMapper.updateSgg(sgg);
+ }
+
+ /**지정한 조건에 따라 시군구 객체를 반환한다.
+ * @param req 시군구 조회 조건
+ * @return 시군구 객체
+ */
+ public DataObject getSggInfo(OgdpQuery req) {
+ return ogdpMapper.selectSggInfo(req);
+ }
+
+ /**부서 정보를 삭제한다.
+ * @param deptCds 부서 코드 목록
+ * @return 저장 여부
+ * - 저장됐으면 true
+ * - 그렇지 않으면 false
+ *
+ */
+ public boolean remove(String... deptCds) {
+ return ogdpMapper.setStatus("N", deptCds) > 0 ? true : false;
+ }
+
+
+ /**지정한 조건에 따라 부서 목록을 조회하여 반환한다.
+ * @param req 부서 정보 조회 조건
+ * @return 부서 목록
+ */
+ public abstract List getDeptList(OgdpQuery req);
+
+ /**지정한 조건에 따라 부서 객체를 반환한다.
+ * @param req 부서 조회 조건
+ * @return 부서 객체
+ */
+ public abstract DataObject getDeptInfo(OgdpQuery req);
+
+ /**부서 정보를 등록한다.
+ * @param dept 부서
+ * @return 저장 여부
+ * - 저장됐으면 true
+ * - 그렇지 않으면 false
+ *
+ */
+ public abstract boolean createDept(Department dept);
+
+ /**부서 정보를 수정한다.
+ * @param dept 부서
+ * @return 저장 여부
+ * - 저장됐으면 true
+ * - 그렇지 않으면 false
+ *
+ */
+ public abstract boolean updateDept(Department dept);
+}
diff --git a/src/main/java/cokr/xit/applib/ogdp/service/bean/DefaultOgdpBean.java b/src/main/java/cokr/xit/applib/ogdp/service/bean/DefaultOgdpBean.java
new file mode 100644
index 0000000..bb2df00
--- /dev/null
+++ b/src/main/java/cokr/xit/applib/ogdp/service/bean/DefaultOgdpBean.java
@@ -0,0 +1,63 @@
+package cokr.xit.applib.ogdp.service.bean;
+
+import java.util.List;
+
+import javax.annotation.Resource;
+
+import org.springframework.stereotype.Component;
+
+import cokr.xit.applib.ogdp.OgdpQuery;
+import cokr.xit.applib.ogdp.dao.OgdpMapper;
+import cokr.xit.base.user.Department;
+import cokr.xit.foundation.data.DataObject;
+
+@Component("defaultOgdpBean")
+public class DefaultOgdpBean extends AbstractOgdpBean {
+
+
+ @Resource(name = "ogdpMapper")
+ private OgdpMapper ogdpMapper;
+
+ @Override
+ public List getDeptList(OgdpQuery query) {
+ // 기본 정렬
+ if (query.getOrderBy() == null) {
+ if(query.getFetchSize() > 0) {
+ query.setOrderBy("QBODY.DEPT_CD DESC");
+ } else {
+ query.setOrderBy("D.DEPT_CD DESC");
+ }
+ }
+
+ return ogdpMapper.selectDeptList(query);
+ }
+
+ @Override
+ public DataObject getDeptInfo(OgdpQuery query) {
+
+ return ogdpMapper.selectDeptInfo(query);
+ }
+
+ @Override
+ public boolean createDept(Department dept) {
+
+ boolean result = dept != null && ogdpMapper.insertDept(
+ new DataObject()
+ .set("currentUser", currentUser())
+ .set("dept", dept)) == 1;
+
+ return result;
+ }
+
+ @Override
+ public boolean updateDept(Department dept) {
+ boolean result = dept != null && ogdpMapper.updateDept(
+ new DataObject()
+ .set("currentUser", currentUser())
+ .set("dept", dept)) == 1;
+
+ return result;
+ }
+
+
+}