From c90e24bf83bdf0aa70c3bd3fdec262fe8de29e08 Mon Sep 17 00:00:00 2001 From: zhangbb Date: Tue, 2 Jun 2020 14:57:51 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B0=86getRentPenalty2=E7=9A=84=E5=86=85?= =?UTF-8?q?=E5=AE=B9=E6=8C=AA=E5=88=B0getRentPenalty=EF=BC=88=E5=BD=93?= =?UTF-8?q?=E7=A7=9F=E9=87=91=E5=AE=9E=E6=94=B6=E8=A1=A8=E6=9C=89=E5=A4=9A?= =?UTF-8?q?=E4=B8=AA=E6=95=B0=E6=8D=AE=E6=97=B6=EF=BC=8C=E7=BD=9A=E6=81=AF?= =?UTF-8?q?=E5=87=BD=E6=95=B0=E8=AE=A1=E7=AE=97=E9=94=99=E8=AF=AF=E3=80=82?= =?UTF-8?q?2=E6=89=8D=E6=98=AF=E6=AD=A3=E7=A1=AE=E3=80=82=EF=BC=89?= =?UTF-8?q?=E5=91=A8=E4=BA=9A=E8=BE=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src_sql/function/getRentPenalty.sql | 265 +++++++++++++++++++++++++--- 1 file changed, 242 insertions(+), 23 deletions(-) diff --git a/src_sql/function/getRentPenalty.sql b/src_sql/function/getRentPenalty.sql index dfe4099a2..f119c4659 100644 --- a/src_sql/function/getRentPenalty.sql +++ b/src_sql/function/getRentPenalty.sql @@ -1,23 +1,242 @@ -DELIMITER $$ - -USE `apzl`$$ - -DROP FUNCTION IF EXISTS `getRentPenalty`$$ - -CREATE DEFINER=`apzl`@`%` FUNCTION `getRentPenalty`(r_payment_number VARCHAR(40),r_plan_list VARCHAR(40),calc_date VARCHAR(40)) RETURNS VARCHAR(200) CHARSET gbk -RETURN ( -SELECT ROUND(MAX(te.rpenalty)+SUM(te.ipenalty)+SUM(te.tpenalty),2) FROM( -SELECT lrp.ID,lrp.PLAN_LIST,lccs.payment_number, -CASE WHEN (STR_TO_DATE(lrp.PLAN_DATE,'%Y/%m/%d')+c.attr_value)<=STR_TO_DATE(calc_date,'%Y/%m/%d') THEN lcc.PENA_RATE/10000*(DATEDIFF(STR_TO_DATE(calc_date,'%Y/%m/%d'),STR_TO_DATE(lrp.PLAN_DATE,'%Y/%m/%d')))*(lrp.rent-IFNULL(lric.rent,0)-IFNULL(lrit.rent,0)) ELSE 0 END rpenalty, -CASE WHEN (STR_TO_DATE(lrp.PLAN_DATE,'%Y/%m/%d')+c.attr_value)<=STR_TO_DATE(lri.hire_date,'%Y/%m/%d') THEN lcc.PENA_RATE/10000*(DATEDIFF(STR_TO_DATE(IF(STR_TO_DATE(lri.hire_date,'%Y/%m/%d')>STR_TO_DATE(calc_date,'%Y/%m/%d'),calc_date,lri.hire_date),'%Y/%m/%d'),STR_TO_DATE(lrp.PLAN_DATE,'%Y/%m/%d')))*IFNULL(lri.rent,0) ELSE 0 END ipenalty, -CASE WHEN (STR_TO_DATE(lrp.PLAN_DATE,'%Y/%m/%d')+c.attr_value)<=STR_TO_DATE(lrit.hire_date,'%Y/%m/%d') THEN lcc.PENA_RATE/10000*(DATEDIFF(STR_TO_DATE(IF(STR_TO_DATE(lrit.hire_date,'%Y/%m/%d')>STR_TO_DATE(calc_date,'%Y/%m/%d'),calc_date,lrit.hire_date),'%Y/%m/%d'),STR_TO_DATE(lrp.PLAN_DATE,'%Y/%m/%d')))*IFNULL(lrit.rent,0) ELSE 0 END tpenalty -FROM (SELECT * FROM lc_calc_condition_status WHERE PAYMENT_NUMBER=r_payment_number) lccs -LEFT JOIN lc_calc_condition lcc ON lcc.PAYMENT_NUMBER=lccs.PAYMENT_NUMBER -LEFT JOIN CONFIGURATE c ON 1=1 AND c.attr_id='免罚息天数配置' AND c.field1='汽车' -LEFT JOIN lc_rent_plan lrp ON lrp.PAYMENT_NUMBER=lccs.PAYMENT_NUMBER AND LRP.PAYMENT_NUMBER=r_payment_number -LEFT JOIN (SELECT * FROM lc_rent_income WHERE hire_date<=calc_date ) lri ON lri.PLAN_ID=lrp.ID AND lri.ROLL_BACK='0' AND LRI.PAYMENT_NUMBER=r_payment_number -LEFT JOIN (SELECT contract_id,plan_id,SUM(rent) rent,MAX(hire_date) hire_date FROM lc_rent_income WHERE ROLL_BACK='0' AND PAYMENT_NUMBER=r_payment_number AND STR_TO_DATE(hire_date,'%Y/%m/%d')<=STR_TO_DATE(calc_date,'%Y/%m/%d') GROUP BY contract_id,plan_id) lric ON lric.PLAN_ID=lrp.ID -LEFT JOIN (SELECT contract_id,plan_id,SUM(rent) rent,MAX(hire_date) hire_date FROM lc_rent_income_temp WHERE ROLL_BACK='0' AND PAYMENT_NUMBER=r_payment_number AND IS_FLOWING='0' GROUP BY contract_id,plan_id) lrit ON lrit.PLAN_ID=lrp.ID -WHERE lccs.payment_number=r_payment_number AND lrp.plan_list=r_plan_list -) te GROUP BY te.payment_number,te.id -)$$ +DELIMITER $$ + +USE `apzl`$$ + +DROP FUNCTION IF EXISTS `getRentPenalty`$$ + +CREATE DEFINER=`apzl`@`%` FUNCTION `getRentPenalty`(r_payment_number VARCHAR(40),r_plan_list VARCHAR(40),calc_date VARCHAR(40)) RETURNS VARCHAR(200) CHARSET gbk +RETURN ( +SELECT t.plan_penalty FROM ( + SELECT + `l`.`PAYMENT_NUMBER` AS `PAYMENT_NUMBER`, + `l`.`PLAN_LIST` AS `PLAN_LIST`, + `l`.`PLAN_DATE` AS `PLAN_DATE`, + ROUND( + SUM( + ( + CASE + WHEN ( + ( + STR_TO_DATE(`l`.`PLAN_DATE`, '%Y/%m/%d') + c.attr_value + ) < IF( + (`ll`.`hire_date` > calc_date), + calc_date, + `ll`.`hire_date` + ) + ) + THEN ( + ( + (`lcc`.`PENA_RATE` / 10000) * ( + TO_DAYS( + IF( + (`ll`.`hire_date` > calc_date), + calc_date, + `ll`.`hire_date` + ) + ) - TO_DAYS( + STR_TO_DATE(`l`.`PLAN_DATE`, '%Y/%m/%d') + ) + ) + ) * IFNULL(`ll`.`RENT`, 0) + ) + ELSE 0 + END + ) + ), + 2 + ) AS `plan_penalty`, + ROUND( + SUM( + ( + IFNULL(`ll`.`PENALTY`, 0) + IFNULL(`ll`.`PENALTY_ADJUST`, 0) + ) + ), + 2 + ) AS `income_penalty`, + ROUND( + ( + SUM( + ( + CASE + WHEN ( + ( + STR_TO_DATE(`l`.`PLAN_DATE`, '%Y/%m/%d') + c.attr_value + ) < IF( + (`ll`.`hire_date` > calc_date), + calc_date, + `ll`.`hire_date` + ) + ) + THEN ( + ( + (`lcc`.`PENA_RATE` / 10000) * ( + TO_DAYS( + IF( + (`ll`.`hire_date` > calc_date), + calc_date, + `ll`.`hire_date` + ) + ) - TO_DAYS( + STR_TO_DATE(`l`.`PLAN_DATE`, '%Y/%m/%d') + ) + ) + ) * IFNULL(`ll`.`RENT`, 0) + ) + ELSE 0 + END + ) + ) - SUM( + ( + IFNULL(`ll`.`PENALTY`, 0) + IFNULL(`ll`.`PENALTY_ADJUST`, 0) + ) + ) + ), + 2 + ) AS `penalty` + FROM + ( + ( + ( + `apzl`.`lc_calc_condition` `lcc` + LEFT JOIN `apzl`.`lc_calc_condition_status` `lccs` + ON ( + ( + `lcc`.`PAYMENT_NUMBER` = `lccs`.`PAYMENT_NUMBER` + ) + ) + LEFT JOIN CONFIGURATE c ON 1=1 AND c.attr_id='免罚息天数配置' AND c.field1='汽车' + ) + LEFT JOIN `apzl`.`lc_rent_plan` `l` + ON ( + ( + `lccs`.`PAYMENT_NUMBER` = `l`.`PAYMENT_NUMBER` + ) + ) + ) + LEFT JOIN + (SELECT + `lri`.`PAYMENT_NUMBER` AS `PAYMENT_NUMBER`, + `lri`.`PLAN_LIST` AS `PLAN_LIST`, + `lri`.`RENT` AS `RENT`, + `lri`.`PENALTY` AS `PENALTY`, + `lri`.`PENALTY_ADJUST` AS `PENALTY_ADJUST`, + STR_TO_DATE(`lri`.`HIRE_DATE`, '%Y/%m/%d') AS `hire_date` + FROM + `apzl`.`lc_rent_income` `lri` + WHERE (`lri`.`ROLL_BACK` = '0') + UNION + ALL + SELECT + `lrit`.`PAYMENT_NUMBER` AS `PAYMENT_NUMBER`, + `lrit`.`PLAN_LIST` AS `PLAN_LIST`, + `lrit`.`RENT` AS `RENT`, + `lrit`.`PENALTY` AS `PENALTY`, + `lrit`.`PENALTY_ADJUST` AS `PENALTY_ADJUST`, + STR_TO_DATE(`lrit`.`HIRE_DATE`, '%Y/%m/%d') AS `hire_date` + FROM + `apzl`.`lc_rent_income_temp` `lrit` + WHERE ( + (`lrit`.`ROLL_BACK` = '0') + AND (`lrit`.`IS_FLOWING` = '0') + ) + UNION + ALL + SELECT + `lrp`.`PAYMENT_NUMBER` AS `PAYMENT_NUMBER`, + `lrp`.`PLAN_LIST` AS `PLAN_LIST`, + ( + ( + `lrp`.`RENT` - IFNULL(`lr`.`srent`, 0) + ) - IFNULL(`lrt`.`srent`, 0) + ) AS `rent`, + 0 AS `0`, + 0 AS `0`, + calc_date AS `hire_date` + FROM + ( + ( + `apzl`.`lc_rent_plan` `lrp` + LEFT JOIN + (SELECT + `apzl`.`lc_rent_income`.`PAYMENT_NUMBER` AS `payment_number`, + `apzl`.`lc_rent_income`.`PLAN_LIST` AS `plan_list`, + SUM(`apzl`.`lc_rent_income`.`RENT`) AS `srent` + FROM + `apzl`.`lc_rent_income` + WHERE ( + `apzl`.`lc_rent_income`.`ROLL_BACK` = '0' + ) + GROUP BY `apzl`.`lc_rent_income`.`PAYMENT_NUMBER`, + `apzl`.`lc_rent_income`.`PLAN_LIST`) `lr` + ON ( + ( + ( + `lr`.`payment_number` = `lrp`.`PAYMENT_NUMBER` + ) + AND ( + `lr`.`plan_list` = `lrp`.`PLAN_LIST` + ) + ) + ) + ) + LEFT JOIN + (SELECT + `apzl`.`lc_rent_income_temp`.`PAYMENT_NUMBER` AS `payment_number`, + `apzl`.`lc_rent_income_temp`.`PLAN_LIST` AS `plan_list`, + SUM( + `apzl`.`lc_rent_income_temp`.`RENT` + ) AS `srent` + FROM + `apzl`.`lc_rent_income_temp` + WHERE ( + ( + `apzl`.`lc_rent_income_temp`.`ROLL_BACK` = '0' + ) + AND ( + `apzl`.`lc_rent_income_temp`.`IS_FLOWING` = '0' + ) + ) + GROUP BY `apzl`.`lc_rent_income_temp`.`PAYMENT_NUMBER`, + `apzl`.`lc_rent_income_temp`.`PLAN_LIST`) `lrt` + ON ( + ( + ( + `lrt`.`payment_number` = `lrp`.`PAYMENT_NUMBER` + ) + AND ( + `lrt`.`plan_list` = `lrp`.`PLAN_LIST` + ) + ) + ) + ) + WHERE ( + ( + ( + `lrp`.`RENT` - IFNULL(`lr`.`srent`, 0) + ) - IFNULL(`lrt`.`srent`, 0) + ) > 0 + )) `ll` + ON ( + ( + ( + `ll`.`PAYMENT_NUMBER` = `l`.`PAYMENT_NUMBER` + ) + AND ( + `ll`.`PLAN_LIST` = `l`.`PLAN_LIST` + ) + ) + ) + ) + WHERE ( + (`lccs`.`PLAN_STATUS` = '31') + AND (`l`.`PAYMENT_NUMBER` =r_payment_number) + AND l.PLAN_LIST=r_plan_list + ) + GROUP BY `l`.`PAYMENT_NUMBER`, + `l`.`PLAN_LIST`, + `l`.`PLAN_DATE` + ORDER BY `l`.`PAYMENT_NUMBER`, + `l`.`PLAN_LIST` ) t +)$$ + +DELIMITER ; \ No newline at end of file