185 lines
9.6 KiB
Java
185 lines
9.6 KiB
Java
package com.tenwa.lease.app.quartzmession;
|
|
|
|
import java.math.BigDecimal;
|
|
import java.text.DateFormat;
|
|
import java.text.SimpleDateFormat;
|
|
import java.util.ArrayList;
|
|
import java.util.Date;
|
|
import java.util.HashMap;
|
|
import java.util.List;
|
|
import java.util.Map;
|
|
|
|
import org.quartz.Job;
|
|
import org.quartz.JobExecutionContext;
|
|
import org.quartz.JobExecutionException;
|
|
|
|
import jbo.com.tenwa.lease.comm.CONTRACT_RENT_MONTH;
|
|
import jbo.com.tenwa.lease.comm.LB_CONTRACT_INFO;
|
|
|
|
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.util.StringFunction;
|
|
import com.amarsoft.awe.util.Transaction;
|
|
import com.base.util.QuartzUtil;
|
|
import com.tenwa.comm.util.jboutil.DataOperatorUtil;
|
|
import com.tenwa.lease.util.MonthInterestEntity;
|
|
/***
|
|
* 传统业务和汽车类传统业务的计提利息计算
|
|
* 分成月付和季付两种
|
|
* @author amarsoft
|
|
*
|
|
*/
|
|
public class SplitInts3 implements Job{
|
|
@Override
|
|
public void execute(JobExecutionContext arg0) throws JobExecutionException {
|
|
JBOTransaction tx =null;
|
|
String startime = StringFunction.getTodayNow();
|
|
|
|
Object userId = arg0.getTrigger().getJobDataMap().get("CurUserId");
|
|
String curUserId = userId == null? "system" : userId.toString();
|
|
try{
|
|
contractRentMonth(tx);
|
|
contractRentQuarter(tx);
|
|
tx.commit();
|
|
discountApportion();
|
|
QuartzUtil.insertLog(startime,"com.tenwa.lease.app.quartzmession.SplitInts3", "success", "成功", curUserId);
|
|
}catch(Exception e){
|
|
QuartzUtil.insertLog(startime,"com.tenwa.lease.app.quartzmession.SplitInts3", "error", "失败", curUserId);
|
|
try {
|
|
tx.rollback();
|
|
if(tx!=null)tx=null;
|
|
} catch (JBOException e1) {
|
|
e1.printStackTrace();
|
|
}
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
|
|
public void contractRentMonth(JBOTransaction tx) throws Exception {
|
|
|
|
Transaction Sqlca =null;
|
|
List<String> idList=new ArrayList<String>();
|
|
|
|
//tx =JBOFactory.createJBOTransaction();
|
|
Sqlca = Transaction.createTransaction(tx);
|
|
//传统月付
|
|
String sql="SELECT lci.id AS ID ,lcc.PAYMENT_NUMBER,getTax(lci.leas_form,'租息',lcc.start_date) as TAX, lcc.START_DATE,lr.interest INTEREST, ROUND(lcc.HANDLING_CHARGE_MONEY/getTax(lci.LEAS_FORM,'手续费',lcc.start_date),2) AS HANDLING_CHARGE_MONEY FROM lb_contract_info lci LEFT JOIN lc_calc_condition lcc ON lcc.contract_id=lci.id LEFT JOIN (SELECT lrp.contract_id,ROUND(SUM(lrp.interest/getTax(lci.LEAS_FORM,'租息',lcc.start_date)),2) interest FROM lc_rent_plan lrp LEFT JOIN lb_contract_info lci ON lci.id=lrp.CONTRACT_ID LEFT JOIN lc_calc_condition lcc ON lcc.contract_id=lci.id GROUP BY lrp.contract_id) lr ON lr.contract_id=lci.id WHERE NOT EXISTS (SELECT 1 FROM contract_rent_month WHERE contract_id = lcc.contract_id) AND nvl(lr.interest,0) > 0 AND lci.contract_status BETWEEN 31 AND 100 AND lci.id NOT IN (SELECT contract_id FROM lc_fund_rent_adjust) AND lci.BUSINESSTYPE<>'1' AND lcc.INCOME_NUMBER_YEAR='income_1'";
|
|
Map<String,String> map=new HashMap<String, String>();
|
|
//传统月付
|
|
List<Map<String,String>> dataList=DataOperatorUtil.getDataBySql(Sqlca, sql, map);
|
|
tx.commit();
|
|
Sqlca.commit();
|
|
for(Map<String,String> ma:dataList){
|
|
MonthInterestEntity mit =new MonthInterestEntity();
|
|
String contract_id=ma.get("ID");
|
|
mit.setHandling_charge_money(ma.get("HANDLING_CHARGE_MONEY"));
|
|
mit.setSum_interest(ma.get("INTEREST"));
|
|
mit.setStart_date(ma.get("START_DATE"));
|
|
mit.setTax_rate(ma.get("TAX"));
|
|
mit.setContract_id(contract_id);
|
|
mit.setPayment_number(ma.get("PAYMENT_NUMBER"));
|
|
excuteSave(contract_id,mit);
|
|
}
|
|
}
|
|
|
|
public void contractRentQuarter(JBOTransaction tx )throws Exception{
|
|
Transaction Sqlca =null;
|
|
List<String> idList=new ArrayList<String>();
|
|
|
|
//tx =JBOFactory.createJBOTransaction();
|
|
Sqlca = Transaction.createTransaction(tx);
|
|
//传统季付
|
|
String sql="SELECT lci.id AS ID ,lcc.PAYMENT_NUMBER,getTax(lci.leas_form,'租息',lcc.start_date) as TAX, lcc.START_DATE,lr.interest INTEREST, ROUND(lcc.HANDLING_CHARGE_MONEY/getTax(lci.LEAS_FORM,'手续费',lcc.start_date),2) AS HANDLING_CHARGE_MONEY FROM lb_contract_info lci LEFT JOIN lc_calc_condition lcc ON lcc.contract_id=lci.id LEFT JOIN (SELECT lrp.contract_id,ROUND(SUM(lrp.interest/getTax(lci.LEAS_FORM,'租息',lcc.start_date)),2) interest FROM lc_rent_plan lrp LEFT JOIN lb_contract_info lci ON lci.id=lrp.CONTRACT_ID LEFT JOIN lc_calc_condition lcc ON lcc.contract_id=lci.id GROUP BY lrp.contract_id) lr ON lr.contract_id=lci.id WHERE NOT EXISTS (SELECT 1 FROM contract_rent_month WHERE contract_id = lcc.contract_id) AND nvl(lr.interest,0) > 0 AND lci.contract_status BETWEEN 31 AND 100 AND lci.id NOT IN (SELECT contract_id FROM lc_fund_rent_adjust) AND lci.BUSINESSTYPE<>'1' AND lcc.INCOME_NUMBER_YEAR='income_3'";
|
|
|
|
Map<String,String> map=new HashMap<String, String>();
|
|
//传统季付
|
|
List<Map<String,String>> dataList=DataOperatorUtil.getDataBySql(Sqlca, sql, map);
|
|
//tx.commit();
|
|
Sqlca.commit();
|
|
for(Map<String,String> ma:dataList){
|
|
MonthInterestEntity mit =new MonthInterestEntity();
|
|
String contract_id=ma.get("ID");
|
|
mit.setHandling_charge_money(ma.get("HANDLING_CHARGE_MONEY"));
|
|
mit.setSum_interest(ma.get("INTEREST"));
|
|
mit.setStart_date(ma.get("START_DATE"));
|
|
mit.setTax_rate(ma.get("TAX"));
|
|
mit.setContract_id(contract_id);
|
|
mit.setPayment_number(ma.get("PAYMENT_NUMBER"));
|
|
excuteSave(contract_id,mit);
|
|
}
|
|
}
|
|
|
|
|
|
public void excuteSave(String contract_id,MonthInterestEntity mit) throws Exception {
|
|
JBOTransaction tx =null;
|
|
Transaction Sqlca =null;
|
|
tx =JBOFactory.createJBOTransaction();
|
|
Sqlca = Transaction.createTransaction(tx);
|
|
String sql="SELECT lrp.plan_list L_PLAN_LIST,lrp.plan_date L_PLAN_DATE,ROUND(lrp.interest/getTax(lci.LEAS_FORM,'租息',lcc.START_DATE),2) L_INTEREST,lrp1.plan_list N_PLAN_LIST,lrp1.plan_date N_PLAN_DATE,ROUND(lrp1.interest/getTax(lci.LEAS_FORM,'租息',lcc.START_DATE),2) N_INTERST,lcc.START_DATE FROM lc_rent_plan lrp LEFT JOIN lc_rent_plan lrp1 ON lrp1.contract_id=lrp.contract_id AND lrp1.plan_list=lrp.plan_list+1 LEFT JOIN lc_calc_condition lcc ON lcc.contract_id=lrp.contract_id LEFT JOIN lb_contract_info lci ON lci.ID=lcc.contract_id WHERE lrp.contract_id=:ID ORDER BY lrp.plan_list";
|
|
Map<String,String> map=new HashMap<String, String>();
|
|
map.put("ID", contract_id);
|
|
List<Map<String,String>> dataList=DataOperatorUtil.getDataBySql(Sqlca, sql, map);
|
|
mit.setRent_plan_list(dataList);
|
|
List<BizObject> bolist=mit.getBizObjList();
|
|
saveBM(tx,bolist);
|
|
tx.commit();
|
|
Sqlca.commit();
|
|
}
|
|
|
|
public void saveBM(JBOTransaction tx,List<BizObject> boList) throws Exception{
|
|
BizObjectManager bm=JBOFactory.getBizObjectManager(CONTRACT_RENT_MONTH.CLASS_NAME,tx);
|
|
for(BizObject bo:boList){if(bo!=null){bm.saveObject(bo);}}
|
|
}
|
|
|
|
public void discountApportion() throws Exception{
|
|
Transaction Sqlca =null;
|
|
DateFormat df = new SimpleDateFormat("yyyy/MM");
|
|
String startime = StringFunction.getTodayNow();
|
|
Date nowdate=df.parse(startime);
|
|
String contract_id="";
|
|
String DISCOUNT_money="";
|
|
String suminterest="";
|
|
BigDecimal discount=new BigDecimal("0.00");
|
|
Sqlca = Transaction.createTransaction("als");
|
|
Map<String,String> map=new HashMap<String, String>();
|
|
String sql="SELECT lec.contract_id,ROUND(ld.DISCOUNT_money/CASE WHEN lci.leas_form='01' THEN 1.16 ELSE 1.06 END ,2) AS DISCOUNT_money,crm.interest FROM LB_DISCOUNT ld LEFT JOIN LB_EQUIPMENT_CAR lec ON lec.FRAME_NUMBER=ld.FRAME_NUMBER AND lec.contract_id IS NOT NULL AND lec.contract_id<>'' LEFT JOIN lb_contract_info lci ON lci.id=lec.contract_id INNER JOIN (SELECT contract_id,SUM(interest) interest FROM contract_rent_month GROUP BY contract_id) crm ON crm.contract_id=lec.contract_id WHERE DATE_FORMAT(ld.inputtime,'%Y/%m/%d')=DATE_FORMAT(SYSDATE(),'%Y/%m/%d')";
|
|
List<Map<String,String>> dataList=DataOperatorUtil.getDataBySql(Sqlca, sql, map);
|
|
BizObjectManager bom=JBOFactory.getBizObjectManager(CONTRACT_RENT_MONTH.CLASS_NAME, Sqlca);
|
|
|
|
for(Map<String,String> ma:dataList){
|
|
contract_id=ma.get("contract_id");
|
|
DISCOUNT_money=ma.get("DISCOUNT_money");
|
|
suminterest=ma.get("interest");
|
|
BizObject bo=null;
|
|
String accurte_date="";
|
|
Date accdate=null;
|
|
BigDecimal Discount_apart=new BigDecimal("0.00");
|
|
BigDecimal Discount_apart_nom=new BigDecimal("0.00");
|
|
List<BizObject> bolist=bom.createQuery("contract_id=:contract_id order by rent_list").setParameter("contract_id", contract_id).getResultList(true);
|
|
for(int i=0;i<bolist.size();i++){
|
|
bo=bolist.get(i);
|
|
accurte_date=bo.getAttribute("accrued_date").getString();
|
|
accdate=df.parse(accurte_date);
|
|
if(accdate.getTime()<nowdate.getTime()){
|
|
Discount_apart=Discount_apart.add(new BigDecimal(bo.getAttribute("interest").getString()).divide(new BigDecimal(suminterest),6,BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal(DISCOUNT_money)));
|
|
bo.setAttributeValue("discount", "0.00");
|
|
}
|
|
if(accdate.getTime()==nowdate.getTime()){
|
|
Discount_apart=Discount_apart.add(new BigDecimal(bo.getAttribute("interest").getString()).divide(new BigDecimal(suminterest),6,BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal(DISCOUNT_money)));
|
|
bo.setAttributeValue("discount", Discount_apart);
|
|
}
|
|
if(accdate.getTime()>nowdate.getTime()){
|
|
Discount_apart_nom=new BigDecimal(bo.getAttribute("interest").getString()).divide(new BigDecimal(suminterest),6,BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal(DISCOUNT_money));
|
|
bo.setAttributeValue("discount", Discount_apart_nom);
|
|
}
|
|
bom.saveObject(bo);
|
|
}
|
|
}
|
|
Sqlca.commit();
|
|
}
|
|
|
|
}
|