2018-11-05 15:22:08 +08:00

178 lines
9.2 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.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;
try{
contractRentMonth(tx);
contractRentQuarter(tx);
tx.commit();
discountApportion();
}catch(Exception e){
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();
}
}