<?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.RecPayMapper">

    <!-- 通用设置 -->
    <!-- 通用查询列 -->
    <sql id="Base_Column_List">
        rp_id, rp_no, rp_type, object_id, org_id, staff_id, sum_amt_rec, sum_amt_pay, sum_should_handle, sum_use_receipt_residue, sum_use_payment_residue, sum_amt_receivable_handle, sum_amt_payable_handle, sum_waive_amt, acc_date, annex_paths, remarks, biznis_type, biznis_id, biznis_no, flg_order_handle, flg_lock, make_staff, make_time, flg_valid, cp_id
    </sql>

    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.dk.mdm.model.pojo.mac.RecPay">
        <id column="rp_id" property="rpId"/>
            <result column="rp_no" property="rpNo"/>
            <result column="rp_type" property="rpType"/>
            <result column="object_id" property="objectId" typeHandler="UuidTypeHandler"/>
            <result column="org_id" property="orgId" typeHandler="UuidTypeHandler"/>
            <result column="staff_id" property="staffId" typeHandler="UuidTypeHandler"/>
            <result column="sum_amt_rec" property="sumAmtRec"/>
            <result column="sum_amt_pay" property="sumAmtPay"/>
            <result column="sum_should_handle" property="sumShouldHandle"/>
            <result column="sum_use_receipt_residue" property="sumUseReceiptResidue"/>
            <result column="sum_use_payment_residue" property="sumUsePaymentResidue"/>
            <result column="sum_amt_receivable_handle" property="sumAmtReceivableHandle"/>
            <result column="sum_amt_payable_handle" property="sumAmtPayableHandle"/>
            <result column="sum_waive_amt" property="sumWaiveAmt"/>
            <result column="acc_date" property="accDate" typeHandler="TimestampTypeHandler"/>
            <result column="remarks" property="remarks"/>
            <result column="annex_paths" property="annexPaths" typeHandler="JsonTypeHandler"/>
            <result column="biznis_type" property="biznisType"/>
            <result column="biznis_id" property="biznisId" typeHandler="UuidTypeHandler"/>
            <result column="biznis_no" property="biznisNo"/>
            <result column="flg_order_handle" property="flgOrderHandle"/>
            <result column="flg_lock" property="flgLock"/>
            <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>

    <!-- Response查询映射结果 -->
    <resultMap id="BaseResultMapResponse" type="com.dk.mdm.model.response.mac.RecPayResponse">
        <id column="rp_id" property="rpId"/>
            <result column="rp_no" property="rpNo"/>
            <result column="rp_type" property="rpType"/>
            <result column="object_id" property="objectId" typeHandler="UuidTypeHandler"/>
            <result column="org_id" property="orgId" typeHandler="UuidTypeHandler"/>
            <result column="staff_id" property="staffId" typeHandler="UuidTypeHandler"/>
            <result column="sum_amt_rec" property="sumAmtRec"/>
            <result column="sum_amt_pay" property="sumAmtPay"/>
            <result column="sum_should_handle" property="sumShouldHandle"/>
            <result column="sum_use_receipt_residue" property="sumUseReceiptResidue"/>
            <result column="sum_use_payment_residue" property="sumUsePaymentResidue"/>
            <result column="sum_amt_receivable_handle" property="sumAmtReceivableHandle"/>
            <result column="sum_amt_payable_handle" property="sumAmtPayableHandle"/>
            <result column="sum_waive_amt" property="sumWaiveAmt"/>
            <result column="acc_date" property="accDate" typeHandler="TimestampTypeHandler"/>
            <result column="remarks" property="remarks"/>
            <result column="annex_paths" property="annexPaths" typeHandler="JsonTypeHandler"/>
            <result column="biznis_type" property="biznisType"/>
            <result column="biznis_id" property="biznisId" typeHandler="UuidTypeHandler"/>
            <result column="biznis_no" property="biznisNo"/>
            <result column="flg_order_handle" property="flgOrderHandle"/>
            <result column="flg_lock" property="flgLock"/>
            <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"/>
            <result column="receivable_residue" property="receivableResidue"/>
            <result column="receipt_residue" property="receiptResidue"/>
            <result column="payable_residue" property="payableResidue"/>
            <result column="payment_residue" property="paymentResidue"/>
    </resultMap>

    <!-- 通用条件列 -->
    <sql id="Condition">
        <if test="rpNo != null and rpNo != ''">
            AND t.rp_no LIKE concat('%',my_ex.likequery(#{rpNo}),'%')
        </if>

        <if test="rpType != null and rpType != ''">
            AND t.rp_type = #{rpType}
        </if>
        <if test="objectId != null and objectId != ''">
            AND t.object_id = #{objectId}::uuid
        </if>
        <if test="orgId != null and orgId != ''">
            AND t.org_id = #{orgId}::uuid
        </if>
        <if test="staffId != null and staffId != ''">
            AND t.staff_id = #{staffId}::uuid
        </if>
        <if test="sumAmtRec != null">
            AND t.sum_amt_rec = #{sumAmtRec}
        </if>
        <if test="sumAmtPay != null">
            AND t.sum_amt_pay = #{sumAmtPay}
        </if>
        <if test="sumShouldHandle != null">
            AND t.sum_should_handle = #{sumShouldHandle}
        </if>
        <if test="sumUseReceiptResidue != null">
            AND t.sum_use_receipt_residue = #{sumUseReceiptResidue}
        </if>
        <if test="sumUsePaymentResidue != null">
            AND t.sum_use_payment_residue = #{sumUsePaymentResidue}
        </if>
        <if test="sumAmtReceivableHandle != null">
            AND t.sum_amt_receivable_handle = #{sumAmtReceivableHandle}
        </if>
        <if test="sumAmtPayableHandle != null">
            AND t.sum_amt_payable_handle = #{sumAmtPayableHandle}
        </if>
        <if test="sumWaiveAmt != null">
            AND t.sum_waive_amt = #{sumWaiveAmt}
        </if>
        <if test="accDate != null">
            AND t.acc_date = #{accDate}
        </if>
        <if test="remarks != null and remarks != ''">
            AND t.remarks = #{remarks}
        </if>
        <if test="annexPaths != null and annexPaths != ''">
            AND t.annex_paths = #{annexPaths}
        </if>
        <if test="biznisType != null and biznisType != ''">
            AND t.biznis_type = #{biznisType}
        </if>
        <if test="biznisId != null and biznisId != ''">
            AND t.biznis_id = #{biznisId}::uuid
        </if>
        <if test="biznisNo != null and biznisNo != ''">
            AND t.biznis_no = #{biznisNo}
        </if>
        <if test="flgOrderHandle != null">
            AND t.flg_order_handle = #{flgOrderHandle}
        </if>
        <if test="flgLock != null">
            AND t.flg_lock = #{flgLock}
        </if>
        <if test="makeStaff != null and makeStaff != ''">
            AND t.make_staff = #{makeStaff}
        </if>
        <if test="makeTime != null">
            AND t.make_time = #{makeTime}
        </if>
        <if test="cpId != null">
            AND t.cp_id = #{cpId}
        </if>
        <if test="cusPhone != null and cusPhone != ''">
            AND tmc.cus_phone LIKE concat('%',my_ex.likequery(#{cusPhone}),'%')
        </if>
        <if test="cusName != null and cusName != ''">
            AND tmc.cus_name LIKE concat('%',my_ex.likequery(#{cusName}),'%')
        </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="supName != null and supName != ''">
            AND tmp.sup_name LIKE concat('%',my_ex.likequery(#{supName}),'%')
        </if>
        <if test="rpTypeList != null and rpTypeList.size() > 0">
            AND t.rp_type  =any(#{rpTypeList, typeHandler=StringListTypeHandler})
        </if>
        <if test="staffIds != null and staffIds.size() > 0">
            AND t.staff_id  =any(#{staffIdList, typeHandler=UuidListTypeHandler})
        </if>
        <if test="createtimeStart != null and createtimeEnd != null">
            AND t.op_create_time &gt;= #{createtimeStart}::timestamp with time zone
            AND t.op_create_time &lt; #{createtimeEnd}::timestamp with time zone + interval '1 day'
        </if>
<!--        <if  test="searchText != null">-->
<!--            AND ( t.rp_no  like concat('%', my_ex.likequery(#{searchText}) , '%')-->
<!--            OR   tmc.cus_code  like concat('%', my_ex.likequery(#{searchText}) , '%')-->
<!--            OR  tmc.cus_name  like concat('%', my_ex.likequery(#{searchText}) , '%')-->
<!--            OR   tmc.cus_phone  like concat('%', my_ex.likequery(#{searchText}) , '%')-->
<!--            OR   tmc.address_full  like concat('%', my_ex.likequery(#{searchText}) , '%')-->
<!--            OR  t.remarks like concat('%', my_ex.likequery(#{searchText}) , '%')-->
<!--            )-->
<!--        </if>-->
        <if test="staffName != null and staffName != ''">
            AND tms.staff_name LIKE concat('%',my_ex.likequery(#{staffName}),'%')
        </if>
        <if test="orgName != null and orgName != ''">
            AND tmo.org_name LIKE concat('%',my_ex.likequery(#{orgName}),'%')
        </if>
    </sql>

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

    <!-- 查询表t_mac_rec_pay，（条件查询+分页）列表 -->
    <select id="selectByCond" resultMap="BaseResultMapResponse">
        select t.rp_id,
               t.rp_no,
               t.rp_type,
               sys.f_get_name_i18n(tdk1.kind_name_i18n, #{i18n}) as "rpTypeName",
               t.object_id,
               tmc.cus_code         as "cusCode",
               tmc.cus_name         as "cusName",
               tmc.cus_phone        as "cusPhone",
               tmc.address_full     as "addressFull",
               t.org_id,
               tmo.org_name         as "orgName",
               t.staff_id,
               tms.staff_name       as "staffName",
               t.sum_amt_rec,
               t.sum_amt_pay,
               t.sum_should_handle,
               t.sum_use_receipt_residue,
               t.sum_use_payment_residue,
               t.sum_amt_receivable_handle,
               t.sum_amt_payable_handle,
               t.sum_waive_amt,
               t.acc_date,
               t.remarks,
               t.annex_paths,
               t.biznis_type,
               t.biznis_id,
               t.biznis_no,
               t.flg_order_handle,
               t.flg_lock,
               t.make_staff,
               makestaff.staff_name as "makeStaffName",
               t.make_time,
               t.flg_valid,
               t.cp_id,
                tma.receivable_residue,
                tma.receipt_residue
        from dkic_b.t_mac_rec_pay as t
                 left join dkic_b.t_mst_customer tmc on tmc.cus_id = t.object_id
                 left join sys.t_data_kind as tdk1 on tdk1.kind_code = t.rp_type
                 left join dkic_b.t_mst_org tmo on tmo.org_id = t.org_id
                 left join dkic_b.t_mst_staff tms on tms.staff_id = t.staff_id
                 left join dkic_b.t_mst_staff as makestaff on makestaff.staff_id = t.make_staff
                  LEFT JOIN  dkic_b.t_mac_account tma  on tma.object_id = t.object_id and tma.object_type in ('对象类型-客户')

        where t.rp_type in ('收付款类型-收款', '收付款类型-退收款')
        <include refid="Condition"/>

        <if test="searchText !=null and searchText != ''">
            AND (
            t.rp_no   LIKE concat('%',my_ex.likequery(#{searchText}),'%')
            or tmc.cus_phone LIKE concat('%',my_ex.likequery(#{searchText}),'%')
            or tmc.cus_name LIKE concat('%',my_ex.likequery(#{searchText}),'%')
            or tmo.org_name LIKE concat('%',my_ex.likequery(#{searchText}),'%')
            or tms.staff_name LIKE concat('%',my_ex.likequery(#{searchText}),'%')
            )
        </if>
        order by t.op_create_time desc
        <if test="pageSize != null and currentPage != null and pageSize != 0 and currentPage != 0">
            limit #{end} offset #{start}
        </if>
    </select>

    <!-- 查询表t_mac_rec_pay，（条件查询）个数 -->
    <select id="countByCond" resultType="Long">
        SELECT count(1)
        from dkic_b.t_mac_rec_pay as t
                 left join dkic_b.t_mst_customer tmc on tmc.cus_id = t.object_id
                 left join sys.t_data_kind as tdk1 on tdk1.kind_code = t.rp_type
                 left join dkic_b.t_mst_org tmo on tmo.org_id = t.org_id
                 left join dkic_b.t_mst_staff tms on tms.staff_id = t.staff_id
                 left join dkic_b.t_mst_staff as makestaff on makestaff.staff_id = t.make_staff
        where t.rp_type in ('收付款类型-收款', '收付款类型-退收款')
        <include refid="Condition"/>
        <if test="searchText !=null and searchText != ''">
            AND (
            t.rp_no   LIKE concat('%',my_ex.likequery(#{searchText}),'%')
            or tmc.cus_phone LIKE concat('%',my_ex.likequery(#{searchText}),'%')
            or tmc.cus_name LIKE concat('%',my_ex.likequery(#{searchText}),'%')
            or tmo.org_name LIKE concat('%',my_ex.likequery(#{searchText}),'%')
            or tms.staff_name LIKE concat('%',my_ex.likequery(#{searchText}),'%')
            )
        </if>
    </select>

    <!-- 根据主键查询表t_mac_rec_pay的一行数据 -->
    <select id="selectById" resultMap="BaseResultMapResponse">
        select t.rp_id,
               t.rp_no,
               t.rp_type,
               sys.f_get_name_i18n(tdk1.kind_name_i18n, #{i18n}) as "rpTypeName",
               t.object_id,
               tmc.cus_code         as "cusCode",
               tmc.cus_name         as "cusName",
               tmc.cus_phone        as "cusPhone",
               tmc.address_full     as "addressFull",
               t.org_id,
               tmo.org_name         as "orgName",
               t.staff_id,
               tms.staff_name       as "staffName",
               t.sum_amt_rec,
               t.sum_amt_pay,
               t.sum_should_handle,
               t.sum_use_receipt_residue,
               t.sum_use_payment_residue,
               t.sum_amt_receivable_handle,
               t.sum_amt_payable_handle,
               t.sum_waive_amt,
               t.acc_date,
               t.remarks,
               t.annex_paths,
               t.biznis_type,
               t.biznis_id,
               t.biznis_no,
               t.flg_order_handle,
               t.flg_lock,
               t.make_staff,
               makestaff.staff_name as "makeStaffName",
               t.make_time,
               t.flg_valid,
               t.cp_id,
               tma.receivable_residue,
               tma.receipt_residue
        from dkic_b.t_mac_rec_pay as t
                 left join dkic_b.t_mst_customer tmc on tmc.cus_id = t.object_id
                 left join sys.t_data_kind as tdk1 on tdk1.kind_code = t.rp_type
                 left join dkic_b.t_mst_org tmo on tmo.org_id = t.org_id
                 left join dkic_b.t_mst_staff tms on tms.staff_id = t.staff_id
                 left join dkic_b.t_mst_staff as makestaff on makestaff.staff_id = t.make_staff
                 LEFT JOIN  dkic_b.t_mac_account tma  on tma.object_id =  t.object_id
        where   t.rp_id = #{id}::uuid
    </select>

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

    <!-- 根据主键锁定表t_mac_rec_pay的一行数据 -->
    <select id="selectByBiznisIdForUpdate" resultMap="BaseResultMap">
        SELECT
        <include refid="Base_Column_List"/>
        FROM dkic_b.t_mac_rec_pay
        WHERE flg_valid
          and biznis_id = #{id}::uuid
          and flg_order_handle = #{flgOrderHandle}
        for update
    </select>

    <!-- 根据主键锁定表t_mac_rec_pay的一行数据 -->
    <select id="selectByBiznisId" resultMap="BaseResultMap">
        SELECT
        <include refid="Base_Column_List"/>
        FROM dkic_b.t_mac_rec_pay
        WHERE flg_valid
          and biznis_id = #{id}::uuid
    </select>

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

    <insert id="insertBatch">
        insert into dkic_b.t_mac_rec_pay
        (
        <trim suffixOverrides=",">
            rp_no,
            rp_type,
            object_id,
            org_id,
            staff_id,
            sum_amt_rec,
            sum_amt_pay,
            sum_should_handle,
            sum_use_receipt_residue,
            sum_use_payment_residue,
            sum_amt_receivable_handle,
            sum_amt_payable_handle,
            sum_waive_amt,
            acc_date,
            remarks,
            annex_paths,
            biznis_type,
            biznis_id,
            biznis_no,
            flg_order_handle,
            flg_lock,
            make_staff,
            make_time,
            cp_id,
            op_app_code,
        </trim>
        )
        values
        <foreach collection="list" index="index" item="item" separator=",">
            (
            <trim suffixOverrides=",">
                #{item.rpNo},
                #{item.rpType},
                #{item.objectId}::uuid,
                #{item.orgId}::uuid,
                #{item.staffId}::uuid,
                #{item.sumAmtRec},
                #{item.sumAmtPay},
                #{item.sumShouldHandle},
                #{item.sumUseReceiptResidue},
                #{item.sumUsePaymentResidue},
                #{item.sumAmtReceivableHandle},
                #{item.sumAmtPayableHandle},
                #{item.sumWaiveAmt},
                #{item.accDate},
                #{item.remarks},
                #{item.annexPaths},
                #{item.biznisType},
                #{item.biznisId}::uuid,
                #{item.biznisNo},
                #{item.flgOrderHandle},
                #{item.flgLock},
                #{item.makeStaff}::uuid,
                #{item.makeTime},
                #{item.cpId},
                #{item.opAppCode},
            </trim>
            )
        </foreach>
    </insert>


    <!-- 查询表t_mac_rec_pay，（条件查询+分页）列表 -->
    <select id="selectPaymentByCond" resultMap="BaseResultMapResponse">
        select t.rp_id,
               t.rp_no,
               t.rp_type,
               sys.f_get_name_i18n(tdk1.kind_name_i18n, #{i18n}) as "rpTypeName",
               t.object_id,
               tmp.sup_code         as "supCode",
               tmp.sup_name         as "supName",
               t.org_id,
               tmo.org_name         as "orgName",
               t.staff_id,
               tms.staff_name       as "staffName",
               t.sum_amt_rec,
               t.sum_amt_pay,
               t.sum_should_handle,
               t.sum_use_receipt_residue,
               t.sum_use_payment_residue,
               t.sum_amt_receivable_handle,
               t.sum_amt_payable_handle,
               t.sum_waive_amt,
               t.acc_date,
               t.remarks,
               t.annex_paths,
               t.biznis_type,
               t.biznis_id,
               t.biznis_no,
               t.flg_order_handle,
               t.flg_lock,
               t.make_staff,
               makestaff.staff_name as "makeStaffName",
               t.make_time,
               t.flg_valid,
               t.cp_id,
               tma.payable_residue,
               tma.payment_residue
        from dkic_b.t_mac_rec_pay as t
                 Left join dkic_b.t_mst_supplier tmp on tmp.sup_id = t.object_id
                 left join sys.t_data_kind as tdk1 on tdk1.kind_code = t.rp_type
                 left join dkic_b.t_mst_org tmo on tmo.org_id = t.org_id
                 left join dkic_b.t_mst_staff tms on tms.staff_id = t.staff_id
                 left join dkic_b.t_mst_staff as makestaff on makestaff.staff_id = t.make_staff
                 LEFT JOIN  dkic_b.t_mac_account tma  on tma.object_id = t.object_id and tma.object_type in ('对象类型-供应商')
        where t.rp_type in ('收付款类型-付款', '收付款类型-退付款')
        <include refid="Condition"/>
        <if test="searchText !=null and searchText != ''">
            AND (
            t.rp_no   LIKE concat('%',my_ex.likequery(#{searchText}),'%')
            or tmo.org_name LIKE concat('%',my_ex.likequery(#{searchText}),'%')
            or tmp.sup_name LIKE concat('%',my_ex.likequery(#{searchText}),'%')
            or tms.staff_name LIKE concat('%',my_ex.likequery(#{searchText}),'%')
            )
        </if>
        order by t.op_create_time desc
        <if test="pageSize != null and currentPage != null and pageSize != 0 and currentPage != 0">
            limit #{end} offset #{start}
        </if>
    </select>

    <!-- 查询表t_mac_rec_pay，（条件查询）个数 -->
    <select id="countPaymentByCond" resultType="Long">
        SELECT count(1)
        from dkic_b.t_mac_rec_pay as t
                 Left join dkic_b.t_mst_supplier tmp on tmp.sup_id = t.object_id
                 left join sys.t_data_kind as tdk1 on tdk1.kind_code = t.rp_type
                 left join dkic_b.t_mst_org tmo on tmo.org_id = t.org_id
                 left join dkic_b.t_mst_staff tms on tms.staff_id = t.staff_id
                 left join dkic_b.t_mst_staff as makestaff on makestaff.staff_id = t.make_staff
        where t.rp_type in ('收付款类型-付款', '收付款类型-退付款')
        <include refid="Condition"/>
        <if test="searchText !=null and searchText != ''">
            AND (
            t.rp_no   LIKE concat('%',my_ex.likequery(#{searchText}),'%')
            or tmo.org_name LIKE concat('%',my_ex.likequery(#{searchText}),'%')
            or tmp.sup_name LIKE concat('%',my_ex.likequery(#{searchText}),'%')
            or tms.staff_name LIKE concat('%',my_ex.likequery(#{searchText}),'%')
            )
        </if>
    </select>

    <!-- 删除收款单 -->
    <delete id="deleteById">
        DELETE FROM dkic_b.t_mac_rec_pay
        WHERE rp_id = #{id}::uuid;
    </delete>
</mapper>
