Commit d6998bcf by zhangxingmin

push

parent 69d67a28
...@@ -68,13 +68,45 @@ ...@@ -68,13 +68,45 @@
</where> </where>
</select> </select>
<select id="receivableReportPage" resultType="com.yd.csf.service.vo.ReceivableReportVO"> <select id="receivableReportPage" resultType="com.yd.csf.service.vo.ReceivableReportVO">
<!-- 预先获取每个 policy_biz_id 对应的第一条保单持有人和受保人信息 --> <!-- 完全对齐 getQueryWrapper 的条件 -->
<!-- 使用子查询 + MIN(id) 方式,兼容 MySQL 5.7 --> <choose>
SELECT <!-- 如果 commissionBizType 有值且不为空,只查对应类型 -->
tmp.* <when test="query.commissionBizType != null and query.commissionBizType != ''">
FROM ( <if test="query.commissionBizType == 'R'">
-- 关联保单应收单部分 SELECT * FROM (
<include refid="receivableReportRSql"/>
WHERE ce.commission_biz_type = 'R'
<include refid="receivableReportWhereCommon"/>
) tmp
</if>
<if test="query.commissionBizType == 'U'">
SELECT * FROM (
<include refid="receivableReportUSql"/>
WHERE ce.commission_biz_type = 'U'
<include refid="receivableReportWhereCommon"/>
) tmp
</if>
</when>
<!-- 否则 UNION ALL 两种类型 -->
<otherwise>
SELECT * FROM (
<include refid="receivableReportRSql"/>
WHERE ce.commission_biz_type = 'R'
<include refid="receivableReportWhereCommon"/>
UNION ALL
<include refid="receivableReportUSql"/>
WHERE ce.commission_biz_type = 'U'
<include refid="receivableReportWhereCommon"/>
) tmp
</otherwise>
</choose>
<include refid="receivableReportOrderBy"/>
</select>
<!-- R 类型主查询(不含 WHERE 条件) -->
<sql id="receivableReportRSql">
SELECT SELECT
NULL AS receivableNo, NULL AS receivableNo,
ce.policy_no AS policyNo, ce.policy_no AS policyNo,
...@@ -120,14 +152,11 @@ ...@@ -120,14 +152,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
WHERE ce.commission_biz_type = 'R'
AND ce.is_deleted = 0
<include refid="receivableReportWhere"/>
GROUP BY ce.policy_no, ce.commission_period GROUP BY ce.policy_no, ce.commission_period
</sql>
UNION ALL <!-- U 类型主查询(不含 WHERE 条件) -->
<sql id="receivableReportUSql">
-- 非关联保单应收单部分
SELECT SELECT
ce.receivable_no AS receivableNo, ce.receivable_no AS receivableNo,
ce.policy_no AS policyNo, ce.policy_no AS policyNo,
...@@ -173,52 +202,102 @@ ...@@ -173,52 +202,102 @@
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
WHERE ce.commission_biz_type = 'U' -- 注意 U 类型没有 GROUP BY,每笔单独显示
AND ce.is_deleted = 0 </sql>
<include refid="receivableReportWhere"/>
) tmp
ORDER BY tmp.commissionDate DESC, tmp.policyNo, tmp.commissionPeriod
</select>
<!-- 公共 WHERE 条件片段 --> <!-- 公共 WHERE 条件(完全对应 getQueryWrapper) -->
<sql id="receivableReportWhere"> <sql id="receivableReportWhereCommon">
AND ce.is_deleted = 0
<!-- 1. 空结果处理:queryFlag=true 且 policyNoList 为空 -> 1=0 -->
<if test="query.queryFlag != null and query.queryFlag and (query.policyNoList == null or query.policyNoList.size == 0)">
AND 1=0
</if>
<!-- 2. receivableNo -->
<if test="query.receivableNo != null and query.receivableNo != ''">
AND ce.receivable_no = #{query.receivableNo}
</if>
<!-- 3. policyNo (精确) -->
<if test="query.policyNo != null and query.policyNo != ''"> <if test="query.policyNo != null and query.policyNo != ''">
AND ce.policy_no = #{query.policyNo} AND ce.policy_no = #{query.policyNo}
</if> </if>
<!-- 4. policyNoList (IN) -->
<if test="query.policyNoList != null and query.policyNoList.size > 0"> <if test="query.policyNoList != null and query.policyNoList.size > 0">
AND ce.policy_no IN AND ce.policy_no IN
<foreach collection="query.policyNoList" item="no" open="(" close=")" separator=","> <foreach collection="query.policyNoList" item="no" open="(" close=")" separator=",">
#{no} #{no}
</foreach> </foreach>
</if> </if>
<!-- 5. statusList (IN) -->
<if test="query.statusList != null and query.statusList.size > 0">
AND ce.status IN
<foreach collection="query.statusList" item="status" open="(" close=")" separator=",">
#{status}
</foreach>
</if>
<!-- 6. commissionDateStart -->
<if test="query.commissionDateStart != null"> <if test="query.commissionDateStart != null">
AND ce.commission_date >= #{query.commissionDateStart} AND ce.commission_date >= #{query.commissionDateStart}
</if> </if>
<!-- 7. commissionDateEnd -->
<if test="query.commissionDateEnd != null"> <if test="query.commissionDateEnd != null">
AND ce.commission_date &lt;= #{query.commissionDateEnd} AND ce.commission_date &lt;= #{query.commissionDateEnd}
</if> </if>
<!-- 8. commissionPeriod -->
<if test="query.commissionPeriod != null"> <if test="query.commissionPeriod != null">
AND ce.commission_period = #{query.commissionPeriod} AND ce.commission_period = #{query.commissionPeriod}
</if> </if>
<!-- 9. commissionType -->
<if test="query.commissionType != null and query.commissionType != ''"> <if test="query.commissionType != null and query.commissionType != ''">
AND ce.commission_type = #{query.commissionType} AND ce.commission_type = #{query.commissionType}
</if> </if>
<!-- 10. reconciliationCompanyBizIdList -->
<if test="query.reconciliationCompanyBizIdList != null and query.reconciliationCompanyBizIdList.size > 0"> <if test="query.reconciliationCompanyBizIdList != null and query.reconciliationCompanyBizIdList.size > 0">
AND ce.reconciliation_company_biz_id IN AND ce.reconciliation_company_biz_id IN
<foreach collection="query.reconciliationCompanyBizIdList" item="id" open="(" close=")" separator=","> <foreach collection="query.reconciliationCompanyBizIdList" item="id" open="(" close=")" separator=",">
#{id} #{id}
</foreach> </foreach>
</if> </if>
<!-- 11. insurerCompanyBizIdList -->
<if test="query.insurerCompanyBizIdList != null and query.insurerCompanyBizIdList.size > 0"> <if test="query.insurerCompanyBizIdList != null and query.insurerCompanyBizIdList.size > 0">
AND ce.insurance_company_biz_id IN AND ce.insurance_company_biz_id IN
<foreach collection="query.insurerCompanyBizIdList" item="id" open="(" close=")" separator=","> <foreach collection="query.insurerCompanyBizIdList" item="id" open="(" close=")" separator=",">
#{id} #{id}
</foreach> </foreach>
</if> </if>
<!-- 12. productLaunchBizId -->
<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>
<!-- 可根据需要添加更多条件,如 statusList 等 --> <!-- 13. teamBizId (使用 EXISTS 子查询,与 getQueryWrapper 完全一致) -->
<if test="query.teamBizId != null and query.teamBizId != ''">
AND EXISTS (
SELECT 1 FROM policy_broker pb
WHERE pb.policy_no = ce.policy_no
AND pb.team_biz_id = #{query.teamBizId}
)
</if>
</sql>
<!-- 排序(默认按 commission_date DESC,支持传入 sortField 和 sortOrder) -->
<sql id="receivableReportOrderBy">
ORDER BY
<choose>
<when test="query.sortField != null and query.sortField != '' and query.sortOrder != null">
<if test="query.sortField == 'reconciliation_company'">reconciliationCompany</if>
<if test="query.sortField == 'commission_name'">commissionName</if>
<if test="query.sortField == 'commission_period'">commissionPeriod</if>
<if test="query.sortField == 'amount'">amount</if>
<if test="query.sortField != 'reconciliation_company' and query.sortField != 'commission_name' and query.sortField != 'commission_period' and query.sortField != 'amount'">
commissionDate
</if>
<if test="query.sortOrder == 'asc'">ASC</if>
<if test="query.sortOrder != 'asc'">DESC</if>
</when>
<otherwise>
commissionDate DESC
</otherwise>
</choose>
, policyNo, commissionPeriod
</sql> </sql>
......
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