<?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.by4cloud.platformx.business.mapper.ContractPaymentScheduleMapper">
|
|
<resultMap id="contractPaymentScheduleMap" type="com.by4cloud.platformx.business.entity.ContractPaymentSchedule">
|
<id property="id" column="id"/>
|
<result property="compId" column="comp_id"/>
|
<result property="actualAmount" column="actual_amount"/>
|
<result property="agreedDays" column="agreed_days"/>
|
<result property="calculationBasis" column="calculation_basis"/>
|
<result property="contractId" column="contract_id"/>
|
<result property="contractName" column="contract_name"/>
|
<result property="effectiveDate" column="effective_date"/>
|
<result property="fulfillmentStatus" column="fulfillment_status"/>
|
<result property="paymentRatio" column="payment_ratio"/>
|
<result property="paymentStatus" column="payment_status"/>
|
<result property="plannedAmount" column="planned_amount"/>
|
<!-- <result property="plannedPaymentDate" column="planned_payment_date"/>-->
|
<result property="remark" column="remark"/>
|
<result property="stageName" column="stage_name"/>
|
<result property="stageOrder" column="stage_order"/>
|
<result property="subjectMatterId" column="subject_matter_id"/>
|
<result property="subjectMatterName" column="subject_matter_name"/>
|
<result property="createBy" column="create_by"/>
|
<result property="createTime" column="create_time"/>
|
<result property="updateBy" column="update_by"/>
|
<result property="updateTime" column="update_time"/>
|
<result property="delFlag" column="del_flag"/>
|
</resultMap>
|
<select id="selectAgingCompany" resultType="com.by4cloud.platformx.business.vo.AgingCompanyVo">
|
SELECT
|
c.party_a_id companyId,
|
cps.comp_id
|
FROM
|
contract_payment_schedule cps,
|
contract c
|
WHERE
|
cps.contract_id = c.id
|
AND cps.del_flag = '0'
|
AND c.del_flag = '0'
|
AND cps.effective_end_date is not null
|
AND cps.effective_end_date < current_date
|
AND DATEDIFF(current_date, cps.effective_end_date)>0
|
AND cps.payment_status <> '2'
|
AND cps.payment_status <> 3
|
GROUP BY
|
c.party_a_id,
|
cps.comp_id
|
</select>
|
<select id="selectAgingTotal" resultType="com.by4cloud.platformx.business.vo.AgingVo">
|
SELECT
|
ranges.sort,
|
ranges.overdue_range,
|
COALESCE (
|
sum(
|
CASE
|
|
WHEN cps.payment_status = '0' THEN
|
cps.planned_amount
|
WHEN cps.payment_status = '1' THEN
|
cps.planned_amount - cps.actual_amount ELSE 0
|
END
|
),
|
0
|
) AS total_amount
|
FROM
|
(
|
SELECT
|
1 sort,
|
'0-30天' AS overdue_range,
|
0 AS min_days,
|
30 AS max_days UNION ALL
|
SELECT
|
2 sort,
|
'31-60天',
|
31,
|
60 UNION ALL
|
SELECT
|
3 sort,
|
'61-90天',
|
61,
|
90 UNION ALL
|
SELECT
|
4 sort,
|
'91-180天',
|
91,
|
180 UNION ALL
|
SELECT
|
5 sort,
|
'181-365天',
|
181,
|
365 UNION ALL
|
SELECT
|
6 sort,
|
'1年以上',
|
366,
|
999999
|
) ranges
|
LEFT JOIN contract_payment_schedule cps ON cps.del_flag = '0'
|
AND cps.payment_status NOT IN ( '2', '3' )
|
AND cps.effective_end_date < CURRENT_DATE
|
AND DATEDIFF( CURRENT_DATE, cps.effective_end_date ) BETWEEN ranges.min_days
|
AND ranges.max_days
|
LEFT JOIN contract c ON cps.contract_id = c.id
|
LEFT JOIN business_customer bc ON c.party_a_id = bc.id
|
WHERE
|
c.del_flag = '0'
|
<if test="queryDTO.companyId !=null">
|
and c.comp_id = #{queryDTO.companyId}
|
</if>
|
<if test="queryDTO.areaId !=null">
|
and bc.area_id = #{queryDTO.areaId}
|
</if>
|
<if test="queryDTO.industryId !=null">
|
and c.industry_code = #{queryDTO.industryId}
|
</if>
|
<if test="queryDTO.classId !=null">
|
and bc.class_id = #{queryDTO.classId}
|
</if>
|
GROUP BY
|
ranges.sort,
|
ranges.overdue_range,
|
ranges.min_days
|
ORDER BY
|
ranges.min_days
|
</select>
|
<select id="selectAgingCompanyShip" resultType="com.by4cloud.platformx.business.vo.AgingCompanyVo">
|
SELECT
|
c.party_a_id companyId,
|
c.comp_id
|
FROM
|
contract c
|
WHERE
|
c.del_flag = '0'
|
AND c.amount > c.paid_amount
|
AND EXISTS ( SELECT 1 FROM contract_out_bound cob WHERE cob.del_flag = '0' AND cob.contract_id = c.id )
|
GROUP BY
|
c.party_a_id,
|
c.comp_id;
|
</select>
|
<select id="selectAgingCompanyInvoice" resultType="com.by4cloud.platformx.business.vo.AgingCompanyVo">
|
SELECT
|
c.party_a_id companyId,
|
c.comp_id
|
FROM
|
contract c
|
WHERE
|
c.del_flag = '0'
|
AND c.amount > c.paid_amount
|
AND EXISTS ( SELECT 1 FROM contract_invoice ci WHERE ci.del_flag = '0' AND ci.contract_id = c.id )
|
GROUP BY
|
c.party_a_id,
|
c.comp_id;
|
</select>
|
<select id="selectAgingTotalShip" resultType="com.by4cloud.platformx.business.vo.AgingVo">
|
SELECT
|
ranges.sort,
|
ranges.overdue_range,
|
COALESCE (
|
sum(amount-paid_amount),
|
0
|
) AS total_amount
|
FROM
|
(
|
SELECT
|
1 sort,
|
'0-30天' AS overdue_range,
|
0 AS min_days,
|
30 AS max_days UNION ALL
|
SELECT
|
2 sort,
|
'31-60天',
|
31,
|
60 UNION ALL
|
SELECT
|
3 sort,
|
'61-90天',
|
61,
|
90 UNION ALL
|
SELECT
|
4 sort,
|
'91-180天',
|
91,
|
180 UNION ALL
|
SELECT
|
5 sort,
|
'181-365天',
|
181,
|
365 UNION ALL
|
SELECT
|
6 sort,
|
'1年以上',
|
366,
|
999999
|
) ranges
|
LEFT JOIN contract c ON c.del_flag = '0'
|
AND DATEDIFF(
|
CURRENT_DATE,
|
( SELECT max( out_bound_time ) FROM contract_out_bound cob WHERE cob.del_flag = '0' AND cob.contract_id = c.id ORDER BY out_bound_time ASC )) BETWEEN ranges.min_days
|
AND ranges.max_days
|
WHERE
|
c.del_flag = '0'
|
AND c.amount > c.paid_amount
|
<if test="queryDTO.companyId !=null">
|
and c.party_b_id = #{queryDTO.companyId}
|
</if>
|
AND EXISTS ( SELECT 1 FROM contract_out_bound cob WHERE cob.del_flag = '0' AND cob.contract_id = c.id )
|
GROUP BY
|
ranges.sort,
|
ranges.overdue_range,
|
ranges.min_days
|
ORDER BY
|
ranges.min_days;
|
</select>
|
<select id="selectAgingTotalInvoice" resultType="com.by4cloud.platformx.business.vo.AgingVo">
|
SELECT
|
ranges.sort,
|
ranges.overdue_range,
|
COALESCE (
|
sum(amount-paid_amount),
|
0
|
) AS total_amount
|
FROM
|
(
|
SELECT
|
1 sort,
|
'0-30天' AS overdue_range,
|
0 AS min_days,
|
30 AS max_days UNION ALL
|
SELECT
|
2 sort,
|
'31-60天',
|
31,
|
60 UNION ALL
|
SELECT
|
3 sort,
|
'61-90天',
|
61,
|
90 UNION ALL
|
SELECT
|
4 sort,
|
'91-180天',
|
91,
|
180 UNION ALL
|
SELECT
|
5 sort,
|
'181-365天',
|
181,
|
365 UNION ALL
|
SELECT
|
6 sort,
|
'1年以上',
|
366,
|
999999
|
) ranges
|
LEFT JOIN contract c ON c.del_flag = '0'
|
AND DATEDIFF(
|
CURRENT_DATE,
|
( SELECT max( invoice_time ) FROM contract_invoice ci WHERE ci.del_flag = '0' AND ci.contract_id = c.id ORDER BY invoice_time ASC )) BETWEEN ranges.min_days
|
AND ranges.max_days
|
WHERE
|
c.del_flag = '0'
|
AND c.amount > c.paid_amount
|
<if test="queryDTO.companyId !=null">
|
and c.party_b_id = #{queryDTO.companyId}
|
</if>
|
AND EXISTS ( SELECT 1 FROM contract_invoice ci WHERE ci.del_flag = '0' AND ci.contract_id = c.id)
|
GROUP BY
|
ranges.sort,
|
ranges.overdue_range,
|
ranges.min_days
|
ORDER BY
|
ranges.min_days;
|
</select>
|
<select id="selectAgingTotalScale" resultType="com.by4cloud.platformx.business.vo.AgingVo">
|
SELECT
|
ranges.sort,
|
ranges.overdue_range,
|
COALESCE (
|
SUM(
|
CASE
|
|
WHEN cps.payment_status = '0' THEN
|
cps.planned_amount
|
WHEN cps.payment_status = '1' THEN
|
cps.planned_amount - cps.actual_amount ELSE 0
|
END
|
),
|
0
|
) AS total_amount
|
FROM
|
(
|
SELECT
|
1 sort,
|
'0-30天' AS overdue_range,
|
0 AS min_days,
|
30 AS max_days UNION ALL
|
SELECT
|
2 sort,
|
'31-60天',
|
31,
|
60 UNION ALL
|
SELECT
|
3 sort,
|
'61-90天',
|
61,
|
90 UNION ALL
|
SELECT
|
4 sort,
|
'91-180天',
|
91,
|
180 UNION ALL
|
SELECT
|
5 sort,
|
'181-365天',
|
181,
|
365 UNION ALL
|
SELECT
|
6 sort,
|
'1年以上',
|
366,
|
999999
|
) AS ranges
|
LEFT JOIN contract_payment_schedule cps ON cps.del_flag = '0'
|
AND cps.payment_status NOT IN ( '2', '3' )
|
AND cps.effective_end_date < CURRENT_DATE
|
AND DATEDIFF( CURRENT_DATE, cps.effective_end_date ) BETWEEN ranges.min_days
|
AND ranges.max_days
|
LEFT JOIN contract c ON cps.contract_id = c.id
|
WHERE
|
c.del_flag = '0'
|
<if test="queryDTO.companyId !=null">
|
and c.party_b_id = #{queryDTO.companyId}
|
</if>
|
GROUP BY
|
ranges.sort,
|
ranges.overdue_range,
|
ranges.min_days
|
ORDER BY
|
ranges.min_days;
|
</select>
|
</mapper>
|