将getRentPenalty2的内容挪到getRentPenalty(当租金实收表有多个数据时,罚息函数计算错误。2才是正确。)周亚辉
This commit is contained in:
parent
617668d5c8
commit
c90e24bf83
@ -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 ;
|
||||
Loading…
x
Reference in New Issue
Block a user