<?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.mac.MacTransferMapper">

    <!-- 通用设置 -->
    <!-- 通用查询列 -->
    <sql id="Base_Column_List">
        trf_id, trf_no, trf_type, org_id, staff_id, acc_date, remarks, annex_paths, make_staff, make_time, flg_valid, cp_id
    </sql>

    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.dk.mdm.model.pojo.mac.MacTransfer">
        <id column="trf_id" property="trfId"/>
            <result column="trf_no" property="trfNo"/>
            <result column="trf_type" property="trfType"/>
            <result column="org_id" property="orgId" typeHandler="UuidTypeHandler"/>
            <result column="staff_id" property="staffId" typeHandler="UuidTypeHandler"/>
            <result column="acc_date" property="accDate" typeHandler="TimestampTypeHandler"/>
            <result column="remarks" property="remarks"/>
            <result column="annex_paths" property="annexPaths" typeHandler="JsonTypeHandler"/>
            <result column="make_staff" property="makeStaff" typeHandler="UuidTypeHandler"/>
            <result column="make_time" property="makeTime" typeHandler="TimestampTypeHandler"/>
            <result column="flg_valid" property="flgValid"/>
            <result column="cp_id" property="cpId"/>
    </resultMap>

    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMapResponse" type="com.dk.mdm.model.response.mac.MacTransferResponse">
        <id column="trf_id" property="trfId"/>
            <result column="trf_no" property="trfNo"/>
            <result column="trf_type" property="trfType"/>
            <result column="org_id" property="orgId" typeHandler="UuidTypeHandler"/>
            <result column="staff_id" property="staffId" typeHandler="UuidTypeHandler"/>
            <result column="acc_date" property="accDate" typeHandler="TimestampTypeHandler"/>
            <result column="remarks" property="remarks"/>
            <result column="annex_paths" property="annexPaths" typeHandler="JsonTypeHandler"/>
            <result column="make_staff" property="makeStaff" typeHandler="UuidTypeHandler"/>
            <result column="make_time" property="makeTime" typeHandler="TimestampTypeHandler"/>
            <result column="flg_valid" property="flgValid"/>
            <result column="cp_id" property="cpId"/>
    </resultMap>

    <!-- 通用条件列 -->
    <sql id="Condition">
        <where>
            <if test="trfNo != null and trfNo != ''">
                AND t.trf_no LIKE concat('%',my_ex.likequery(#{trfNo}),'%')
            </if>
            <if test="trfType != null">
                AND t.trf_type = #{trfType}
            </if>
            <if test="orgId != null and orgId != ''">
                AND org_id = #{orgId}
            </if>
            <if test="staffId != null and staffId != ''">
                AND staff_id = #{staffId}
            </if>
            <if test="accDate != null">
                AND t.acc_date = #{accDate}
            </if>
            <if test="remarks != null and remarks != ''">
                AND t.remarks LIKE concat('%',my_ex.likequery(#{remarks}),'%')
            </if>
            <if test="annexPaths != null and annexPaths != ''">
                AND t.annex_paths = #{annexPaths}
            </if>
            <if test="makeStaff != null and makeStaff != ''">
                AND t.make_staff = #{makeStaff}
            </if>
            <if test="cpId != null">
                AND t.cp_id = #{cpId}
            </if>
            <if test="orgIdList != null and orgIdList.size() > 0">
                AND t.org_id  =any(#{orgIdList, typeHandler=uuidListTypeHandler})
            </if>
            <if test="staffIdList != null and staffIdList.size() > 0">
                AND t.staff_id  =any(#{staffIdList, typeHandler=uuidListTypeHandler})
            </if>
            <if test="makeTimeStart != null and makeTimeEnd != null">
                AND t.make_time &gt;= #{makeTimeStart}::timestamp with time zone
                AND t.make_time &lt; #{makeTimeEnd}::timestamp with time zone + interval '1 day'
            </if>
            <if test="flgValidList != null and flgValidList.size()>0">
                AND t.flg_valid =any(#{flgValidList, typeHandler=BooleanListTypeHandler})
            </if>
            <if test="searchText !=null">
                AND   t.trf_no LIKE concat('%',my_ex.likequery(#{searchText}), '%')
            </if>
            <if test="orgName !=null">
                AND   tmo.org_name LIKE concat('%',my_ex.likequery(#{orgName}), '%')
            </if>
            <if test="staffName !=null">
                AND   tms.staff_name LIKE concat('%',my_ex.likequery(#{staffName}), '%')
            </if>
            <if test="trfOutMacName !=null">
                AND   tmmaout.mac_name LIKE concat('%',my_ex.likequery(#{trfOutMacName}), '%')
            </if>
            <if test="trfInMacName !=null">
                AND   tmmain.mac_name LIKE concat('%',my_ex.likequery(#{trfInMacName}), '%')
            </if>
            <if test="accDateStart != null and accDateEnd != null">
                AND t.acc_date &gt;= #{accDateStart}::timestamp with time zone
                AND t.acc_date &lt; #{accDateEnd}::timestamp with time zone + interval '1 day'
            </if>
        </where>
    </sql>

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

    <!-- 查询表t_mac_transfer，（条件查询+分页）列表 -->
    <select id="selectByCond" resultMap="BaseResultMapResponse">
        SELECT t.trf_id,
               t.trf_no,
               t.trf_type,
               case when t.trf_type = 0 then '期初' else '转账' end as "trfTypeName",
               t.org_id,
               t.staff_id,
               t.acc_date,
               t.remarks,
               t.annex_paths,
               t.make_staff,
               t.make_time,
               t.flg_valid,
               t.cp_id,
               tmo.org_name         as "orgName",
               tms.staff_name       as "staffName",
               makestaff.staff_name as "makeStaffName"
        FROM dkic_b.t_mac_transfer as t
                left join dkic_b.t_mac_transfer_item tmti ON t.trf_id = tmti.trf_id
                left join dkic_b.t_mst_money_account tmmain ON tmti.trf_in_mac = tmmain.mac_id
                left join dkic_b.t_mst_money_account tmmaout ON tmti.trf_out_mac = tmmaout.mac_id
                left join dkic_b.t_mst_org tmo on t.org_id = tmo.org_id
                left join dkic_b.t_mst_staff tms on t.staff_id = tms.staff_id
                left join dkic_b.t_mst_staff as makestaff on t.make_staff = makestaff.staff_id
       <include refid="Condition"/>
        GROUP BY  T .trf_id ,
        tmo.org_name  ,
        tms.staff_name   ,
        makestaff.staff_name
        order by t.make_time desc
        <if test="pageSize != null and currentPage != null and pageSize != 0 and currentPage != 0">
            limit #{end} offset #{start}
        </if>
    </select>

    <!-- 查询表t_mac_transfer，（条件查询）个数 -->
    <select id="countByCond" resultType="Long">
        SELECT count(1)
        FROM dkic_b.t_mac_transfer as t
        left join dkic_b.t_mac_transfer_item tmti ON t.trf_id = tmti.trf_id
        left join dkic_b.t_mst_money_account tmmain ON tmti.trf_in_mac = tmmain.mac_id
        left join dkic_b.t_mst_money_account tmmaout ON tmti.trf_out_mac = tmmaout.mac_id
        left join dkic_b.t_mst_org tmo on t.org_id = tmo.org_id
        left join dkic_b.t_mst_staff tms on t.staff_id = tms.staff_id
        left join dkic_b.t_mst_staff as makestaff on t.make_staff = makestaff.staff_id
        <include refid="Condition"/>
    </select>

    <!-- 根据主键查询表t_mac_transfer的一行数据 -->
    <select id="selectById" resultMap="BaseResultMapResponse">
        SELECT t.trf_id,
               t.trf_no,
               t.trf_type,
               case when t.trf_type = 0 then '期初' else '转账' end as "trfTypeName",
               t.org_id,
               t.staff_id,
               t.acc_date,
               t.remarks,
               t.annex_paths,
               t.make_staff,
               t.make_time,
               t.flg_valid,
               t.cp_id,
               tmo.org_name         as "orgName",
               tms.staff_name       as "staffName",
               makestaff.staff_name as "makeStaffName"
        FROM dkic_b.t_mac_transfer as t
                 left join dkic_b.t_mst_org tmo on t.org_id = tmo.org_id
                 left join dkic_b.t_mst_staff tms on t.staff_id = tms.staff_id
                 left join dkic_b.t_mst_staff as makestaff on t.make_staff = makestaff.staff_id
        WHERE trf_id = #{id}::uuid
    </select>

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

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

    <insert id="insertBatch">
        insert into dkic_b.t_mac_transfer
        (
        <trim suffixOverrides=",">
            trf_no,
            trf_type,
            org_id,
            staff_id,
            acc_date,
            remarks,
            annex_paths,
            make_staff,
            make_time,
            cp_id,
            op_app_code,
        </trim>
        )
        values
        <foreach collection="list" index="index" item="item" separator=",">
            (
            <trim suffixOverrides=",">
                #{item.trfNo},
                #{item.trfType},
                #{item.orgId}::uuid,
                #{item.staffId}::uuid,
                #{item.accDate},
                #{item.remarks},
                #{item.annexPaths},
                #{item.makeStaff}::uuid,
                #{item.makeTime},
                #{item.cpId},
                #{item.opAppCode},
            </trim>
            )
        </foreach>
    </insert>
</mapper>
