<?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="cn.ezhizao.project.business.receiveTicket.mapper.BizFinancialReceiveTicketMapper">

    <resultMap type="cn.ezhizao.project.business.receiveTicket.domain.BizFinancialReceiveTicket" id="BizFinancialReceiveTicketResult">
        <id column="id" property="id"/>
        <result column="company_id" jdbcType="BIGINT" property="companyId" />
        <association property="serviceName" select="getServiceName" column="company_id" />
        <association property="socialCreditCode" select="getSocialCreditCode" column="company_id"/>
    </resultMap>
    <resultMap type="cn.ezhizao.project.business.receiveTicket.domain.BizFinancialReceiveTicket" id="BizFinancialReceiveTicketResult2">
        <id column="id" property="id"/>
        <result column="company_id" jdbcType="BIGINT" property="companyId" />
    </resultMap>

    <select id="getList" parameterType="BizFinancialReceiveTicket" resultMap="BizFinancialReceiveTicketResult">
        SELECT
        t1.*, t2.name as company_name,t2.customer_label_id, t4.lable as customerLabelName,
<!--        (select concat(frtd.year, '-', frtd.month) from biz_financial_receive_ticket_detail frtd where frtd.financial_receive_ticket_id = t1.id order by year desc, month desc limit 1) currentDate,-->
        (select concat(bwor.year, '年', bwor.month, '月') from biz_work_order_record bwor where bwor.work_order_id = t1.work_order_id order by year desc, month desc limit 1) currentDate,
        t3.account_name as from_company_name, t2.tax_type, t8.account_name as toTenantName,
        t5.verifier_id,
        t6.nick_name as verifierName,
        t5.verifier_time,
        (t5.income_ticket+t5.cost_ticket+t5.fee_ticket_number+t5.ssaf_ticket+t5.salary_ticket+t5.bank_copy_number+t5.bank_slips_number+t5.other_ticket) as sumNumber
        from biz_financial_receive_ticket t1
        left join biz_company t2 on t2.id = t1.company_id
        left join biz_tenant t3 on t3.id = t1.tenant_id
        left join biz_lable t4 on t4.id = t2.customer_label_id
        left join biz_financial_receive_ticket_detail t5 on t5.financial_receive_ticket_id = t1.id
        and t5.deleted = 0 and t5.month = #{month} and t5.year = #{year} and t5.financial_receive_ticket_id = t1.id
        left join sys_user t6 on t6.user_id = t5.verifier_id
        left join biz_entrust t7 on t7.work_order_id = t1.work_order_id and t7.deleted = 0 and  date_format(t7.current_month, '%Y%m') = concat(#{year}, #{month})
        left join biz_tenant t8 on t8.id = t7.to_tenant_id
        WHERE
        t1.deleted = 0
        <if test="id != null">
            AND t1.id = #{id}
        </if>
        <if test="principal != null and principal != ''">
            AND (t2.leader_id=#{principal} OR t2.adviser_id=#{principal})
        </if>
        <if test="isZero != null">
            AND t2.is_zero = #{isZero}
        </if>
        <if test="verifierName != null">
            AND  t6.nick_name like concat('%', #{verifierName}, '%')
        </if>
        <if test="dateFilter != null and dateFilter.size()>0 ">
            AND  (
            DATE_FORMAT(t5.verifier_time,'%Y-%m-%d') &gt;= #{dateFilter[0]}
            AND
            DATE_FORMAT(t5.verifier_time,'%Y-%m-%d') &lt;= #{dateFilter[1]}
            )
        </if>
        <if test="customerLabelId != null">
            AND t2.customer_label_id = #{customerLabelId}
        </if>
        <if test="companyName != null and companyName != ''">
            AND (t2.name like concat('%', #{companyName}, '%'))
        </if>
        <if test="keyword != null and keyword != ''">
            AND (t2.name like concat('%', #{keyword}, '%') or t2.code like concat('%', #{keyword}, '%'))
        </if>
        <if test="taxType != null and taxType != ''">
            AND t2.tax_type = #{taxType}
        </if>
        <if test="fromCompanyName != null and fromCompanyName != ''">
            AND (t3.account_name like concat('%', #{fromCompanyName}, '%'))
        </if>
        <if test="month != null and year != null">
            <if test="tenantId != null">
                AND exists (select 1 from biz_entrust eb
                where eb.deleted = 0
                and (eb.to_tenant_id = #{tenantId} or eb.from_tenant_id = #{tenantId})
                and date_format(eb.current_month, '%Y%m') = concat(#{year}, #{month})
                and eb.work_order_id = t1.work_order_id
                )
            </if>
            <if test="status != null and status != 0">
                AND exists (select 1 from biz_financial_receive_ticket_detail fsd where fsd.financial_receive_ticket_id = t1.id and
                fsd.month = #{month} and fsd.year = #{year} and fsd.status = #{status} <include refid="detailConditionSql" />)
            </if>
            <if test="status != null and status == 0">
                AND not exists (select 1 from biz_financial_receive_ticket_detail fsd where fsd.financial_receive_ticket_id = t1.id and
                fsd.month = #{month} and fsd.year = #{year})
            </if>
        </if>
    </select>

    <select id="getServiceName" resultType="String">
        SELECT s.nick_name FROM sys_user s
        WHERE s.user_id =(SELECT leader_id  FROM biz_company WHERE id=#{company_id})
    </select>

    <select id="getSocialCreditCode" resultType="String">
        SELECT c.social_credit_code FROM biz_company c
        WHERE c.id =#{company_id}
    </select>
    <select id="getList2"
            parameterType="BizFinancialReceiveTicket" resultMap="BizFinancialReceiveTicketResult2">
            SELECT
            t1.*, t2.name as company_name,t2.customer_label_id, t4.lable as customerLabelName,
            <!--        (select concat(frtd.year, '-', frtd.month) from biz_financial_receive_ticket_detail frtd where frtd.financial_receive_ticket_id = t1.id order by year desc, month desc limit 1) currentDate,-->
            (select concat(bwor.year, '年', bwor.month, '月') from biz_work_order_record bwor where bwor.work_order_id = t1.work_order_id order by year desc, month desc limit 1) currentDate,
            t3.account_name as from_company_name, t2.tax_type,
            t5.verifier_id,
            t6.nick_name as verifierName,
            t5.verifier_time,
            (t5.income_ticket+t5.cost_ticket+t5.fee_ticket_number+t5.ssaf_ticket+t5.salary_ticket+t5.bank_copy_number+t5.bank_slips_number+t5.other_ticket) as sumNumber
            from biz_financial_receive_ticket t1
            left join biz_company t2 on t2.id = t1.company_id
            left join biz_tenant t3 on t3.id = t1.tenant_id
            left join biz_lable t4 on t4.id = t2.customer_label_id
            left join biz_financial_receive_ticket_detail t5 on t5.financial_receive_ticket_id = t1.id
            and t5.deleted = 0 and t5.month = #{month} and t5.year = #{year} and t5.financial_receive_ticket_id = t1.id
            left join sys_user t6 on t6.user_id = t5.verifier_id
            WHERE
            t1.deleted = 0
            <if test="id != null">
                AND t1.id = #{id}
            </if>
            <if test="principal != null and principal != ''">
                AND (t2.leader_id=#{principal} OR t2.adviser_id=#{principal})
            </if>
            <if test="isZero != null">
                AND t2.is_zero = #{isZero}
            </if>
            <if test="verifierName != null">
                AND  t6.nick_name like concat('%', #{verifierName}, '%')
            </if>
            <if test="dateFilter != null and dateFilter.size()>0 ">
                AND  (
                DATE_FORMAT(t5.verifier_time,'%Y-%m-%d') &gt;= #{dateFilter[0]}
                AND
                DATE_FORMAT(t5.verifier_time,'%Y-%m-%d') &lt;= #{dateFilter[1]}
                )
            </if>
            <if test="customerLabelId != null">
                AND t2.customer_label_id = #{customerLabelId}
            </if>
            <if test="companyName != null and companyName != ''">
                AND (t2.name like concat('%', #{companyName}, '%'))
            </if>
            <if test="keyword != null and keyword != ''">
                AND (t2.name like concat('%', #{keyword}, '%') or t2.code like concat('%', #{keyword}, '%'))
            </if>
            <if test="taxType != null and taxType != ''">
                AND t2.tax_type = #{taxType}
            </if>
            <if test="fromCompanyName != null and fromCompanyName != ''">
                AND (t3.account_name like concat('%', #{fromCompanyName}, '%'))
            </if>
            <if test="month != null and year != null">
                <if test="tenantId != null">
                    AND exists (select 1 from biz_entrust eb
                    where eb.deleted = 0
                    and (eb.to_tenant_id = #{tenantId} or eb.from_tenant_id = #{tenantId})
                    and date_format(eb.current_month, '%Y%m') = concat(#{year}, #{month})
                    and eb.work_order_id = t1.work_order_id
                    )
                </if>
                <if test="status != null and status != 0">
                    AND exists (select 1 from biz_financial_receive_ticket_detail fsd where fsd.financial_receive_ticket_id = t1.id and
                    fsd.month = #{month} and fsd.year = #{year} and fsd.status = #{status} <include refid="detailConditionSql" />)
                </if>
                <if test="status != null and status == 0">
                    AND not exists (select 1 from biz_financial_receive_ticket_detail fsd where fsd.financial_receive_ticket_id = t1.id and
                    fsd.month = #{month} and fsd.year = #{year})
                </if>
            </if>
    </select>

    <delete id="physicalDelete">
        DELETE FROM biz_financial_receive_ticket
        <trim prefix=" WHERE" suffix="" suffixOverrides="AND">
            <if test="id != null">
                id = #{id} AND
            </if>
       <!-- 删除条件为其他外键可以在这里加 -->
        </trim>
    </delete>

    <sql id="detailConditionSql">
        <if test="hasIncomeTicket != null and hasIncomeTicket == 1">
            AND fsd.income_ticket > 0
        </if>
        <if test="hasIncomeTicket != null and hasIncomeTicket == 0">
            AND fsd.income_ticket = 0
        </if>
        <if test="hasCostTicket != null and hasIncomeTicket == 1">
            AND fsd.cost_ticket > 0
        </if>
        <if test="hasCostTicket != null and hasIncomeTicket == 0">
            AND fsd.cost_ticket = 0
        </if>
        <if test="feeTicket != null and feeTicket == 1">
            AND fsd.fee_ticket_number > 0
        </if>
        <if test="feeTicket != null and feeTicket == 0">
            AND fsd.fee_ticket_number = 0
        </if>
        <if test="bankCopy != null and bankCopy == 1">
            AND fsd.bank_copy_number > 0
        </if>
        <if test="bankCopy != null and bankCopy == 0">
            AND fsd.bank_copy_number = 0
        </if>
        <if test="bankSlips != null and bankSlips == 1">
            AND fsd.bank_slips_number > 0
        </if>
        <if test="bankSlips != null and bankSlips == 0">
            AND fsd.bank_slips_number = 0
        </if>
        <if test="payroll != null and payroll == 1">
            AND fsd.salary_ticket > 0
        </if>
        <if test="payroll != null and payroll == 0">
            AND fsd.salary_ticket = 0
        </if>
        <if test="hasSsafTicket != null and hasSsafTicket == 1">
            AND fsd.ssaf_ticket > 0
        </if>
        <if test="hasSsafTicket != null and hasSsafTicket == 0">
            AND fsd.ssaf_ticket = 0
        </if>
        <if test="others != null and others == 1">
            AND fsd.other_ticket > 0
        </if>
        <if test="others != null and others == 0">
            AND fsd.other_ticket = 0
        </if>
        <if test="sumNumber != null and sumNumber == 1">
            AND fsd.sum_number > 0
        </if>
        <if test="sumNumber != null and sumNumber == 0">
            AND fsd.sum_number = 0
        </if>
        <if test="saveStatus != null and saveStatus > 0">
            AND fsd.save_status = #{saveStatus}
        </if>
    </sql>
</mapper>
