<?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.yifu.cloud.plus.v1.business.mapper.salary.TSalaryStatisticsPersonalMapper">

    <resultMap id="TSalaryStatisticsPersonVOMap"
               type="com.yifu.cloud.plus.v1.business.vo.salary.TSalaryStatisticsPersonalVO">
        <result property="id" column="ID" jdbcType="VARCHAR"/>
        <result property="teleNo" column="TELE_NO" jdbcType="VARCHAR"/>
        <result property="empIdCard" column="emp_id_card"/>
        <result property="empName" column="EMP_NAME" jdbcType="VARCHAR"/>
        <result property="salaryMonth" column="SALARY_MONTH" jdbcType="CHAR"/>
        <result property="payableSalary" column="PAYABLE_SALARY" jdbcType="DECIMAL"/>
        <result property="payableSalaryOffset" column="PAYABLE_SALARY_OFFSET" jdbcType="DECIMAL"/>
        <result property="payableSalaryFlag" column="PAYABLE_SALARY_FLAG" jdbcType="CHAR"/>
        <result property="payableIncentiveSalary" column="PAYABLE_INCENTIVE_SALARY" jdbcType="DECIMAL"/>
        <result property="payableIncentiveSalaryOffset" column="PAYABLE_INCENTIVE_SALARY_OFFSET" jdbcType="DECIMAL"/>
        <result property="payableIncentiveSalaryFlag" column="PAYABLE_INCENTIVE_SALARY_FLAG" jdbcType="CHAR"/>
        <result property="payableOtherSalary" column="PAYABLE_OTHER_SALARY" jdbcType="DECIMAL"/>
        <result property="payableOtherSalaryOffset" column="PAYABLE_OTHER_SALARY_OFFSET" jdbcType="DECIMAL"/>
        <result property="payableOtherSalaryFlag" column="PAYABLE_OTHER_SALARY_FLAG" jdbcType="CHAR"/>
        <result property="payableTotal" column="PAYABLE_TOTAL" jdbcType="DECIMAL"/>
        <result property="payableTotalOffset" column="PAYABLE_TOTAL_OFFSET" jdbcType="DECIMAL"/>
        <result property="payableTotalFlag" column="PAYABLE_TOTAL_FLAG" jdbcType="CHAR"/>
        <result property="companySocial" column="COMPANY_SOCIAL" jdbcType="DECIMAL"/>
        <result property="companySocialOffset" column="COMPANY_SOCIAL_OFFSET" jdbcType="DECIMAL"/>
        <result property="companySocialFlag" column="COMPANY_SOCIAL_FLAG" jdbcType="CHAR"/>
        <result property="companyAccFund" column="COMPANY_ACC_FUND" jdbcType="DECIMAL"/>
        <result property="companyAccFundOffset" column="COMPANY_ACC_FUND_OFFSET" jdbcType="DECIMAL"/>
        <result property="companyAccFundFlag" column="COMPANY_ACC_FUND_FLAG" jdbcType="CHAR"/>
        <result property="personalSocial" column="PERSONAL_SOCIAL" jdbcType="DECIMAL"/>
        <result property="personalSocialOffset" column="PERSONAL_SOCIAL_OFFSET" jdbcType="DECIMAL"/>
        <result property="personalSocialFlag" column="PERSONAL_SOCIAL_FLAG" jdbcType="CHAR"/>
        <result property="personalAccFund" column="PERSONAL_ACC_FUND" jdbcType="DECIMAL"/>
        <result property="personalAccFundOffset" column="PERSONAL_ACC_FUND_OFFSET" jdbcType="DECIMAL"/>
        <result property="personalAccFundFlag" column="PERSONAL_ACC_FUND_FLAG" jdbcType="CHAR"/>
        <result property="indIncomeTax" column="IND_INCOME_TAX" jdbcType="DECIMAL"/>
        <result property="indIncomeTaxOffset" column="IND_INCOME_TAX_OFFSET" jdbcType="DECIMAL"/>
        <result property="indIncomeTaxFlag" column="IND_INCOME_TAX_FLAG" jdbcType="CHAR"/>
        <result property="otherDedutions" column="OTHER_DEDUTIONS" jdbcType="DECIMAL"/>
        <result property="otherDedutionOffset" column="OTHER_DEDUTION_OFFSET" jdbcType="DECIMAL"/>
        <result property="otherDedutionFalg" column="OTHER_DEDUTION_FALG" jdbcType="CHAR"/>
        <result property="dedutionTotal" column="DEDUTION_TOTAL" jdbcType="DECIMAL"/>
        <result property="dedutionTotalOffset" column="DEDUTION_TOTAL_OFFSET" jdbcType="DECIMAL"/>
        <result property="dedutionTotalFlag" column="DEDUTION_TOTAL_FLAG" jdbcType="CHAR"/>
        <result property="actualSalary" column="ACTUAL_SALARY" jdbcType="DECIMAL"/>
        <result property="actualSalaryOffset" column="ACTUAL_SALARY_OFFSET" jdbcType="DECIMAL"/>
        <result property="actualSalaryFlag" column="ACTUAL_SALARY_FLAG" jdbcType="CHAR"/>
    </resultMap>


    <resultMap id="TSalaryDepartTotalVO" type="com.yifu.cloud.plus.v1.business.vo.salary.TSalaryTotalVO">

    </resultMap>

    <sql id="Where_TSalaryStatisticsPersonVO">
        <if test="query.treeLogo != null">
            and temp.TREE_LOGO like concat(#{query.treeLogo}, '%')
        </if>
        <if test="query.teleNo != null and query.teleNo.trim() != ''">
            and temp.TELE_NO like concat('%', #{query.teleNo}, '%')
        </if>
        <if test="query.empName != null and query.empName.trim() != ''">
            and temp.EMP_NAME like concat('%', #{query.empName}, '%')
        </if>
        <if test="query.empIdCard != null and query.empIdCard.trim() != ''">
            AND temp.emp_id_card like concat(#{query.empIdCard}, '%')
        </if>
        <if test="query.salaryMonth != null and query.salaryMonth.trim() != ''">
            and temp.SALARY_MONTH = #{query.salaryMonth}
        </if>
        <if test="query.salaryChangeType != null and query.salaryChangeType.trim() != ''">
            <!-- 0应发增加  -->
            <if test="query.salaryChangeType == '0'.toString()">
                and temp.PAYABLE_TOTAL_FLAG = '2'
            </if>
            <!-- 1应发减少  -->
            <if test="query.salaryChangeType == '1'.toString()">
                and temp.PAYABLE_TOTAL_FLAG = '0'
            </if>
            <!-- 2应发不变  -->
            <if test="query.salaryChangeType == '2'.toString()">
                and temp.PAYABLE_TOTAL_FLAG = '1'
            </if>
            <!-- 3实发增加  -->
            <if test="query.salaryChangeType == '3'.toString()">
                and temp.ACTUAL_SALARY_FLAG = '2'
            </if>
            <!-- 4实发减少  -->
            <if test="query.salaryChangeType == '4'.toString()">
                and temp.ACTUAL_SALARY_FLAG = '0'
            </if>
            <!-- 5实发不变  -->
            <if test="query.salaryChangeType == '5'.toString()">
                and temp.ACTUAL_SALARY_FLAG = '1'
            </if>
            <!-- 6人均成本增加  -->
            <if test="query.salaryChangeType == '6'.toString()">
                and temp.PER_CAPITA_FLAG = '2'
            </if>
            <!-- 7人均成本减少  -->
            <if test="query.salaryChangeType == '7'.toString()">
                and temp.PER_CAPITA_FLAG = '0'
            </if>
            <!-- 8人均成本不变  -->
            <if test="query.salaryChangeType == '8'.toString()">
                and temp.PER_CAPITA_FLAG = '1'
            </if>
            <!-- 9扣款增加  -->
            <if test="query.salaryChangeType == '9'.toString()">
                and temp.DEDUTION_TOTAL_FLAG = '2'
            </if>
            <!-- 10扣款减少  -->
            <if test="query.salaryChangeType == '10'.toString()">
                and temp.DEDUTION_TOTAL_FLAG = '0'
            </if>
            <!-- 11扣款不变  -->
            <if test="query.salaryChangeType == '11'.toString()">
                and temp.DEDUTION_TOTAL_FLAG = '1'
            </if>
        </if>
    </sql>
    <select id="getListByPage" resultMap="TSalaryStatisticsPersonVOMap">
        select ID, TELE_NO,EMP_ID_CARD, EMP_NAME, SALARY_MONTH, PAYABLE_SALARY,TREE_LOGO,
        PAYABLE_SALARY_OFFSET, PAYABLE_SALARY_FLAG, PAYABLE_INCENTIVE_SALARY, PAYABLE_INCENTIVE_SALARY_OFFSET,
        PAYABLE_INCENTIVE_SALARY_FLAG, PAYABLE_OTHER_SALARY, PAYABLE_OTHER_SALARY_OFFSET, PAYABLE_OTHER_SALARY_FLAG,
        PAYABLE_TOTAL, PAYABLE_TOTAL_OFFSET, PAYABLE_TOTAL_FLAG, COMPANY_SOCIAL, COMPANY_SOCIAL_OFFSET,
        COMPANY_SOCIAL_FLAG, COMPANY_ACC_FUND, COMPANY_ACC_FUND_OFFSET, COMPANY_ACC_FUND_FLAG, PERSONAL_SOCIAL,
        PERSONAL_SOCIAL_OFFSET, PERSONAL_SOCIAL_FLAG, PERSONAL_ACC_FUND, PERSONAL_ACC_FUND_OFFSET,
        PERSONAL_ACC_FUND_FLAG, IND_INCOME_TAX, IND_INCOME_TAX_OFFSET, IND_INCOME_TAX_FLAG, OTHER_DEDUTIONS,
        OTHER_DEDUTION_OFFSET, OTHER_DEDUTION_FALG, DEDUTION_TOTAL, DEDUTION_TOTAL_OFFSET, DEDUTION_TOTAL_FLAG,
        ACTUAL_SALARY, ACTUAL_SALARY_OFFSET, ACTUAL_SALARY_FLAG
        from (
        select
        `a`.`ID` AS `ID`,
        `a`.`TELE_NO` AS `TELE_NO`,
        `a`.`EMP_NAME` AS `EMP_NAME`,
        `a`.`EMP_ID_CARD` AS `EMP_ID_CARD`,
        `a`.`TREE_LOGO` AS `TREE_LOGO`,
        `a`.`SALARY_MONTH` AS `SALARY_MONTH`,
        `a`.`PAYABLE_SALARY` AS `PAYABLE_SALARY`,
        abs((`a`.`PAYABLE_SALARY` - `b`.`PAYABLE_SALARY`)) AS `PAYABLE_SALARY_OFFSET`,
        (case
        when ((`a`.`PAYABLE_SALARY` - `b`.`PAYABLE_SALARY`) > 0) then '2'
        when ((`a`.`PAYABLE_SALARY` - `b`.`PAYABLE_SALARY`) = 0) then '1'
        when ((`a`.`PAYABLE_SALARY` - `b`.`PAYABLE_SALARY`) <![CDATA[<]]> 0)
        then '0' end) AS `PAYABLE_SALARY_FLAG`,
        `a`.`PAYABLE_INCENTIVE_SALARY` AS `PAYABLE_INCENTIVE_SALARY`,
        abs((`a`.`PAYABLE_INCENTIVE_SALARY` - `b`.`PAYABLE_INCENTIVE_SALARY`)) AS `PAYABLE_INCENTIVE_SALARY_OFFSET`,
        (case
        when ((`a`.`PAYABLE_INCENTIVE_SALARY` - `b`.`PAYABLE_INCENTIVE_SALARY`) > 0) then '2'
        when ((`a`.`PAYABLE_INCENTIVE_SALARY` - `b`.`PAYABLE_INCENTIVE_SALARY`) = 0) then '1'
        when ((`a`.`PAYABLE_INCENTIVE_SALARY` - `b`.`PAYABLE_INCENTIVE_SALARY`) <![CDATA[<]]> 0)
        then '0' end) AS `PAYABLE_INCENTIVE_SALARY_FLAG`,
        `a`.`PAYABLE_OTHER_SALARY` AS `PAYABLE_OTHER_SALARY`,
        abs((`a`.`PAYABLE_OTHER_SALARY` - `b`.`PAYABLE_OTHER_SALARY`)) AS `PAYABLE_OTHER_SALARY_OFFSET`,
        (case
        when ((`a`.`PAYABLE_OTHER_SALARY` - `b`.`PAYABLE_OTHER_SALARY`) > 0) then '2'
        when ((`a`.`PAYABLE_OTHER_SALARY` - `b`.`PAYABLE_OTHER_SALARY`) = 0) then '1'
        when ((`a`.`PAYABLE_OTHER_SALARY` - `b`.`PAYABLE_OTHER_SALARY`) <![CDATA[<]]> 0)
        then '0' end) AS `PAYABLE_OTHER_SALARY_FLAG`,
        `a`.`PAYABLE_TOTAL` AS `PAYABLE_TOTAL`,
        abs((`a`.`PAYABLE_TOTAL` - `b`.`PAYABLE_TOTAL`)) AS `PAYABLE_TOTAL_OFFSET`,
        (case
        when ((`a`.`PAYABLE_TOTAL` - `b`.`PAYABLE_TOTAL`) > 0) then '2'
        when ((`a`.`PAYABLE_TOTAL` - `b`.`PAYABLE_TOTAL`) = 0) then '1'
        when ((`a`.`PAYABLE_TOTAL` - `b`.`PAYABLE_TOTAL`) <![CDATA[<]]> 0)
        then '0' end) AS `PAYABLE_TOTAL_FLAG`,
        `a`.`COMPANY_SOCIAL` AS `COMPANY_SOCIAL`,
        abs((`a`.`COMPANY_SOCIAL` - `b`.`COMPANY_SOCIAL`)) AS `COMPANY_SOCIAL_OFFSET`,
        (case
        when ((`a`.`COMPANY_SOCIAL` - `b`.`COMPANY_SOCIAL`) > 0) then '2'
        when ((`a`.`COMPANY_SOCIAL` - `b`.`COMPANY_SOCIAL`) = 0) then '1'
        when ((`a`.`COMPANY_SOCIAL` - `b`.`COMPANY_SOCIAL`) <![CDATA[<]]> 0)
        then '0' end) AS `COMPANY_SOCIAL_FLAG`,
        `a`.`COMPANY_ACC_FUND` AS `COMPANY_ACC_FUND`,
        abs((`a`.`COMPANY_ACC_FUND` - `b`.`COMPANY_ACC_FUND`)) AS `COMPANY_ACC_FUND_OFFSET`,
        (case
        when ((`a`.`COMPANY_ACC_FUND` - `b`.`COMPANY_ACC_FUND`) > 0) then '2'
        when ((`a`.`COMPANY_ACC_FUND` - `b`.`COMPANY_ACC_FUND`) = 0) then '1'
        when ((`a`.`COMPANY_ACC_FUND` - `b`.`COMPANY_ACC_FUND`) <![CDATA[<]]> 0)
        then '0' end) AS `COMPANY_ACC_FUND_FLAG`,
        `a`.`PERSONAL_SOCIAL` AS `PERSONAL_SOCIAL`,
        abs((`a`.`PERSONAL_SOCIAL` - `b`.`PERSONAL_SOCIAL`)) AS `PERSONAL_SOCIAL_OFFSET`,
        (case
        when ((`a`.`PERSONAL_SOCIAL` - `b`.`PERSONAL_SOCIAL`) > 0) then '2'
        when ((`a`.`PERSONAL_SOCIAL` - `b`.`PERSONAL_SOCIAL`) = 0) then '1'
        when ((`a`.`PERSONAL_SOCIAL` - `b`.`PERSONAL_SOCIAL`) <![CDATA[<]]> 0)
        then '0' end) AS `PERSONAL_SOCIAL_FLAG`,
        `a`.`PERSONAL_ACC_FUND` AS `PERSONAL_ACC_FUND`,
        abs((`a`.`PERSONAL_ACC_FUND` - `b`.`PERSONAL_ACC_FUND`)) AS `PERSONAL_ACC_FUND_OFFSET`,
        (case
        when ((`a`.`PERSONAL_ACC_FUND` - `b`.`PERSONAL_ACC_FUND`) > 0) then '2'
        when ((`a`.`PERSONAL_ACC_FUND` - `b`.`PERSONAL_ACC_FUND`) = 0) then '1'
        when ((`a`.`PERSONAL_ACC_FUND` - `b`.`PERSONAL_ACC_FUND`) <![CDATA[<]]> 0)
        then '0' end) AS `PERSONAL_ACC_FUND_FLAG`,
        `a`.`IND_INCOME_TAX` AS `IND_INCOME_TAX`,
        abs((`a`.`IND_INCOME_TAX` - `b`.`IND_INCOME_TAX`)) AS `IND_INCOME_TAX_OFFSET`,
        (case
        when ((`a`.`IND_INCOME_TAX` - `b`.`IND_INCOME_TAX`) > 0) then '2'
        when ((`a`.`IND_INCOME_TAX` - `b`.`IND_INCOME_TAX`) = 0) then '1'
        when ((`a`.`IND_INCOME_TAX` - `b`.`IND_INCOME_TAX`) <![CDATA[<]]> 0)
        then '0' end) AS `IND_INCOME_TAX_FLAG`,
        `a`.`OTHER_DEDUTIONS` AS `OTHER_DEDUTIONS`,
        abs((`a`.`OTHER_DEDUTIONS` - `b`.`OTHER_DEDUTIONS`)) AS `OTHER_DEDUTION_OFFSET`,
        (case
        when ((`a`.`OTHER_DEDUTIONS` - `b`.`OTHER_DEDUTIONS`) > 0) then '2'
        when ((`a`.`OTHER_DEDUTIONS` - `b`.`OTHER_DEDUTIONS`) = 0) then '1'
        when ((`a`.`OTHER_DEDUTIONS` - `b`.`OTHER_DEDUTIONS`) <![CDATA[<]]> 0)
        then '0' end) AS `OTHER_DEDUTION_FALG`,
        `a`.`DEDUTION_TOTAL` AS `DEDUTION_TOTAL`,
        abs((`a`.`DEDUTION_TOTAL` - `b`.`DEDUTION_TOTAL`)) AS `DEDUTION_TOTAL_OFFSET`,
        (case
        when ((`a`.`DEDUTION_TOTAL` - `b`.`DEDUTION_TOTAL`) > 0) then '2'
        when ((`a`.`DEDUTION_TOTAL` - `b`.`DEDUTION_TOTAL`) = 0) then '1'
        when ((`a`.`DEDUTION_TOTAL` - `b`.`DEDUTION_TOTAL`) <![CDATA[<]]> 0)
        then '0' end) AS `DEDUTION_TOTAL_FLAG`,
        `a`.`ACTUAL_SALARY` AS `ACTUAL_SALARY`,
        abs((`a`.`ACTUAL_SALARY` - `b`.`ACTUAL_SALARY`)) AS `ACTUAL_SALARY_OFFSET`,
        (case
        when ((`a`.`ACTUAL_SALARY` - `b`.`ACTUAL_SALARY`) > 0) then '2'
        when ((`a`.`ACTUAL_SALARY` - `b`.`ACTUAL_SALARY`) = 0) then '1'
        when ((`a`.`ACTUAL_SALARY` - `b`.`ACTUAL_SALARY`) <![CDATA[<]]> 0)
        then '0' end) AS `ACTUAL_SALARY_FLAG`
        from (
        SELECT
        `hr_business`.`t_bus_salary`.`id` AS `ID`,
        `hr_business`.`t_bus_salary`.`tele_no` AS `TELE_NO`,
        `hr_business`.`t_bus_salary`.`emp_id_card` AS `EMP_ID_CARD`,
        `hr_business`.`t_bus_salary`.`emp_name` AS `EMP_NAME`,
        `hr_business`.`t_bus_salary`.`salary_month` AS `SALARY_MONTH`,
        `hr_business`.`t_bus_salary`.`dept_tree_logo` AS `TREE_LOGO`,
        sum(`hr_business`.`t_bus_salary`.`relay_salary`) AS `PAYABLE_SALARY`,
        sum(`hr_business`.`t_bus_salary`.`relay_incent`) AS `PAYABLE_INCENTIVE_SALARY`,
        sum(`hr_business`.`t_bus_salary`.`relay_other`) AS `PAYABLE_OTHER_SALARY`,
        sum(`hr_business`.`t_bus_salary`.`relay_sum`) AS `PAYABLE_TOTAL`,
        sum(`hr_business`.`t_bus_salary`.`unit_social`) AS `COMPANY_SOCIAL`,
        sum(`hr_business`.`t_bus_salary`.`unit_fund`) AS `COMPANY_ACC_FUND`,
        sum(`hr_business`.`t_bus_salary`.`withholid_person_social`) AS `PERSONAL_SOCIAL`,
        sum(`hr_business`.`t_bus_salary`.`withholid_person_fund`) AS `PERSONAL_ACC_FUND`,
        sum(`hr_business`.`t_bus_salary`.`withholid_person_tax`) AS `IND_INCOME_TAX`,
        sum(`hr_business`.`t_bus_salary`.`withholid_other`) AS `OTHER_DEDUTIONS`,
        sum(`hr_business`.`t_bus_salary`.`withholid_sum`) AS `DEDUTION_TOTAL`,
        sum(`hr_business`.`t_bus_salary`.`actual_salary`) AS `ACTUAL_SALARY`
        FROM `hr_business`.`t_bus_salary`
        <where>
            1=1
            and salary_month = #{query.salaryMonth}
            <if test="query.selectType == '0'.toString()">
                and dept_tree_logo like concat(#{query.treeLogo}, '%')
            </if>
            <if test="query.selectType == '1'.toString()">
                and dept_tree_logo = #{query.treeLogo}
            </if>
        </where>
        GROUP BY EMP_ID_CARD
        ) `a`
        LEFT JOIN (
        SELECT
        `hr_business`.`t_bus_salary`.`id` AS `ID`,
        `hr_business`.`t_bus_salary`.`tele_no` AS `TELE_NO`,
        `hr_business`.`t_bus_salary`.`emp_name` AS `EMP_NAME`,
        `hr_business`.`t_bus_salary`.`emp_id_card` AS `EMP_ID_CARD`,
        `hr_business`.`t_bus_salary`.`salary_month` AS `salary_month`,
        `hr_business`.`t_bus_salary`.`dept_tree_logo` AS `TREE_LOGO`,
        sum(`hr_business`.`t_bus_salary`.`relay_salary`) AS `PAYABLE_SALARY`,
        sum(`hr_business`.`t_bus_salary`.`relay_incent`) AS `PAYABLE_INCENTIVE_SALARY`,
        sum(`hr_business`.`t_bus_salary`.`relay_other`) AS `PAYABLE_OTHER_SALARY`,
        sum(`hr_business`.`t_bus_salary`.`relay_sum`) AS `PAYABLE_TOTAL`,
        sum(`hr_business`.`t_bus_salary`.`unit_social`) AS `COMPANY_SOCIAL`,
        sum(`hr_business`.`t_bus_salary`.`unit_fund`) AS `COMPANY_ACC_FUND`,
        sum(`hr_business`.`t_bus_salary`.`withholid_person_social`) AS `PERSONAL_SOCIAL`,
        sum(`hr_business`.`t_bus_salary`.`withholid_person_fund`) AS `PERSONAL_ACC_FUND`,
        sum(`hr_business`.`t_bus_salary`.`withholid_person_tax`) AS `IND_INCOME_TAX`,
        sum(`hr_business`.`t_bus_salary`.`withholid_other`) AS `OTHER_DEDUTIONS`,
        sum(`hr_business`.`t_bus_salary`.`withholid_sum`) AS `DEDUTION_TOTAL`,
        sum(`hr_business`.`t_bus_salary`.`actual_salary`) AS `ACTUAL_SALARY`
        FROM
        `hr_business`.`t_bus_salary`
        <where>
            1=1
            and salary_month = #{query.lastSalaryMonth}
            <if test="query.selectType == '0'.toString()">
                and dept_tree_logo like concat(#{query.treeLogo}, '%')
            </if>
            <if test="query.selectType == '1'.toString()">
                and dept_tree_logo = #{query.treeLogo}
            </if>
        </where>
        GROUP BY emp_id_card
        ) `b` ON `a`.emp_id_card = `b`.emp_id_card
        ) `temp`
        <where>
            1=1
            <include refid="Where_TSalaryStatisticsPersonVO"/>
        </where>
    </select>

    <select id="sumSalaryPerson" resultMap="TSalaryDepartTotalVO">
        select TREE_LOGO,
        EMP_NAME,
        TELE_NO,
        SALARY_MONTH,
        sum(PAYABLE_TOTAL) AS PAYABLE_TOTAL,
        sum(PAYABLE_TOTAL_OFFSET) AS PAYABLE_TOTAL_OFFSET,
        PAYABLE_TOTAL_FLAG,
        sum(DEDUTION_TOTAL) AS DEDUTION_TOTAL,
        sum(DEDUTION_TOTAL_OFFSET) AS DEDUTION_TOTAL_OFFSET,
        DEDUTION_TOTAL_FLAG,
        sum(ACTUAL_SALARY) AS ACTUAL_SALARY,
        sum(ACTUAL_SALARY_OFFSET) AS ACTUAL_SALARY_OFFSET,
        ACTUAL_SALARY_FLAG,
        convert(sum(PER_CAPITA), DECIMAL(10,2)) AS PER_CAPITA,
        convert(sum(PER_CAPITA_OFFSET), DECIMAL(10,2)) AS PER_CAPITA_OFFSET,
        PER_CAPITA_FLAG
        from (
        select
        `a`.`TELE_NO` AS `TELE_NO`,
        `a`.`EMP_NAME` AS `EMP_NAME`,
        `a`.`SALARY_MONTH` AS `SALARY_MONTH`,
        `a`.`DEPART_TREE_LOGO` AS `TREE_LOGO`,
        `a`.`PAYABLE_TOTAL` AS `PAYABLE_TOTAL`,
        abs((`a`.`PAYABLE_TOTAL` - `b`.`PAYABLE_TOTAL`)) AS `PAYABLE_TOTAL_OFFSET`,
        (case
        when ((`a`.`PAYABLE_TOTAL` - `b`.`PAYABLE_TOTAL`) > 0) then '2'
        when ((`a`.`PAYABLE_TOTAL` - `b`.`PAYABLE_TOTAL`) = 0) then '1'
        when ((`a`.`PAYABLE_TOTAL` - `b`.`PAYABLE_TOTAL`) <![CDATA[<]]> 0)
        then '0' end) AS `PAYABLE_TOTAL_FLAG`,
        `a`.`DEDUTION_TOTAL` AS `DEDUTION_TOTAL`,
        abs((`a`.`DEDUTION_TOTAL` - `b`.`DEDUTION_TOTAL`)) AS `DEDUTION_TOTAL_OFFSET`,
        (case
        when ((`a`.`DEDUTION_TOTAL` - `b`.`DEDUTION_TOTAL`) > 0) then '2'
        when ((`a`.`DEDUTION_TOTAL` - `b`.`DEDUTION_TOTAL`) = 0) then '1'
        when ((`a`.`DEDUTION_TOTAL` - `b`.`DEDUTION_TOTAL`) <![CDATA[<]]> 0)
        then '0' end) AS `DEDUTION_TOTAL_FLAG`,
        `a`.`ACTUAL_SALARY` AS `ACTUAL_SALARY`,
        abs((`a`.`ACTUAL_SALARY` - `b`.`ACTUAL_SALARY`)) AS `ACTUAL_SALARY_OFFSET`,
        (case
        when ((`a`.`ACTUAL_SALARY` - `b`.`ACTUAL_SALARY`) > 0) then '2'
        when ((`a`.`ACTUAL_SALARY` - `b`.`ACTUAL_SALARY`) = 0) then '1'
        when ((`a`.`ACTUAL_SALARY` - `b`.`ACTUAL_SALARY`) <![CDATA[<]]> 0)
        then '0' end) AS `ACTUAL_SALARY_FLAG`,
        `a`.`PER_CAPITA` AS `PER_CAPITA`,
        abs((`a`.`PER_CAPITA` - `b`.`PER_CAPITA`)) AS `PER_CAPITA_OFFSET`,
        (case
        when ((`a`.`PER_CAPITA` - `b`.`PER_CAPITA`) > 0) then '2'
        when ((`a`.`PER_CAPITA` - `b`.`PER_CAPITA`) = 0) then '1'
        when ((`a`.`PER_CAPITA` - `b`.`PER_CAPITA`) <![CDATA[<]]> 0)
        then '0' end) AS `PER_CAPITA_FLAG`
        from (
        SELECT
        `hr_business`.`t_bus_salary`.`tele_no` AS `TELE_NO`,
        `hr_business`.`t_bus_salary`.`emp_name` AS `EMP_NAME`,
        `hr_business`.`t_bus_salary`.`dept_tree_logo` AS `DEPART_TREE_LOGO`,
        `hr_business`.`t_bus_salary`.`salary_month` AS `SALARY_MONTH`,
        #{query.treeLogo} AS `DOMAIN`,
        sum(`hr_business`.`t_bus_salary`.`relay_salary`) AS `PAYABLE_SALARY`,
        sum(`hr_business`.`t_bus_salary`.`relay_incent`) AS `PAYABLE_INCENTIVE_SALARY`,
        sum(`hr_business`.`t_bus_salary`.`relay_other`) AS `PAYABLE_OTHER_SALARY`,
        sum(`hr_business`.`t_bus_salary`.`relay_sum`) AS `PAYABLE_TOTAL`,
        sum(`hr_business`.`t_bus_salary`.`unit_social`) AS `COMPANY_SOCIAL`,
        sum(`hr_business`.`t_bus_salary`.`unit_fund`) AS `COMPANY_ACC_FUND`,
        sum(`hr_business`.`t_bus_salary`.`withholid_person_social`) AS `PERSONAL_SOCIAL`,
        sum(`hr_business`.`t_bus_salary`.`withholid_person_fund`) AS `PERSONAL_ACC_FUND`,
        sum(`hr_business`.`t_bus_salary`.`withholid_person_tax`) AS `IND_INCOME_TAX`,
        sum(`hr_business`.`t_bus_salary`.`withholid_other`) AS `OTHER_DEDUTIONS`,
        sum(`hr_business`.`t_bus_salary`.`withholid_sum`) AS `DEDUTION_TOTAL`,
        sum(`hr_business`.`t_bus_salary`.`actual_salary`) AS `ACTUAL_SALARY`,
        (
        sum(`hr_business`.`t_bus_salary`.`relay_sum`) /
        count(distinct emp_id_card)) AS `PER_CAPITA`
        FROM `hr_business`.`t_bus_salary`
        <where>
            1=1
            and salary_month = #{query.salaryMonth}
            <if test="query.selectType == '0'.toString()">
                and dept_tree_logo like concat(#{query.treeLogo}, '%')
            </if>
            <if test="query.selectType == '1'.toString()">
                and dept_tree_logo = #{query.treeLogo}
            </if>
            <if test="query.teleNo != null and query.teleNo.trim() != ''">
                and TELE_NO like concat('%', #{query.teleNo}, '%')
            </if>
            <if test="query.empName != null and query.empName.trim() != ''">
                and EMP_NAME like concat('%', #{query.empName}, '%')
            </if>
            <if test="query.empIdCard != null and query.empIdCard.trim() != ''">
                AND EMP_ID_CARD like concat(#{query.empIdCard}, '%')
            </if>
        </where>
        ) `a`
        LEFT JOIN
        (
        SELECT
        `hr_business`.`t_bus_salary`.`tele_no` AS `TELE_NO`,
        `hr_business`.`t_bus_salary`.`emp_name` AS `EMP_NAME`,
        `hr_business`.`t_bus_salary`.`dept_tree_logo` AS `DEPART_TREE_LOGO`,
        `hr_business`.`t_bus_salary`.`salary_month` AS `salary_month`,
        #{query.treeLogo} AS `DOMAIN`,
        sum(`hr_business`.`t_bus_salary`.`relay_salary`) AS `PAYABLE_SALARY`,
        sum(`hr_business`.`t_bus_salary`.`relay_incent`) AS `PAYABLE_INCENTIVE_SALARY`,
        sum(`hr_business`.`t_bus_salary`.`relay_other`) AS `PAYABLE_OTHER_SALARY`,
        sum(`hr_business`.`t_bus_salary`.`relay_sum`) AS `PAYABLE_TOTAL`,
        sum(`hr_business`.`t_bus_salary`.`unit_social`) AS `COMPANY_SOCIAL`,
        sum(`hr_business`.`t_bus_salary`.`unit_fund`) AS `COMPANY_ACC_FUND`,
        sum(`hr_business`.`t_bus_salary`.`withholid_person_social`) AS `PERSONAL_SOCIAL`,
        sum(`hr_business`.`t_bus_salary`.`withholid_person_fund`) AS `PERSONAL_ACC_FUND`,
        sum(`hr_business`.`t_bus_salary`.`withholid_person_tax`) AS `IND_INCOME_TAX`,
        sum(`hr_business`.`t_bus_salary`.`withholid_other`) AS `OTHER_DEDUTIONS`,
        sum(`hr_business`.`t_bus_salary`.`withholid_sum`) AS `DEDUTION_TOTAL`,
        sum(`hr_business`.`t_bus_salary`.`actual_salary`) AS `ACTUAL_SALARY`,
        (
        sum(`hr_business`.`t_bus_salary`.`relay_sum`) /
        count(distinct emp_id_card)) AS `PER_CAPITA`
        FROM
        `hr_business`.`t_bus_salary`
        <where>
            1=1
            and salary_month = #{query.lastSalaryMonth}
            <if test="query.selectType == '0'.toString()">
                and dept_tree_logo like concat(#{query.treeLogo}, '%')
            </if>
            <if test="query.selectType == '1'.toString()">
                and dept_tree_logo = #{query.treeLogo}
            </if>
            <if test="query.teleNo != null and query.teleNo.trim() != ''">
                and TELE_NO like concat('%', #{query.teleNo}, '%')
            </if>
            <if test="query.empName != null and query.empName.trim() != ''">
                and EMP_NAME like concat('%', #{query.empName}, '%')
            </if>
            <if test="query.empIdCard != null and query.empIdCard.trim() != ''">
                AND EMP_ID_CARD like concat(#{query.empIdCard}, '%')
            </if>
        </where>

        ) `b` ON `a`.DOMAIN = `b`.DOMAIN
        ) `temp`
    </select>
</mapper>