租金催收相关定时任务

This commit is contained in:
zhangbb 2020-07-02 16:38:09 +08:00
parent e8fa445e61
commit 3b7c04e4d9
3 changed files with 128 additions and 78 deletions

View File

@ -1,69 +1,48 @@
create view vi_overdue_rent_plan as (
SELECT LRP.ID AS ID,
LRP.QUOT_ID AS QUOT_ID,
LRP.CUST_ID AS CUST_ID,
LRP.PROJECT_ID AS PROJECT_ID,
LRP.PROJECT_PLAN_NUMBER AS PROJECT_PLAN_NUMBER,
LRP.CONTRACT_ID AS CONTRACT_ID,
LRP.CONTRACT_PLAN_NUMBER AS CONTRACT_PLAN_NUMBER,
LRP.PAYMENT_NUMBER AS PAYMENT_NUMBER,
LRP.PLAN_LIST AS PLAN_LIST,
LRP.PLAN_DATE AS PLAN_DATE,
LRP.RENT AS RENT,
LRP.CORPUS AS CORPUS,
INCOME.HIRE_DATE AS HIRE_DATE,
ifnull(INCOME.FACT_RENT, 0) AS FACT_RENT,
ifnull(INCOME.FACT_CORPUS, 0) AS FACT_CORPUS,
ifnull(INCOME.FACT_PENALTY, 0) AS FACT_PENALTY,
(ifnull(LRP.RENT, 0) - ifnull(INCOME.FACT_RENT, 0)) AS OVERDUERENT,
(ifnull(LRP.INTEREST, 0) - ifnull(INCOME.FACT_INTEREST, 0)) AS OVERINTEREST,
`getRentPenalty`(LRP.PAYMENT_NUMBER, LRP.PLAN_LIST, date_format(sysdate(), '%Y/%m/%d')) AS PENALTY,
(CASE
WHEN ((ifnull(INCOME.FACT_RENT, 0) - ifnull(LRP.RENT, 0)) >= 0) THEN (CASE
WHEN ((to_days(INCOME.HIRE_DATE) - to_days(LRP.PLAN_DATE)) < 0)
THEN 0
ELSE (to_days(INCOME.HIRE_DATE) - to_days(LRP.PLAN_DATE)) END)
ELSE (to_days(date_format(sysdate(), '%Y/%m/%d')) - to_days(LRP.PLAN_DATE)) END) AS OVERDUE_DAYS,
(CASE WHEN ((ifnull(INCOME.FACT_RENT, 0) - ifnull(LRP.RENT, 0)) >= 0) THEN '已结清' ELSE '未结清' END) AS PLAN_STATUS
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,
max(APZL.LC_RENT_INCOME.HIRE_DATE) AS HIRE_DATE,
ifnull(sum(APZL.LC_RENT_INCOME.RENT), 0) AS FACT_RENT,
ifnull(sum(APZL.LC_RENT_INCOME.CORPUS), 0) AS FACT_CORPUS,
ifnull(sum(APZL.LC_RENT_INCOME.INTEREST), 0) AS FACT_INTEREST,
ifnull(sum(APZL.LC_RENT_INCOME.PENALTY), 0) AS FACT_PENALTY
FROM APZL.LC_RENT_INCOME
WHERE (APZL.LC_RENT_INCOME.PAYMENT_NUMBER IS NOT NULL)
GROUP BY APZL.LC_RENT_INCOME.PAYMENT_NUMBER, APZL.LC_RENT_INCOME.PLAN_LIST
) INCOME ON (((LRP.PAYMENT_NUMBER = INCOME.PAYMENT_NUMBER) AND (LRP.PLAN_LIST = INCOME.PLAN_LIST))))
WHERE ((LRP.PAYMENT_NUMBER IS NOT NULL) AND (LRP.PLAN_DATE <= convert(date_format(sysdate(), '%Y/%m/%d') USING GBK)))
ORDER BY LRP.PAYMENT_NUMBER, LRP.PLAN_LIST);
-- comment on column vi_overdue_rent_plan.ID not supported: 标识
-- comment on column vi_overdue_rent_plan.QUOT_ID not supported: 报价编号
-- comment on column vi_overdue_rent_plan.CUST_ID not supported: 客户编号
-- comment on column vi_overdue_rent_plan.PROJECT_ID not supported: 项目编号
-- comment on column vi_overdue_rent_plan.PROJECT_PLAN_NUMBER not supported: 项目方案编号
-- comment on column vi_overdue_rent_plan.CONTRACT_ID not supported: 合同编号
-- comment on column vi_overdue_rent_plan.CONTRACT_PLAN_NUMBER not supported: 合同方案编号
-- comment on column vi_overdue_rent_plan.PAYMENT_NUMBER not supported: 投放编号
-- comment on column vi_overdue_rent_plan.PLAN_LIST not supported: 期次
-- comment on column vi_overdue_rent_plan.PLAN_DATE not supported: 计划日期
-- comment on column vi_overdue_rent_plan.RENT not supported: 租金
-- comment on column vi_overdue_rent_plan.corpus not supported: 财务本金
-- comment on column vi_overdue_rent_plan.HIRE_DATE not supported: 核销日期
DELIMITER $$
ALTER ALGORITHM=UNDEFINED DEFINER=`apzl`@`%` SQL SECURITY DEFINER VIEW `vi_overdue_rent_plan` AS (
-- 查询字段变动时记得把lc_overdue_rent_plan也改一下
SELECT
`lrp`.`ID` AS `ID`,
`lrp`.`QUOT_ID` AS `QUOT_ID`,
`lrp`.`CUST_ID` AS `CUST_ID`,
`lrp`.`PROJECT_ID` AS `PROJECT_ID`,
`lrp`.`PROJECT_PLAN_NUMBER` AS `PROJECT_PLAN_NUMBER`,
`lrp`.`CONTRACT_ID` AS `CONTRACT_ID`,
`lrp`.`CONTRACT_PLAN_NUMBER` AS `CONTRACT_PLAN_NUMBER`,
`lrp`.`PAYMENT_NUMBER` AS `PAYMENT_NUMBER`,
`lrp`.`PLAN_LIST` AS `PLAN_LIST`,
`lrp`.`PLAN_DATE` AS `PLAN_DATE`,
`lrp`.`RENT` AS `RENT`,
`lrp`.`CORPUS` AS `corpus`,
`income`.`hire_date` AS `HIRE_DATE`,
IFNULL(`income`.`fact_rent`,0) AS `fact_rent`,
IFNULL(`income`.`fact_corpus`,0) AS `fact_corpus`,
IFNULL(`income`.`fact_penalty`,0) AS `fact_penalty`,
(IFNULL(`lrp`.`RENT`,0) - IFNULL(`income`.`fact_rent`,0)) AS `overduerent`,
(IFNULL(`lrp`.`INTEREST`,0) - IFNULL(`income`.`fact_interest`,0)) AS `overinterest`,
`getRentPenalty`(
`lrp`.`PAYMENT_NUMBER`,`lrp`.`PLAN_LIST`,DATE_FORMAT(SYSDATE(),'%Y/%m/%d')) AS `penalty`,
(CASE WHEN ((IFNULL(`income`.`fact_rent`,0) - IFNULL(`lrp`.`RENT`,0)) >= 0) THEN (CASE WHEN ((TO_DAYS(`income`.`hire_date`) - TO_DAYS(`lrp`.`PLAN_DATE`)) < 0) THEN 0 ELSE (TO_DAYS(`income`.`hire_date`) - TO_DAYS(`lrp`.`PLAN_DATE`)) END) ELSE (TO_DAYS(DATE_FORMAT(SYSDATE(),'%Y/%m/%d')) - TO_DAYS(`lrp`.`PLAN_DATE`)) END) AS `Overdue_days`,
(CASE WHEN ((IFNULL(`income`.`fact_rent`,0) - IFNULL(`lrp`.`RENT`,0)) >= 0) THEN '已结清' ELSE '未结清' END) AS `PLAN_STATUS`,
SYSDATE() AS inputtime
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`,
MAX(`apzl`.`lc_rent_income`.`HIRE_DATE`) AS `hire_date`,
IFNULL(SUM(`apzl`.`lc_rent_income`.`RENT`),0) AS `fact_rent`,
IFNULL(SUM(`apzl`.`lc_rent_income`.`CORPUS`),0) AS `fact_corpus`,
IFNULL(SUM(`apzl`.`lc_rent_income`.`INTEREST`),0) AS `fact_interest`,
IFNULL(SUM(`apzl`.`lc_rent_income`.`PENALTY`),0) AS `fact_penalty`
FROM `apzl`.`lc_rent_income`
WHERE (`apzl`.`lc_rent_income`.`PAYMENT_NUMBER` IS NOT NULL)
GROUP BY `apzl`.`lc_rent_income`.`PAYMENT_NUMBER`,`apzl`.`lc_rent_income`.`PLAN_LIST`) `income`
ON (((`lrp`.`PAYMENT_NUMBER` = `income`.`payment_number`)
AND (`lrp`.`PLAN_LIST` = `income`.`plan_list`)))
LEFT JOIN lb_contract_info lci ON lci.id=lrp.contract_id)
WHERE (lci.businesstype='1' AND (`lrp`.`PAYMENT_NUMBER` IS NOT NULL)
AND (`lrp`.`PLAN_DATE` <= CONVERT(DATE_FORMAT(SYSDATE(),'%Y/%m/%d')USING gbk)))
ORDER BY `lrp`.`PAYMENT_NUMBER`,`lrp`.`PLAN_LIST`)$$
DELIMITER ;

View File

@ -1,12 +1,18 @@
create view vi_overdue_rent_plan_sum as SELECT VI_OVERDUE_RENT_PLAN.CONTRACT_ID AS CONTRACT_ID,
count(VI_OVERDUE_RENT_PLAN.PLAN_LIST) AS OVER_LIST,
max(VI_OVERDUE_RENT_PLAN.OVERDUE_DAYS) AS OVER_DAYS,
round(sum(VI_OVERDUE_RENT_PLAN.OVERDUERENT), 2) AS OVER_MONEY,
round(sum(VI_OVERDUE_RENT_PLAN.PENALTY), 2) AS OVER_PENALTY,
round(sum(VI_OVERDUE_RENT_PLAN.OVERINTEREST), 2) AS OVER_INTEREST
FROM APZL.VI_OVERDUE_RENT_PLAN
WHERE (VI_OVERDUE_RENT_PLAN.OVERDUERENT > 0)
GROUP BY VI_OVERDUE_RENT_PLAN.CONTRACT_ID;
DELIMITER $$
ALTER ALGORITHM=UNDEFINED DEFINER=`apzl`@`%` SQL SECURITY DEFINER VIEW `vi_overdue_rent_plan_sum` AS
SELECT
`lc_overdue_rent_plan`.`CONTRACT_ID` AS `contract_id`,
COUNT(`lc_overdue_rent_plan`.`PLAN_LIST`) AS `over_list`,
MAX(`lc_overdue_rent_plan`.`Overdue_days`) AS `over_days`,
ROUND(SUM(`lc_overdue_rent_plan`.`overduerent`),2) AS `over_money`,
ROUND(SUM(`lc_overdue_rent_plan`.`penalty`),2) AS `over_penalty`,
ROUND(SUM(`lc_overdue_rent_plan`.`overinterest`),2) AS `over_interest`
FROM `apzl`.`lc_overdue_rent_plan`
WHERE (`lc_overdue_rent_plan`.`overduerent` > 0)
GROUP BY `lc_overdue_rent_plan`.`CONTRACT_ID`$$
DELIMITER ;
-- comment on column vi_overdue_rent_plan_sum.contract_id not supported: 合同编号

View File

@ -0,0 +1,65 @@
package com.tenwa.lease.app.quartzmession;
import com.amarsoft.are.jbo.BizObject;
import com.amarsoft.are.jbo.BizObjectManager;
import com.amarsoft.are.jbo.JBOException;
import com.amarsoft.are.jbo.JBOFactory;
import com.amarsoft.are.jbo.JBOTransaction;
import com.amarsoft.are.sql.Connection;
import com.amarsoft.are.util.StringFunction;
import com.amarsoft.awe.util.Transaction;
import com.amarsoft.dict.als.cache.CacheLoaderFactory;
import com.base.util.QuartzUtil;
import com.tenwa.comm.util.jboutil.DataOperatorUtil;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import java.sql.CallableStatement;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.List;
import java.util.Map;
import jbo.app.tenwa.calc.LV_PENALTY_INFO;
import jbo.com.tenwa.lease.comm.LB_CONTRACT_INFO;
/**
* 计算罚息定时任务
* @author zhangbeibei
*/
public class PenaltyQuartz4Press implements Job {
@Override
public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
String startime = StringFunction.getTodayNow();
Object userId = jobExecutionContext.getTrigger().getJobDataMap().get("CurUserId");
String curUserId = userId == null? "system" : userId.toString();
Transaction Sqlca = null;
try {
Sqlca = Transaction.createTransaction(CacheLoaderFactory.getDataSource());
String sql = "INSERT INTO lc_overdue_rent_plan SELECT * FROM vi_overdue_rent_plan ";
Sqlca.executeSQL("delete from lc_overdue_rent_plan");
Sqlca.executeSQL(sql);
QuartzUtil.insertLog(startime,"com.tenwa.lease.app.quartzmession.PenaltyQuartz", "success", "成功", curUserId);
} catch (Exception e) {
QuartzUtil.insertLog(startime,"com.tenwa.lease.app.quartzmession.PenaltyQuartz", "error", "失败", curUserId);
e.printStackTrace();
try {
Sqlca.rollback();
} catch (JBOException e1) {
e1.printStackTrace();
}
}finally{
try {
if(Sqlca != null) {
Sqlca.commit();
Sqlca.disConnect();
}
} catch (JBOException e) {
e.printStackTrace();
}
}
}
}