<?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="cokr.xit.base.user.dao.DepartmentMapper">

<!-- 부서 정보 정보 매퍼
 ========== 변경 이력 ==========
 2023-10-06	mjkhan 최초 작성
 ============================ -->

<resultMap id="deptRow" type="cokr.xit.base.user.Department"> <!-- 부서 정보 -->
    <result property="deptID"        column="DEPT_CD" />    <!-- 부서 코드 -->
    <result property="sggID"         column="SGG_CD" />     <!-- 시군구 코드 -->
    <result property="instCode"      column="INST_CD" />    <!-- 기관 코드 -->
    <result property="name"          column="DEPT_NM" />    <!-- 부서 명 -->
    <result property="telno"         column="DEPT_TELNO" /> <!-- 부서 전화번호 -->
    <result property="faxno"         column="DEPT_FXNO" />  <!-- 부서 팩스번호 -->
    <result property="useYN"         column="USE_YN" />     <!-- 사용 여부 -->
    <result property="createdAt"     column="REG_DT" />     <!-- 등록 일시 -->
    <result property="createdBy"     column="RGTR" />       <!-- 등록자 -->
    <result property="lastModified"  column="MDFCN_DT" />   <!-- 수정 일시 -->
    <result property="modifiedBy"    column="MDFR" />       <!-- 수정자 -->
</resultMap>

<sql id="select">SELECT DEPT_CD    <!-- 부서 코드 -->
     , SGG_CD     <!-- 시군구 코드 -->
     , INST_CD    <!-- 기관 코드 -->
     , DEPT_NM    <!-- 부서 명 -->
     , DEPT_TELNO <!-- 부서 전화번호 -->
     , DEPT_FXNO  <!-- 부서 팩스번호 -->
     , USE_YN     <!-- 사용 여부 -->
     , REG_DT     <!-- 등록 일시 -->
     , RGTR       <!-- 등록자 -->
     , MDFCN_DT   <!-- 수정 일시 -->
     , MDFR       <!-- 수정자 -->
  FROM TB_DEPT</sql>

<select id="selectDepartmentList" parameterType="map" resultType="dataobject">/* 부서 정보 목록 조회(departmentMapper.selectDepartmentList) */
<include refid="utility.paging-prefix" />
<include refid="select" />
<where>
  <if test="@org.egovframe.rte.fdl.string.EgovStringUtil@isNotEmpty(by) and @org.egovframe.rte.fdl.string.EgovStringUtil@isNotEmpty(term)"> 
  AND ${by} LIKE CONCAT('%', #{term}, '%')
  </if>
  <if test="sggID != null"> AND SGG_CD = #{sggID}</if>
  <if test="instCode != null"> AND INST_CD = #{instCode}</if>
  <if test="deptIDs != null"> AND DEPT_CD IN (<foreach collection="deptIDs" item="deptID" separator=",">#{deptID}</foreach>)</if>
  <if test="!includeAll"> AND USE_YN = 'Y'</if>
  </where>
<include refid="utility.orderBy" />
<include refid="utility.paging-suffix" /></select>

<select id="selectDepartments" parameterType="map" resultMap="deptRow">/* 부서 정보 객체 가져오기(departmentMapper.selectDepartments) */
<include refid="select" />
 WHERE SGG_CD = #{sggID}
  <if test="deptIDs != null">AND DEPT_CD IN (<foreach collection="deptIDs" item="deptID" separator=",">#{deptID}</foreach>)</if>
<include refid="utility.orderBy" /></select>

<sql id="sggDepts">
SELECT A.SGG_CD
     , SGG_NM
     , A.INST_CD
     , INST_NM
     , DEPT_CD
     , DEPT_NM
  FROM TB_SGG A 
  LEFT OUTER JOIN TB_DEPT B
    ON A.SGG_CD = B.SGG_CD 
   AND A.INST_CD = B.INST_CD
   AND A.USE_YN = 'Y' 
   AND B.USE_YN = 'Y'
</sql>

<sql id="emptyDept">
  SELECT SGG_CD, SGG_NM, INST_CD, INST_NM, 'EMPTY00', '(부서 없음)'
    FROM TB_SGG
   WHERE USE_YN = 'Y'
</sql>

<sql id="adminSggDept">
  SELECT 'ADMIN', '관리자 시군구', 'ADMIN00', '관리자 기관', 'ADMIN00', '관리자 부서'
    FROM DUAL
</sql>

<select id="selectSggDepts" resultType="dataobject">
<include refid="sggDepts" />
 ORDER BY A.SGG_CD, A.INST_CD, DEPT_CD
</select>

<insert id="insert" parameterType="cokr.xit.base.user.Department">/* 부서 정보 등록(departmentMapper.insert) */
INSERT INTO TB_DEPT (
       DEPT_CD    <!-- 부서 코드 -->
     , SGG_CD     <!-- 시군구 코드 -->
     , INST_CD    <!-- 기관 코드 -->
     , DEPT_NM    <!-- 부서 명 -->
     , DEPT_TELNO <!-- 부서 전화번호 -->
     , DEPT_FXNO  <!-- 부서 팩스번호 -->
     , USE_YN     <!-- 사용 여부 -->
     , REG_DT     <!-- 등록 일시 -->
     , RGTR       <!-- 등록자 -->
     , MDFCN_DT   <!-- 수정 일시 -->
     , MDFR       <!-- 수정자 -->
) VALUES (
       #{deptID}            <!-- 부서 코드 -->
     , #{sggID}             <!-- 시군구 코드 -->
     , #{instCode}          <!-- 기관 코드 -->
     , #{name}              <!-- 부서 명 -->
     , #{telno}             <!-- 부서 전화번호 -->
     , #{faxno}             <!-- 부서 팩스번호 -->
     , #{useYN}             <!-- 사용 여부 -->
     , #{createdAt}         <!-- 등록 일시 -->
     , #{createdBy}         <!-- 등록자 -->
     , #{lastModified}      <!-- 수정 일시 -->
     , #{modifiedBy}        <!-- 수정자 -->
)</insert>

<update id="update" parameterType="cokr.xit.base.user.Department">/* 부서 정보 수정(departmentMapper.update) */
UPDATE TB_DEPT
   SET SGG_CD = #{sggID}               <!-- 시군구 코드 -->
     , INST_CD = #{instCode}           <!-- 기관 코드 -->
     , DEPT_NM = #{name}               <!-- 부서 명 -->
     , DEPT_TELNO = #{telno}           <!-- 부서 전화번호 -->
     , DEPT_FXNO = #{faxno}            <!-- 부서 팩스번호 -->
     , MDFCN_DT = #{lastModified}      <!-- 수정 일시 -->
     , MDFR = #{modifiedBy}            <!-- 수정자 -->
 WHERE DEPT_CD = #{deptID}</update>

<update id="delete" parameterType="map">/* 부서 정보 삭제(departmentMapper.deleteDepartment) */
UPDATE TB_DEPT
   SET USE_YN = 'N'
     , MDFCN_DT =<include refid="utility.now" />
     , MDFR = #{currentUser.id}
<where><if test="sggIDs != null">  AND SGG_CD IN (<foreach collection="sggIDs" item="sggID" separator=",">#{sggID}</foreach>)</if>
<if test="deptIDs != null">  AND DEPT_CD IN (<foreach collection="deptIDs" item="deptID" separator=",">#{deptID}</foreach>)</if></where></update>

</mapper>