Commit 19ea2ab8 by zhangxingmin

push

parent d6998bcf
...@@ -56,8 +56,7 @@ ...@@ -56,8 +56,7 @@
IFNULL(SUM(paid_amount),0) AS totalPaidAmount, IFNULL(SUM(paid_amount),0) AS totalPaidAmount,
COUNT(DISTINCT policy_no) AS totalPolicyCount, COUNT(DISTINCT policy_no) AS totalPolicyCount,
GROUP_CONCAT(DISTINCT policy_no) AS policyNos GROUP_CONCAT(DISTINCT policy_no) AS policyNos
FROM FROM commission_expected ce
commission_expected ce
<where> <where>
<if test="expectedIds != null and expectedIds.size > 0"> <if test="expectedIds != null and expectedIds.size > 0">
id IN id IN
...@@ -68,78 +67,154 @@ ...@@ -68,78 +67,154 @@
</where> </where>
</select> </select>
<!-- ==================== 应收款报表分页查询(完全对齐 getQueryWrapper) ==================== -->
<select id="receivableReportPage" resultType="com.yd.csf.service.vo.ReceivableReportVO"> <select id="receivableReportPage" resultType="com.yd.csf.service.vo.ReceivableReportVO">
<!-- 完全对齐 getQueryWrapper 的条件 --> <!--
根据 commissionBizType 动态选择查询方式:
- 若指定了 'R' 或 'U',只查询对应类型;
- 否则 UNION ALL 两种类型。
-->
<choose> <choose>
<!-- 如果 commissionBizType 有值且不为空,只查对应类型 -->
<when test="query.commissionBizType != null and query.commissionBizType != ''"> <when test="query.commissionBizType != null and query.commissionBizType != ''">
<if test="query.commissionBizType == 'R'"> <if test="query.commissionBizType == 'R'">
SELECT * FROM (
<include refid="receivableReportRSql"/> <include refid="receivableReportRSql"/>
WHERE ce.commission_biz_type = 'R'
<include refid="receivableReportWhereCommon"/>
) tmp
</if> </if>
<if test="query.commissionBizType == 'U'"> <if test="query.commissionBizType == 'U'">
SELECT * FROM (
<include refid="receivableReportUSql"/> <include refid="receivableReportUSql"/>
WHERE ce.commission_biz_type = 'U'
<include refid="receivableReportWhereCommon"/>
) tmp
</if> </if>
</when> </when>
<!-- 否则 UNION ALL 两种类型 -->
<otherwise> <otherwise>
SELECT * FROM ( SELECT * FROM (
<include refid="receivableReportRSql"/> <include refid="receivableReportRSql"/>
WHERE ce.commission_biz_type = 'R'
<include refid="receivableReportWhereCommon"/>
UNION ALL UNION ALL
<include refid="receivableReportUSql"/> <include refid="receivableReportUSql"/>
WHERE ce.commission_biz_type = 'U' ) t
<include refid="receivableReportWhereCommon"/> <include refid="receivableReportOrderBy"/>
) tmp
</otherwise> </otherwise>
</choose> </choose>
<include refid="receivableReportOrderBy"/>
</select> </select>
<!-- R 类型主查询(不含 WHERE 条件) --> <!-- ==================== R 类型(关联保单应收单)完整查询 ==================== -->
<sql id="receivableReportRSql"> <sql id="receivableReportRSql">
SELECT SELECT
NULL AS receivableNo, NULL AS receivableNo,
ce.policy_no AS policyNo, policyNo,
ph.name AS policyHolder, policyHolder,
ph.name_en AS policyHolderEn, policyHolderEn,
ins.name AS insured, insured,
ins.name_en AS insuredEn, insuredEn,
ce.manual_remark AS manualRemark, manualRemark,
MAX(ce.reconciliation_company) AS reconciliationCompany, MAX(reconciliation_company) AS reconciliationCompany,
MAX(ce.reconciliation_company_biz_id) AS reconciliationCompanyBizId, MAX(reconciliation_company_biz_id) AS reconciliationCompanyBizId,
ce.commission_period AS commissionPeriod, commission_period AS commissionPeriod,
MAX(ce.total_period) AS totalPeriod, MAX(total_period) AS totalPeriod,
MAX(ce.commission_date) AS commissionDate, MAX(commission_date) AS commissionDate,
IFNULL(SUM(ce.commission_ratio), 0) AS commissionRatio, IFNULL(SUM(commission_ratio), 0) AS commissionRatio,
IFNULL(SUM(ce.paid_ratio), 0) AS paid, IFNULL(SUM(paid_ratio), 0) AS paid,
IFNULL(SUM(ce.amount), 0) AS amount, IFNULL(SUM(amount), 0) AS amount,
MAX(ce.currency) AS currency, MAX(currency) AS currency,
IFNULL(SUM(ce.expected_amount), 0) AS hkdAmount, IFNULL(SUM(expected_amount), 0) AS hkdAmount,
IFNULL(SUM(ce.paid_amount), 0) AS paidAmount, IFNULL(SUM(paid_amount), 0) AS paidAmount,
IFNULL(SUM(ce.expected_amount) - SUM(ce.paid_amount), 0) AS unpaidAmount, IFNULL(SUM(expected_amount) - SUM(paid_amount), 0) AS unpaidAmount,
CASE WHEN IFNULL(SUM(ce.expected_amount), 0) > 0 CASE WHEN IFNULL(SUM(expected_amount), 0) > 0
THEN ROUND(IFNULL(SUM(ce.paid_amount), 0) / IFNULL(SUM(ce.expected_amount), 0) * 100, 2) THEN ROUND(IFNULL(SUM(paid_amount), 0) / IFNULL(SUM(expected_amount), 0) * 100, 2)
ELSE 0 ELSE 0
END AS paidRatio, END AS paidRatio,
CASE WHEN IFNULL(SUM(ce.expected_amount), 0) > 0 CASE WHEN IFNULL(SUM(expected_amount), 0) > 0
THEN ROUND((IFNULL(SUM(ce.expected_amount), 0) - IFNULL(SUM(ce.paid_amount), 0)) / IFNULL(SUM(ce.expected_amount), 0) * 100, 2) THEN ROUND((IFNULL(SUM(expected_amount), 0) - IFNULL(SUM(paid_amount), 0)) / IFNULL(SUM(expected_amount), 0) * 100, 2)
ELSE 0 ELSE 0
END AS unpaidRatio, END AS unpaidRatio,
MAX(ce.default_exchange_rate) AS exchangeRate, MAX(default_exchange_rate) AS exchangeRate,
MAX(p.insurance_company) AS insuranceCompany, MAX(insurance_company) AS insuranceCompany,
MAX(p.product_name) AS productName, MAX(product_name) AS productName,
IFNULL(AVG(ce.premium), 0) AS premium, IFNULL(AVG(premium), 0) AS premium,
MAX(p.currency) AS policyCurrency MAX(policyCurrency) AS policyCurrency
FROM (
<include refid="receivableReportRSqlBase"/>
WHERE 1=1
AND commission_biz_type = 'R'
AND is_deleted = 0
<include refid="receivableReportWhereCommon"/>
<include refid="receivableReportTeamBizIdFilter"/>
) t
GROUP BY t.policyNo, t.commission_period
<include refid="receivableReportOrderBy"/>
</sql>
<!-- ==================== U 类型(非关联保单应收单)完整查询 ==================== -->
<sql id="receivableReportUSql">
SELECT
receivableNo,
policyNo,
policyHolder,
policyHolderEn,
insured,
insuredEn,
manualRemark,
reconciliation_company AS reconciliationCompany,
reconciliation_company_biz_id AS reconciliationCompanyBizId,
commission_period AS commissionPeriod,
total_period AS totalPeriod,
commission_date AS commissionDate,
NULL AS commissionRatio,
NULL AS paid,
IFNULL(amount, 0) AS amount,
currency,
IFNULL(expected_amount, 0) AS hkdAmount,
IFNULL(paid_amount, 0) AS paidAmount,
IFNULL(expected_amount - paid_amount, 0) AS unpaidAmount,
CASE WHEN IFNULL(expected_amount, 0) > 0
THEN ROUND(IFNULL(paid_amount, 0) / IFNULL(expected_amount, 0) * 100, 2)
ELSE 0
END AS paidRatio,
CASE WHEN IFNULL(expected_amount, 0) > 0
THEN ROUND((IFNULL(expected_amount, 0) - IFNULL(paid_amount, 0)) / IFNULL(expected_amount, 0) * 100, 2)
ELSE 0
END AS unpaidRatio,
default_exchange_rate AS exchangeRate,
insurance_company AS insuranceCompany,
product_name AS productName,
IFNULL(premium, 0) AS premium,
NULL AS policyCurrency
FROM (
<include refid="receivableReportUSqlBase"/>
WHERE 1=1
AND commission_biz_type = 'U'
AND is_deleted = 0
<include refid="receivableReportWhereCommon"/>
<include refid="receivableReportTeamBizIdFilter"/>
) u
<include refid="receivableReportOrderBy"/>
</sql>
<!-- ==================== R 类型基础查询(不含聚合,不含 WHERE 条件) ==================== -->
<sql id="receivableReportRSqlBase">
SELECT
ce.commission_biz_type,
ce.is_deleted,
ce.policy_no AS policyNo,
ce.manual_remark AS manualRemark,
ce.reconciliation_company,
ce.reconciliation_company_biz_id,
ce.commission_period,
ce.total_period,
ce.commission_date,
ce.commission_ratio,
ce.paid_ratio,
ce.amount,
ce.currency,
ce.expected_amount,
ce.paid_amount,
ce.default_exchange_rate,
ce.premium,
ce.status,
p.insurance_company,
p.product_name,
p.currency AS policyCurrency,
ph.name AS policyHolder,
ph.name_en AS policyHolderEn,
ins.name AS insured,
ins.name_en AS insuredEn
FROM commission_expected ce FROM commission_expected ce
LEFT JOIN policy p ON ce.policy_no = p.policy_no LEFT JOIN policy p ON ce.policy_no = p.policy_no
LEFT JOIN ( LEFT JOIN (
...@@ -152,44 +227,34 @@ ...@@ -152,44 +227,34 @@
FROM policy_insurant FROM policy_insurant
WHERE id IN (SELECT MIN(id) FROM policy_insurant GROUP BY policy_biz_id) WHERE id IN (SELECT MIN(id) FROM policy_insurant GROUP BY policy_biz_id)
) ins ON ins.policy_biz_id = p.policy_biz_id ) ins ON ins.policy_biz_id = p.policy_biz_id
GROUP BY ce.policy_no, ce.commission_period </sql>
</sql>
<!-- U 类型主查询(不含 WHERE 条件) --> <!-- ==================== U 类型基础查询(不含聚合,不含 WHERE 条件) ==================== -->
<sql id="receivableReportUSql"> <sql id="receivableReportUSqlBase">
SELECT SELECT
ce.commission_biz_type,
ce.is_deleted,
ce.receivable_no AS receivableNo, ce.receivable_no AS receivableNo,
ce.policy_no AS policyNo, ce.policy_no AS policyNo,
ce.manual_remark AS manualRemark,
ce.reconciliation_company,
ce.reconciliation_company_biz_id,
ce.commission_period,
ce.total_period,
ce.commission_date,
ce.amount,
ce.currency,
ce.expected_amount,
ce.paid_amount,
ce.default_exchange_rate,
ce.premium,
ce.status,
p.insurance_company,
p.product_name,
ph.name AS policyHolder, ph.name AS policyHolder,
ph.name_en AS policyHolderEn, ph.name_en AS policyHolderEn,
ins.name AS insured, ins.name AS insured,
ins.name_en AS insuredEn, ins.name_en AS insuredEn
ce.manual_remark AS manualRemark,
ce.reconciliation_company AS reconciliationCompany,
ce.reconciliation_company_biz_id AS reconciliationCompanyBizId,
ce.commission_period AS commissionPeriod,
ce.total_period AS totalPeriod,
ce.commission_date AS commissionDate,
NULL AS commissionRatio,
NULL AS paid,
IFNULL(ce.amount, 0) AS amount,
ce.currency AS currency,
IFNULL(ce.expected_amount, 0) AS hkdAmount,
IFNULL(ce.paid_amount, 0) AS paidAmount,
IFNULL(ce.expected_amount - ce.paid_amount, 0) AS unpaidAmount,
CASE WHEN IFNULL(ce.expected_amount, 0) > 0
THEN ROUND(IFNULL(ce.paid_amount, 0) / IFNULL(ce.expected_amount, 0) * 100, 2)
ELSE 0
END AS paidRatio,
CASE WHEN IFNULL(ce.expected_amount, 0) > 0
THEN ROUND((IFNULL(ce.expected_amount, 0) - IFNULL(ce.paid_amount, 0)) / IFNULL(ce.expected_amount, 0) * 100, 2)
ELSE 0
END AS unpaidRatio,
ce.default_exchange_rate AS exchangeRate,
p.insurance_company AS insuranceCompany,
p.product_name AS productName,
IFNULL(ce.premium, 0) AS premium,
NULL AS policyCurrency
FROM commission_expected ce FROM commission_expected ce
LEFT JOIN policy p ON ce.policy_no = p.policy_no LEFT JOIN policy p ON ce.policy_no = p.policy_no
LEFT JOIN ( LEFT JOIN (
...@@ -202,13 +267,11 @@ ...@@ -202,13 +267,11 @@
FROM policy_insurant FROM policy_insurant
WHERE id IN (SELECT MIN(id) FROM policy_insurant GROUP BY policy_biz_id) WHERE id IN (SELECT MIN(id) FROM policy_insurant GROUP BY policy_biz_id)
) ins ON ins.policy_biz_id = p.policy_biz_id ) ins ON ins.policy_biz_id = p.policy_biz_id
-- 注意 U 类型没有 GROUP BY,每笔单独显示 </sql>
</sql>
<!-- 公共 WHERE 条件(完全对应 getQueryWrapper) --> <!-- ==================== 公共 WHERE 条件(完全对应 getQueryWrapper) ==================== -->
<sql id="receivableReportWhereCommon"> <sql id="receivableReportWhereCommon">
AND ce.is_deleted = 0 <!-- 1. 空结果处理:queryFlag=true 且 policyNoList 为空 -->
<!-- 1. 空结果处理:queryFlag=true 且 policyNoList 为空 -> 1=0 -->
<if test="query.queryFlag != null and query.queryFlag and (query.policyNoList == null or query.policyNoList.size == 0)"> <if test="query.queryFlag != null and query.queryFlag and (query.policyNoList == null or query.policyNoList.size == 0)">
AND 1=0 AND 1=0
</if> </if>
...@@ -227,7 +290,7 @@ ...@@ -227,7 +290,7 @@
#{no} #{no}
</foreach> </foreach>
</if> </if>
<!-- 5. statusList (IN) --> <!-- 5. statusList -->
<if test="query.statusList != null and query.statusList.size > 0"> <if test="query.statusList != null and query.statusList.size > 0">
AND ce.status IN AND ce.status IN
<foreach collection="query.statusList" item="status" open="(" close=")" separator=","> <foreach collection="query.statusList" item="status" open="(" close=")" separator=",">
...@@ -268,7 +331,10 @@ ...@@ -268,7 +331,10 @@
<if test="query.productLaunchBizId != null and query.productLaunchBizId != ''"> <if test="query.productLaunchBizId != null and query.productLaunchBizId != ''">
AND ce.product_launch_biz_id = #{query.productLaunchBizId} AND ce.product_launch_biz_id = #{query.productLaunchBizId}
</if> </if>
<!-- 13. teamBizId (使用 EXISTS 子查询,与 getQueryWrapper 完全一致) --> </sql>
<!-- ==================== teamBizId 过滤(使用 EXISTS 子查询,与 getQueryWrapper 一致) ==================== -->
<sql id="receivableReportTeamBizIdFilter">
<if test="query.teamBizId != null and query.teamBizId != ''"> <if test="query.teamBizId != null and query.teamBizId != ''">
AND EXISTS ( AND EXISTS (
SELECT 1 FROM policy_broker pb SELECT 1 FROM policy_broker pb
...@@ -278,15 +344,16 @@ ...@@ -278,15 +344,16 @@
</if> </if>
</sql> </sql>
<!-- 排序(默认按 commission_date DESC,支持传入 sortField 和 sortOrder) --> <!-- ==================== 排序(支持传入 sortField 和 sortOrder) ==================== -->
<sql id="receivableReportOrderBy"> <sql id="receivableReportOrderBy">
ORDER BY
<choose> <choose>
<when test="query.sortField != null and query.sortField != '' and query.sortOrder != null"> <when test="query.sortField != null and query.sortField != '' and query.sortOrder != null">
ORDER BY
<if test="query.sortField == 'reconciliation_company'">reconciliationCompany</if> <if test="query.sortField == 'reconciliation_company'">reconciliationCompany</if>
<if test="query.sortField == 'commission_name'">commissionName</if> <if test="query.sortField == 'commission_name'">commissionName</if>
<if test="query.sortField == 'commission_period'">commissionPeriod</if> <if test="query.sortField == 'commission_period'">commissionPeriod</if>
<if test="query.sortField == 'amount'">amount</if> <if test="query.sortField == 'amount'">amount</if>
<!-- 其他字段默认按 commissionDate 排序 -->
<if test="query.sortField != 'reconciliation_company' and query.sortField != 'commission_name' and query.sortField != 'commission_period' and query.sortField != 'amount'"> <if test="query.sortField != 'reconciliation_company' and query.sortField != 'commission_name' and query.sortField != 'commission_period' and query.sortField != 'amount'">
commissionDate commissionDate
</if> </if>
...@@ -294,105 +361,9 @@ ...@@ -294,105 +361,9 @@
<if test="query.sortOrder != 'asc'">DESC</if> <if test="query.sortOrder != 'asc'">DESC</if>
</when> </when>
<otherwise> <otherwise>
commissionDate DESC ORDER BY commissionDate DESC, policyNo, commissionPeriod
</otherwise> </otherwise>
</choose> </choose>
, policyNo, commissionPeriod
</sql> </sql>
<!-- <select id="receivableReportPage" resultType="com.yd.csf.service.vo.ReceivableReportVO">
select
null as receivableNo,
ce.policy_no as policyNo,
(select pp.name from policy_policyholder pp where pp.policy_biz_id = p.policy_biz_id limit 1) as policyHolder,
(select pp.name_en from policy_policyholder pp where pp.policy_biz_id = p.policy_biz_id limit 1) as policyHolderEn,
(select pi.name from policy_insurant pi where pi.policy_biz_id = p.policy_biz_id limit 1) as insured,
(select pi.name_en from policy_insurant pi where pi.policy_biz_id = p.policy_biz_id limit 1) as insuredEn,
ce.manual_remark as manualRemark,
MAX(ce.reconciliation_company) as reconciliationCompany,
MAX(ce.reconciliation_company_biz_id) as reconciliationCompanyBizId,
ce.commission_period as commissionPeriod,
MAX(ce.total_period) as totalPeriod,
MAX(ce.commission_date) as commissionDate,
ifnull(sum(ce.commission_ratio), 0) as commissionRatio,
ifnull(sum(ce.paid_ratio), 0) as paid,
ifnull(sum(ce.amount), 0) as amount,
MAX(ce.currency) as currency,
ifnull(sum(ce.expected_amount), 0) as hkdAmount,
ifnull(sum(ce.paid_amount), 0) as paidAmount,
ifnull(sum(ce.expected_amount) - sum(ce.paid_amount), 0) as unpaidAmount,
case when ifnull(sum(ce.expected_amount), 0) > 0
then round(ifnull(sum(ce.paid_amount), 0) / ifnull(sum(ce.expected_amount), 0) * 100, 2)
else 0
end as paidRatio,
case when ifnull(sum(ce.expected_amount), 0) > 0
then round((ifnull(sum(ce.expected_amount), 0) - ifnull(sum(ce.paid_amount), 0)) / ifnull(sum(ce.expected_amount), 0) * 100, 2)
else 0
end as unpaidRatio,
MAX(ce.default_exchange_rate) as exchangeRate,
MAX(p.insurance_company) as insuranceCompany,
MAX(p.product_name) as productName,
ifnull(avg(ce.premium), 0) as premium,
MAX(p.currency) as policyCurrency
from commission_expected ce
left join policy p on ce.policy_no = p.policy_no
<where>
ce.commission_biz_type = 'R'
<if test="expectedIds != null and expectedIds.size > 0">
and ce.id in
<foreach collection="expectedIds" item="item" open="(" close=")" separator=",">
#{item}
</foreach>
</if>
and ce.is_deleted = 0
</where>
group by ce.policy_no, ce.commission_period
union all
select
ce.receivable_no as receivableNo,
ce.policy_no as policyNo,
(select pp.name from policy_policyholder pp where pp.policy_biz_id = p.policy_biz_id limit 1) as policyHolder,
(select pp.name_en from policy_policyholder pp where pp.policy_biz_id = p.policy_biz_id limit 1) as policyHolderEn,
(select pi.name from policy_insurant pi where pi.policy_biz_id = p.policy_biz_id limit 1) as insured,
(select pi.name_en from policy_insurant pi where pi.policy_biz_id = p.policy_biz_id limit 1) as insuredEn,
ce.manual_remark as manualRemark,
ce.reconciliation_company as reconciliationCompany,
ce.reconciliation_company_biz_id as reconciliationCompanyBizId,
ce.commission_period as commissionPeriod,
ce.total_period as totalPeriod,
ce.commission_date as commissionDate,
null as commissionRatio,
null as paid,
ifnull(ce.amount, 0) as amount,
ce.currency as currency,
ifnull(ce.expected_amount, 0) as hkdAmount,
ifnull(ce.paid_amount, 0) as paidAmount,
ifnull(ce.expected_amount - ce.paid_amount, 0) as unpaidAmount,
case when ifnull(ce.expected_amount, 0) > 0
then round(ifnull(ce.paid_amount, 0) / ifnull(ce.expected_amount, 0) * 100, 2)
else 0
end as paidRatio,
case when ifnull(ce.expected_amount, 0) > 0
then round((ifnull(ce.expected_amount, 0) - ifnull(ce.paid_amount, 0)) / ifnull(ce.expected_amount, 0) * 100, 2)
else 0
end as unpaidRatio,
ce.default_exchange_rate as exchangeRate,
p.insurance_company as insuranceCompany,
p.product_name as productName,
ifnull(ce.premium, 0) as premium,
null as policyCurrency
from commission_expected ce
left join policy p on ce.policy_no = p.policy_no
<where>
ce.commission_biz_type = 'U'
<if test="expectedIds != null and expectedIds.size > 0">
and ce.id in
<foreach collection="expectedIds" item="item" open="(" close=")" separator=",">
#{item}
</foreach>
</if>
and ce.is_deleted = 0
</where>
</select>-->
</mapper> </mapper>
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment