<?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="com.dk.mdm.mapper.mst.SettingValueMapper">

    <!-- 通用设置 -->
    <!-- 通用查询列 -->
    <sql id="Base_Column_List">
        cp_id, setting_code, setting_value, remarks, flg_valid, op_create_time, op_create_user_id, op_update_time, op_update_user_id, op_app_code, op_timestamp, op_db_user
    </sql>

    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.dk.mdm.model.pojo.mst.SettingValue">
        <id column="cp_id" property="cpId"/>
                <result column="setting_code" property="settingCode"/>
                <result column="setting_value" property="settingValue"/>
                <result column="remarks" property="remarks"/>
                <result column="flg_valid" property="flgValid"/>
            <result column="op_create_time" property="opCreateTime" typeHandler="TimestampTypeHandler"/>
                <result column="op_create_user_id" property="opCreateUserId" typeHandler="UuidTypeHandler"/>
            <result column="op_update_time" property="opUpdateTime" typeHandler="TimestampTypeHandler"/>
                <result column="op_update_user_id" property="opUpdateUserId" typeHandler="UuidTypeHandler"/>
                <result column="op_app_code" property="opAppCode"/>
            <result column="op_timestamp" property="opTimestamp" typeHandler="TimestampTypeHandler"/>
                <result column="op_db_user" property="opDbUser"/>
    </resultMap>

    <!-- 通用条件列 -->
    <sql id="Condition">
        <where>
            <if test="settingCode != null and settingCode != ''">
                AND setting_code = #{settingCode}
            </if>
            <if test="settingValue != null and settingValue != ''">
                AND setting_value = #{settingValue}
            </if>
            <if test="remarks != null and remarks != ''">
                AND remarks = #{remarks}
            </if>
            <if test="flgValid != null">
                AND flg_valid = #{flgValid}
            </if>
            <if test="opCreateTime != null">
                AND op_create_time = #{opCreateTime}
            </if>
            <if test="opCreateUserId != null and opCreateUserId != ''">
                AND op_create_user_id = #{opCreateUserId}
            </if>
            <if test="opUpdateTime != null">
                AND op_update_time = #{opUpdateTime}
            </if>
            <if test="opUpdateUserId != null and opUpdateUserId != ''">
                AND op_update_user_id = #{opUpdateUserId}
            </if>
            <if test="opAppCode != null and opAppCode != ''">
                AND op_app_code = #{opAppCode}
            </if>
            <if test="opTimestamp != null">
                AND op_timestamp = #{opTimestamp}
            </if>
            <if test="opDbUser != null and opDbUser != ''">
                AND op_db_user = #{opDbUser}
            </if>
        </where>
    </sql>


    <!-- 获取角色敏感信息权限 -->
    <select id="getSettingValue" resultType="java.util.Map">
        SELECT
            T.*
        FROM
            (
                SELECT
                    tsk.kind_code AS "itemCode",
                    tsk.kind_name AS "itemName",
                    tsk.kind_code AS "settingCode",
                    NULL AS "parentCode",
                    NULL AS "valueKind",
                    NULL AS "defValue",
                    NULL AS "settingValue",
                    tsk.display_no AS "displayNo",
                    TRUE AS "checked"
                FROM
                    sys.t_setting_kind tsk UNION all
                SELECT
                    tsi.setting_code AS "itemCode",
                    tsi.setting_name AS "itemName",
                    tsi.setting_kind AS "settingCode",
                    tsi.setting_kind AS "parentCode",
                    tsi.value_kind AS "valueKind",
                    tsi.def_value AS "defValue",
                    COALESCE(tmsv.setting_value,tsi.def_value) AS "settingValue",
                    tsi.display_no AS "displayNo",
                    CASE

                        WHEN tmsv.setting_value IS NULL THEN
                            FALSE ELSE TRUE
                        END AS "checked"
                FROM
                    sys.t_setting_item tsi
                        LEFT JOIN sys.t_setting_kind tsk ON tsi.setting_kind = tsk.kind_code
                        LEFT JOIN dkic_b.t_mst_setting_value tmsv ON tsi.setting_code = tmsv.setting_code
                        AND tmsv.cp_id = #{ cpId }
                WHERE
                    tsi.flg_valid
            ) T
        ORDER BY
            t."settingCode" desc ,
            t."displayNo"
    </select>

    <delete id="deleteSettingValueId" >
        DELETE FROM dkic_b.t_mst_setting_value tmrs WHERE tmrs.cp_id = #{cpId};
    </delete>

    <sql id="idsForeach">
        <!-- 根据主键cpId批量操作 -->
        WHERE cp_id in
        <foreach collection="ids" index="index" item="item" separator="," open="(" close=")">
            #{item}
        </foreach>
    </sql>

    <!-- 查询表t_mst_setting_value，（条件查询+分页）列表 -->
    <select id="selectByCond" resultMap="BaseResultMap">
        SELECT
        <include refid="Base_Column_List"/>
        FROM dkic_b.t_mst_setting_value tmsv
        <include refid="Condition"/>
        <if test="pageSize != null and currentPage != null and pageSize != 0 and currentPage != 0">
            limit #{end} offset #{start}
        </if>
    </select>

    <!-- 查询表t_mst_setting_value，（条件查询）个数 -->
    <select id="countByCond" resultType="Long">
        SELECT
        count(1)
        FROM dkic_b.t_mst_setting_value tmsv
        <include refid="Condition"/>
    </select>


    <!-- 根据主键锁定表t_mst_setting_value的一行数据 -->
    <select id="selectByIdForUpdate" resultMap="BaseResultMap">
        SELECT
        <include refid="Base_Column_List"/>
        FROM dkic_b.t_mst_setting_value tmsv
        WHERE cp_id = #{cpId}
        for update
    </select>

    <!-- 根据主键锁定表t_mst_setting_value的多行数据 -->
    <select id="selectByIdsForUpdate" resultMap="BaseResultMap">
        SELECT
        <include refid="Base_Column_List"/>
        FROM dkic_b.t_mst_setting_value
        <include refid="idsForeach"/>
        for update
    </select>

    <insert id="insertBatch">
        insert into dkic_b.t_mst_setting_value
        (
        <trim suffixOverrides=",">
            setting_code,
            setting_value,
            remarks,
            cp_id,
        </trim>
        )
        values
        <foreach collection="list" index="index" item="item" separator=",">
            (
            <trim suffixOverrides=",">
                #{item.settingCode},
                #{item.settingValue},
                #{item.remarks},
                #{item.cpId},
            </trim>
            )
        </foreach>
    </insert>
</mapper>
