<?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="pwc.taxtech.atms.invoice.OutputInvoiceMapper">
    <resultMap id="OutputInvoiceInfoDto" type="pwc.taxtech.atms.vat.dpo.OutputVATInvoiceInfoDto">
        <id column="Invoice_ID" jdbcType="VARCHAR" property="invoiceId"/>
        <result column="INVOICE_TYPE" jdbcType="INTEGER" property="invoiceType"/>
        <result column="INVOICE_TYPE_NAME" jdbcType="VARCHAR" property="invoiceTypeName"/>
        <result column="CLASS_CODE" jdbcType="VARCHAR" property="classCode"/>
        <result column="INVOICE_NUMBER" jdbcType="VARCHAR" property="invoiceNumber"/>
        <result column="FPQQLSH" jdbcType="VARCHAR" property="fpqqlsh"/>
        <result column="BUYER_NAME" jdbcType="VARCHAR" property="buyerName"/>
        <result column="BUYER_TAX_NUMBER" jdbcType="VARCHAR" property="buyerTaxNumber"/>
        <result column="BANK_ACCOUNT" jdbcType="VARCHAR" property="bankAccount"/>
        <result column="PHONE_NUM" jdbcType="VARCHAR" property="phoneNum"/>
        <result column="INVOICE_DATE" jdbcType="TIMESTAMP" property="invoiceDate"/>
        <result column="CODE_VERSION" jdbcType="VARCHAR" property="codeVersion"/>
        <result column="PRODUCT_NAME" jdbcType="VARCHAR" property="productName"/>
        <result column="DOCUMENT_NUM" jdbcType="VARCHAR" property="documentNum"/>
        <result column="PRODUCT_STANDARD" jdbcType="VARCHAR" property="productStandard"/>
        <result column="UNIT" jdbcType="VARCHAR" property="unit"/>
        <result column="QUANTITY" jdbcType="INTEGER" property="quantity" javaType="java.lang.Integer"/>
        <result column="UNIT_PRICE" jdbcType="DOUBLE" property="unitPrice" javaType="java.lang.Double"/>
        <result column="AMOUNT" jdbcType="DECIMAL" property="amount" javaType="java.math.BigDecimal"/>
        <result column="TAX_RATE" jdbcType="DECIMAL" property="taxRate" javaType="java.math.BigDecimal"/>
        <result column="TAX_AMOUNT" jdbcType="DECIMAL" property="taxAmount" javaType="java.math.BigDecimal"/>
        <result column="TAX_CLASS_CODE" jdbcType="VARCHAR" property="taxClassCode"/>
        <result column="PERIOD_ID" jdbcType="INTEGER" property="periodId"/>
        <result column="IS_DUPLICATE" jdbcType="INTEGER" property="isDuplicate"/>
        <result column="AMOUNT_DIFFERENCE" jdbcType="DECIMAL" property="amountDifference"/>
    </resultMap>

    <select id="selectOutputInvoiceInfoLeftJoinItem" parameterType="pwc.taxtech.atms.vat.dpo.QueryOutputDto" resultMap="OutputInvoiceInfoDto">
        SELECT
        O.ID AS INVOICE_ID,
        O.FPLXDM AS INVOICE_TYPE,
        O.FPDM AS CLASS_CODE,
        O.FPHM AS INVOICE_NUMBER,
        O.FPQQLSH,
        O.GFMC AS BUYER_NAME,
        O.GFSH AS BUYER_TAX_NUMBER,
        O.GFYHZH AS BANK_ACCOUNT,
        O.GFDZDH AS PHONE_NUM,
        to_date(O.KPRQ,'yyyy-mm-dd hh24:mi:ss') AS INVOICE_DATE,
        /*nvl (
        OI.CODE_VERSION,
        ''
        )
        AS CODE_VERSION,*/
        nvl (
        OI.SPMC,
        ''
        )
        AS PRODUCT_NAME,
        nvl (
        OI.MXXH,
        ''
        )
        AS DOCUMENT_NUM,
        nvl (
        OI.GGXH,
        ''
        )
        AS PRODUCT_STANDARD,
        nvl (
        OI.DW,
        ''
        )
        AS UNIT,
        nvl (
        OI.SL,
        ''
        )
        AS QUANTITY,
        to_number(OI.DJ)
        AS UNIT_PRICE,
        to_number(OI.JE) AS AMOUNT,
        to_number(OI.SLV) AS TAX_RATE,
        to_number(OI.SE)
        AS TAX_AMOUNT,
        nvl (
        OI.SSFLDM,
        ''
        )
        AS TAX_CLASS_CODE
        FROM
        OUTPUT_INVOICE O
        LEFT JOIN
        OUTPUT_INVOICE_DETAIL OI
        ON
        O.FPQQLSH = OI.FPQQLSH
        WHERE
        1=1
        <!--<if test="queryDto.periodStart">-->
            <!--AND O.PERIOD_ID &gt;= #{queryDto.periodStart,jdbcType=VARCHAR}-->
        <!--</if>-->
        <!--<if test="queryDto.periodEnd">-->
            <!--AND O.PERIOD_ID &lt;= #{queryDto.periodEnd,jdbcType=VARCHAR}-->
        <!--</if>-->
        <if test="productName!=null and productName!=''">
            AND OI.SPMC LIKE concat (
            '%',
            #{productName,jdbcType=VARCHAR,'%'}
            )
        </if>
    </select>

    <resultMap id="outputInvoiceDto" type="pwc.taxtech.atms.vat.dpo.OutputInvoiceDto">
        <id property="invoiceID" jdbcType="VARCHAR" column="INVOICE_ID"/>
        <association property="invoice" javaType="pwc.taxtech.atms.vat.entity.OutputInvoice">
            <id column="INVOICEID" jdbcType="VARCHAR" property="ID"/>
            <id column="FPQQLSH" jdbcType="VARCHAR" property="FPQQLSH" />
            <result column="FPDM" jdbcType="VARCHAR" property="FPDM" />
            <result column="FPHM" jdbcType="VARCHAR" property="FPHM" />
            <result column="KPRQ" jdbcType="VARCHAR" property="KPRQ" />
            <result column="FPLXDM" jdbcType="VARCHAR" property="FPLXDM" />
            <result column="EWM" jdbcType="VARCHAR" property="EWM" />
            <result column="JQBH" jdbcType="VARCHAR" property="JQBH" />
            <result column="JYM" jdbcType="VARCHAR" property="JYM" />
            <result column="GFMC" jdbcType="VARCHAR" property="GFMC" />
            <result column="GFSH" jdbcType="VARCHAR" property="GFSH" />
            <result column="GFDZDH" jdbcType="VARCHAR" property="GFDZDH" />
            <result column="GFYHZH" jdbcType="VARCHAR" property="GFYHZH" />
            <result column="XFSH" jdbcType="VARCHAR" property="XFSH" />
            <result column="XFMC" jdbcType="VARCHAR" property="XFMC" />
            <result column="XFDZDH" jdbcType="VARCHAR" property="XFDZDH" />
            <result column="XFYHZH" property="XFYHZH" />
            <result column="BZ" jdbcType="VARCHAR" property="BZ" />
            <result column="SKR" jdbcType="VARCHAR" property="SKR" />
            <result column="FHR" jdbcType="VARCHAR" property="FHR" />
            <result column="KPR" jdbcType="VARCHAR" property="KPR" />
            <result column="KDDH" jdbcType="VARCHAR" property="KDDH" />
            <result column="KDUUID" jdbcType="VARCHAR" property="KDUUID" />
            <result column="FPLX" jdbcType="VARCHAR" property="FPLX" />
            <result column="KPZT" jdbcType="VARCHAR" property="KPZT" />
            <result column="FPZT" jdbcType="VARCHAR" property="FPZT" />
            <result column="YFPDM" jdbcType="VARCHAR" property="YFPDM" />
            <result column="YFPHM" jdbcType="VARCHAR" property="YFPHM" />
            <result column="GFGSBM" jdbcType="VARCHAR" property="GFGSBM" />
            <result column="XFGSBM" jdbcType="VARCHAR" property="XFGSBM" />
            <result column="SPBH" jdbcType="VARCHAR" property="SPBH" />
            <result column="XTLY" jdbcType="VARCHAR" property="XTLY" />
            <result column="CJSJ" jdbcType="VARCHAR" property="CJSJ" />
            <result column="INVOICE_HJJE" jdbcType="VARCHAR" property="HJJE" />
            <result column="HJSE" jdbcType="VARCHAR" property="HJSE" />
            <result column="JSHJ" jdbcType="VARCHAR" property="JSHJ" />
            <result column="XXBBH" jdbcType="VARCHAR" property="XXBBH" />
            <result column="DYZT" jdbcType="VARCHAR" property="DYZT" />
            <result column="GDJLH" jdbcType="VARCHAR" property="GDJLH" />
            <result column="INVOICE_ZKJE" jdbcType="VARCHAR" property="ZKJE" />
            <result column="INVOICE_ZKSE" jdbcType="VARCHAR" property="ZKSE" />
            <result column="ZKJSHJ" jdbcType="VARCHAR" property="ZKJSHJ" />
            <result column="INVOICE_SLV" jdbcType="VARCHAR" property="SLV" />
            <result column="QY" jdbcType="VARCHAR" property="QY" />
            <result column="JSZT" jdbcType="VARCHAR" property="JSZT" />
            <result column="KDGS" jdbcType="VARCHAR" property="KDGS" />
            <result column="SHZT" jdbcType="VARCHAR" property="SHZT" />
            <result column="THKPSQ" jdbcType="VARCHAR" property="THKPSQ" />
            <result column="JSFJ" jdbcType="VARCHAR" property="JSFJ" />
            <result column="SQR" jdbcType="VARCHAR" property="SQR" />
            <result column="BSCDM" jdbcType="VARCHAR" property="BSCDM" />
            <result column="BSC" jdbcType="VARCHAR" property="BSC" />
            <result column="QYDM" jdbcType="VARCHAR" property="QYDM" />
            <result column="SQBH" jdbcType="VARCHAR" property="SQBH" />
            <result column="HTBH" jdbcType="VARCHAR" property="HTBH" />
            <result column="SQRQ" jdbcType="VARCHAR" property="SQRQ" />
            <result column="YZRQ" jdbcType="VARCHAR" property="YZRQ" />
        </association>
        <association property="invoiceDetail" javaType="pwc.taxtech.atms.vat.entity.OutputInvoiceDetail">
            <id column="DETAIL_ID" property="ID"/>
            <result column="INVOICE_FPQQLSH" property="FPQQLSH" />
            <result column="SPMC" property="SPMC" />
            <result column="GGXH" property="GGXH" />
            <result column="DW" property="DW" />
            <result column="DJ" property="DJ" />
            <result column="SL" property="SL" />
            <result column="JE" property="JE" />
            <result column="ITEM_SLV" property="SLV" />
            <result column="SE" property="SE" />
            <result column="HSBZ" property="HSBZ" />
            <result column="LSLBS" property="LSLBS" />
            <result column="YHZCBS" property="YHZCBS" />
            <result column="YHZCMC" property="YHZCMC" />
            <result column="MXXH" property="MXXH" />
            <result column="FPHXZ" property="FPHXZ" />
            <result column="SSFLDM" property="SSFLDM" />
            <result column="ZXBM" property="ZXBM" />
            <result column="ZKHJJE" property="ZKHJJE" />
            <result column="ZKSE" property="ZKSE" />
            <result column="ZKJE" property="ZKJE" />
            <result column="HJJE" property="HJJE" />
            <result column="JHH" property="JHH" />
            <result column="XSDD" property="XSDD" />
            <result column="HSJUUID" property="HSJUUID" />
        </association>
    </resultMap>

    <select id="getOutputInvoiceWithDetail" resultMap="outputInvoiceDto">
        SELECT
        INVOICE.ID AS INVOICEID,
        INVOICE.FPQQLSH,
        INVOICE.FPDM,
        INVOICE.FPHM,
        INVOICE.KPRQ,
        INVOICE.FPLXDM,
        INVOICE.EWM,
        INVOICE.JQBH,
        INVOICE.JYM,
        INVOICE.GFMC,
        INVOICE.GFSH,
        INVOICE.GFDZDH,
        INVOICE.GFYHZH,
        INVOICE.XFSH,
        INVOICE.XFMC,
        INVOICE.XFDZDH,
        INVOICE.XFYHZH,
        INVOICE.BZ,
        INVOICE.SKR,
        INVOICE.FHR,
        INVOICE.KPR,
        INVOICE.FPLX,
        INVOICE.FPZT,
        INVOICE.SPBH,
        INVOICE.XTLY,
        INVOICE.CJSJ,
        INVOICE.HJJE AS INVOICE_HJJE,
        INVOICE.HJSE,
        INVOICEDETAIL.ID AS DETAIL_ID,
        INVOICEDETAIL.FPQQLSH AS INVOICE_FPQQLSH,
        INVOICEDETAIL.SPMC,
        INVOICEDETAIL.GGXH,
        INVOICEDETAIL.DW,
        INVOICEDETAIL.DJ,
        INVOICEDETAIL.SL,
        INVOICEDETAIL.JE,
        INVOICEDETAIL.SLV AS ITEM_SLV,
        INVOICEDETAIL.SE,
        INVOICEDETAIL.HSBZ,
        INVOICEDETAIL.LSLBS,
        INVOICEDETAIL.YHZCBS,
        INVOICEDETAIL.YHZCMC,
        INVOICEDETAIL.MXXH,
        INVOICEDETAIL.FPHXZ,
        INVOICEDETAIL.SSFLDM,
        INVOICEDETAIL.ZXBM,
        INVOICEDETAIL.ZKHJJE,
        INVOICEDETAIL.ZKSE,
        INVOICEDETAIL.ZKJE,
        INVOICEDETAIL.HJJE,
        INVOICEDETAIL.JHH,
        INVOICEDETAIL.XSDD,
        INVOICEDETAIL.HSJUUID
        FROM
        OUTPUT_INVOICE INVOICE
        JOIN OUTPUT_INVOICE_DETAIL INVOICEDETAIL ON INVOICE.FPQQLSH = INVOICEDETAIL.FPQQLSH
        WHERE
        INVOICE.FPZT != '1'
        AND 1 = 1 UNION ALL
        SELECT
        INVOICE.ID AS INVOICEID,
        INVOICE.FPQQLSH,
        INVOICE.FPDM,
        INVOICE.FPHM,
        INVOICE.KPRQ,
        INVOICE.FPLXDM,
        INVOICE.EWM,
        INVOICE.JQBH,
        INVOICE.JYM,
        INVOICE.GFMC,
        INVOICE.GFSH,
        INVOICE.GFDZDH,
        INVOICE.GFYHZH,
        INVOICE.XFSH,
        INVOICE.XFMC,
        INVOICE.XFDZDH,
        INVOICE.XFYHZH,
        INVOICE.BZ,
        INVOICE.SKR,
        INVOICE.FHR,
        INVOICE.KPR,
        INVOICE.FPLX,
        INVOICE.FPZT,
        INVOICE.SPBH,
        INVOICE.XTLY,
        INVOICE.CJSJ,
        INVOICE.HJJE AS INVOICE_HJJE,
        INVOICE.HJSE,
        INVOICEDETAIL.ID AS DETAIL_ID,
        INVOICEDETAIL.FPQQLSH AS INVOICE_FPQQLSH,
        INVOICEDETAIL.SPMC,
        INVOICEDETAIL.GGXH,
        INVOICEDETAIL.DW,
        INVOICEDETAIL.DJ,
        INVOICEDETAIL.SL,
        INVOICEDETAIL.JE,
        INVOICEDETAIL.SLV AS ITEM_SLV,
        INVOICEDETAIL.SE,
        INVOICEDETAIL.HSBZ,
        INVOICEDETAIL.LSLBS,
        INVOICEDETAIL.YHZCBS,
        INVOICEDETAIL.YHZCMC,
        INVOICEDETAIL.MXXH,
        INVOICEDETAIL.FPHXZ,
        INVOICEDETAIL.SSFLDM,
        INVOICEDETAIL.ZXBM,
        INVOICEDETAIL.ZKHJJE,
        INVOICEDETAIL.ZKSE,
        INVOICEDETAIL.ZKJE,
        INVOICEDETAIL.HJJE,
        INVOICEDETAIL.JHH,
        INVOICEDETAIL.XSDD,
        INVOICEDETAIL.HSJUUID
        FROM
        OUTPUT_FPXXTB INVOICE
        JOIN OUTPUT_INVOICE_DETAIL INVOICEDETAIL ON INVOICE.FPQQLSH = INVOICEDETAIL.FPQQLSH
        ORDER BY
        FPHM
    </select>


    <resultMap id="outputInvoiceDataSourceDto" type="pwc.taxtech.atms.vat.dpo.OutputInvoiceDataSourceDto">
        <id column="id" jdbcType="VARCHAR" property="id"/>
        <result column="AMOUNT" jdbcType="VARCHAR" property="amount"/>
        <result column="RESULT_TYPE" jdbcType="VARCHAR" property="resultType"/>
        <result column="TAX_RATE" jdbcType="VARCHAR" property="taxRate"/>
        <result column="TAX_AMOUNT" jdbcType="VARCHAR" property="taxAmount"/>
        <result column="BUYER_NAME" jdbcType="VARCHAR" property="buyerName"/>
        <result column="INVOICE_CODE" jdbcType="VARCHAR" property="invoiceCode"/>
        <result column="INVOICE_NUMBER" jdbcType="VARCHAR" property="invoiceNumber"/>
        <result column="INVOICE_DATE" jdbcType="VARCHAR" property="invoiceDate"/>
        <result column="INVOICE_TYPE" jdbcType="VARCHAR" property="invoiceType"/>
    </resultMap>

    <select id="selectOutputInvoiceAndItem" resultMap="outputInvoiceDataSourceDto">
        SELECT
        OI.ID AS id,
        OVII.JE AS AMOUNT,
        1 AS RESULT_TYPE,
        OVII.SE AS TAX_AMOUNT,
        OVII.SLV AS TAX_RATE,
        OI.GFMC AS BUYER_NAME,
        OI.FPDM AS INVOICE_CODE,
        OI.FPHM AS INVOICE_NUMBER,
        OI.KPRQ AS INVOICE_DATE,
        OI.FPLXDM AS INVOICE_TYPE
        FROM
        OUTPUT_INVOICE_DETAIL OVII
        JOIN
        OUTPUT_INVOICE OI
        ON
        OVII.FPQQLSH = OI.FPQQLSH
    </select>

</mapper>