spring-cloud/sk-module-data/sk-module-data-biz/src/main/resources/mappers/finance/FinanceMapper.xml

71 lines
2.9 KiB
XML

<?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="org.sk.module.data.dal.mapper.finance.FinanceMapper">
<select id="getFinanceByCreditCodeAndYear" resultType="org.sk.module.data.dal.bo.finance.FinanceBO">
select a.comName,
a.creditCode,
a.Income,
(b.valueAddTax + b.corporateIncomeTax) / 10000 'tax', a.nd 'year'
from com_operate_info_year a
left join com_pay_taxs_all b on a.creditCode = b.creditCode and b.mouth = '12' and a.nd = b.year
where a.creditCode = #{creditCode}
and a.nd = #{year}
</select>
<select id="getIncomeAndTax" resultType="org.sk.module.data.dal.bo.finance.FinanceBO">
WITH
income_data AS (
SELECT comName, creditCode, nd AS year,income FROM com_operate_info_year
where creditCode in
<foreach item="code" collection="creditCodes" open="(" separator="," close=")">
#{code}
</foreach>
<if test="year != null and year != ''">
AND nd = #{year}
</if>
),
tax_data AS (
SELECT entName AS comName, creditCode, `year`,
CASE WHEN
year &lt; YEAR(CURDATE())
THEN
(SELECT (valueAddTax + corporateIncomeTax) FROM com_pay_taxs_all WHERE year = t.year AND creditCode = t.creditCode AND mouth = 12)
ELSE
(SELECT (valueAddTax + corporateIncomeTax) FROM com_pay_taxs_all WHERE year = t.year AND creditCode = t.creditCode ORDER BY mouth DESC LIMIT 1)
END AS tax
FROM com_pay_taxs_all t
where creditCode in
<foreach item="code" collection="creditCodes" open="(" separator="," close=")">
#{code}
</foreach>
<if test="year != null and year != ''">
AND year = #{year}
</if>
)
SELECT
COALESCE(i.creditCode, t.creditCode) AS creditCode,
COALESCE(i.comName, t.comName) AS comName,
COALESCE(i.year, t.year) AS year,
i.income,
t.tax/10000
FROM
income_data i
LEFT JOIN tax_data t
ON i.creditCode = t.creditCode AND i.year = t.year
UNION
SELECT
COALESCE(t.creditCode, i.creditCode) AS creditCode,
COALESCE(t.comName, i.comName) AS comName,
COALESCE(t.year, i.year) AS year,
i.income,
t.tax/10000
FROM
tax_data t
LEFT JOIN income_data i
ON t.creditCode = i.creditCode AND t.year = i.year
ORDER BY creditCode, year
</select>
</mapper>