diff --git a/src_sql/procedure/PROC_CALC_PENALTY.sql b/src_sql/procedure/PROC_CALC_PENALTY.sql new file mode 100644 index 000000000..df7e0b37c --- /dev/null +++ b/src_sql/procedure/PROC_CALC_PENALTY.sql @@ -0,0 +1,50 @@ +-- 罚息存储过程 +CREATE PROCEDURE PROC_CALC_PENALTY(IN CALC_DATE VARCHAR(10)) +BEGIN + -- 注意:不要变动LC_PENALTY_INFO表的唯一性索引 + -- 罚息存储过程 + REPLACE INTO LC_PENALTY_INFO(ID, + PROJECT_ID, + PROJECT_PLAN_NUMBER, + CONTRACT_ID, + CONTRACT_PLAN_NUMBER, + PAYMENT_NUMBER, + PLAN_ID, + PLAN_DATE, + PLAN_LIST, + RENT_PLAN_DATE, + PLAN_PENALTY, + INPUTTIME) + SELECT TT.ID, + TT.PROJECT_ID, + TT.PROJECT_PLAN_NUMBER, + TT.CONTRACT_ID, + TT.CONTRACT_PLAN_NUMBER, + TT.PAYMENT_NUMBER, + TT.PLAN_ID, + CALC_DATE, + TT.PLAN_LIST, + TT.PLAN_DATE, + TT.PLAN_PENALTY, + TT.INPUTTIME + FROM ( + SELECT IFNULL(LPI.ID, REPLACE(UUID(), '-', '')) ID, + LRPT.PROJECT_ID, + LRPT.PROJECT_PLAN_NUMBER, + LRPT.CONTRACT_ID, + LRPT.CONTRACT_PLAN_NUMBER, + LRPT.PAYMENT_NUMBER, + LRPT.ID AS PLAN_ID, + LRPT.PLAN_LIST, + LRPT.PLAN_DATE, + IFNULL(LPI.PLAN_PENALTY, 0) AS OLD_PLAN_PENALTY, + getRentPenalty(LRPT.PAYMENT_NUMBER, LRPT.PLAN_LIST, CALC_DATE) AS PLAN_PENALTY, + DATE_FORMAT(NOW(), '%Y/%m/%d %H:%i:%s') AS INPUTTIME + FROM LC_RENT_PLAN LRPT + LEFT JOIN LB_CONTRACT_INFO LCI ON LCI.ID = LRPT.CONTRACT_ID + LEFT JOIN LC_PENALTY_INFO LPI ON LRPT.PAYMENT_NUMBER = LPI.PAYMENT_NUMBER AND LRPT.PLAN_LIST = LPI.PLAN_LIST + WHERE LCI.CONTRACT_STATUS = '31' + ) TT + WHERE TT.PLAN_PENALTY <> TT.OLD_PLAN_PENALTY + AND TT.PLAN_PENALTY > 0; +END; \ No newline at end of file diff --git a/src_sql/鎶曚骇SQL/v20191228/lcj_20191228.sql b/src_sql/鎶曚骇SQL/v20191228/lcj_20191228.sql new file mode 100644 index 000000000..4a7f47e45 --- /dev/null +++ b/src_sql/鎶曚骇SQL/v20191228/lcj_20191228.sql @@ -0,0 +1,18 @@ +-- 罚息表增加唯一性限制 +alter table lc_penalty_info + add constraint lc_penalty_info_pn_pl + unique (payment_number, plan_list); + +-- 配置罚息计算定时任务 +-- 1、插入罚息定时任务数据字典 +INSERT INTO APZL.CODE_LIBRARY (CODENO, ITEMNO, ITEMNAME, BANKNO, SORTNO, ISINUSE, ITEMDESCRIBE, ITEMATTRIBUTE, RELATIVECODE, ATTRIBUTE1, ATTRIBUTE2, + ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5, ATTRIBUTE6, ATTRIBUTE7, ATTRIBUTE8, INPUTUSER, INPUTORG, INPUTTIME, UPDATEUSER, + UPDATETIME, REMARK, HELPTEXT) +VALUES ('MissionName', 'com.tenwa.lease.app.quartzmession.CalcPenaltyJob', '每天定时计算罚息', '', '0590', '1', '每天定时计算罚息', '', '', '', '', '', '', '', '', + '', '', 'SYS_Designer', NULL, '2019/12/26 10:13:04', 'SYS_Designer', '2019/12/26 10:14:07', '', ''); + +-- 2、【定时任务管理】菜单 +-- 新增:【执行任务类名】 选择 【每天定时生成罚息】,【描述】填入【每天定时生成罚息】,【是否再次执行过期任务】选择【否】,点击保存。 +-- 3、【定时任务配置】菜单 +-- 新增:【定时任务处理类】 选择 【每天定时生成罚息】,【定时器描述】填入【每天定时生成罚息】,【定时器状态】选择【运行】,【定时器Cron表达式】为【0 0 22 * * ? *】, +-- 【定时任务开始时间】选择 【今天】,【定时任务结束时间】选择 【最大】,点击保存 \ No newline at end of file diff --git a/src_tenwa/com/tenwa/lease/app/quartzmession/CalcPenaltyJob.java b/src_tenwa/com/tenwa/lease/app/quartzmession/CalcPenaltyJob.java new file mode 100644 index 000000000..97f5069d4 --- /dev/null +++ b/src_tenwa/com/tenwa/lease/app/quartzmession/CalcPenaltyJob.java @@ -0,0 +1,52 @@ +package com.tenwa.lease.app.quartzmession; + +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.awe.util.Transaction; +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; + + +/** + * 计算罚息定时任务 + * @author lichaojie + */ +public class CalcPenaltyJob implements Job { + @Override + public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException { + JBOTransaction tx; + Transaction tran = null; + try { + tx = JBOFactory.createJBOTransaction(); + tran = Transaction.createTransaction(tx); + + // 获取当前日期 + String todayDateStr = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy/MM/dd")); + + Connection connection = tran.getConnection(tran); + CallableStatement callableStatement = connection.prepareCall("{call PROC_CALC_PENALTY(?)}"); + callableStatement.setString(1, todayDateStr); + callableStatement.execute(); + callableStatement.close(); + + tran.commit(); + } catch (Exception e) { + e.printStackTrace(); + try { + if (tran != null) { + tran.rollback(); + } + } catch (JBOException e1) { + e1.printStackTrace(); + } + throw new JobExecutionException(e); + } + } +}