From 27f1de5fa0137ede6c082bdb60e1d8a72cc84ac5 Mon Sep 17 00:00:00 2001 From: zzk Date: Thu, 7 Apr 2022 15:04:12 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E5=89=8D=E7=BB=93=E6=B8=85=E9=83=A8?= =?UTF-8?q?=E5=88=86=E7=BB=93=E6=B8=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../LCContractTerminateInfo.jsp | 196 ++++- WebContent/WEB-INF/etc/jbo/jbo_calc.xml | 10 + .../CreateVoucherProcess/EarlyContract.java | 746 ++++++++++++++++++ .../app/tenwa/calc/LC_FUND_RENT_ADJUST.java | 20 + .../tenwa/calc/LC_FUND_RENT_ADJUST_TEMP.java | 20 + 5 files changed, 987 insertions(+), 5 deletions(-) create mode 100644 src_core/com/tenwa/voucher/CreateVoucherProcess/EarlyContract.java diff --git a/WebContent/Tenwa/Lease/Flow/Comm/LCContractTerminate/LCContractTerminateInfo.jsp b/WebContent/Tenwa/Lease/Flow/Comm/LCContractTerminate/LCContractTerminateInfo.jsp index e55288a55..5189dc883 100644 --- a/WebContent/Tenwa/Lease/Flow/Comm/LCContractTerminate/LCContractTerminateInfo.jsp +++ b/WebContent/Tenwa/Lease/Flow/Comm/LCContractTerminate/LCContractTerminateInfo.jsp @@ -11,11 +11,11 @@ String RightType = CurPage.getParameter("RightType");//选择模式 String ishistory=CurPage.getParameter("IsHistory"); String nodeNo=CurPage.getParameter("NodeNo"); - + String contractId = CurPage.getParameter("ContractId"); BizObject condition=JBOFactory.createBizObjectQuery("jbo.app.tenwa.calc.LC_CALC_CONDITION_TEMP","flowunid=:flowunid").setParameter("flowunid", flowunid).getSingleResult(false); String paymentnumber=condition.getAttribute("payment_number").getString(); String yearrate=condition.getAttribute("YEAR_RATE").getString(); - String contractId=condition.getAttribute("contract_id").getString(); + //String contractId=condition.getAttribute("contractid").getString(); String nominalPrice=condition.getAttribute("NOMINAL_PRICE").getString(); String cautionmoney = Sqlca.getString("select ifnull(round( sum(case lfi.FEE_TYPE when 'feetype2' then FACT_MONEY else 0 end)- sum(case lfi.FEE_TYPE when 'feetype2' then 0 else FACT_MONEY end ),2),0) as over_caution_monry from lc_fund_income lfi where lfi.CONTRACT_ID = '"+contractId+"' and lfi.FEE_TYPE in ('feetype2', 'feetype16', 'feetype17')"); String mayopemoney = Sqlca.getString("select sum(MAYOPE_MONEY) from LC_EBANK_TEMP where flowunid='"+flowunid+"'"); @@ -23,14 +23,35 @@ BizObject flow=GetFlowAction.getFlowBussinessObject(flowunid); String productId=flow.getAttribute("productId").getString(); String ratio = Sqlca.getString("select EarlySettleBreachRatio from PRD_SPECIFIC_LIBRARY where productid='"+productId+"'"); + String CLEAN_LEASE_MONEY = Sqlca.getString("select CLEAN_LEASE_MONEY from lc_calc_condition where CONTRACT_ID='"+contractId+"'"); System.out.println(ratio+"==================="); String sTempletNo = "LCContractTerminate";//--模板号-- ASObjectModel doTemp = new ASObjectModel(sTempletNo); doTemp.setDefaultValue("PAYMENT_NUMBER", paymentnumber); - doTemp.setHtmlEvent("PAYDAY_ADJUST","onchange","getTerminateInfo"); + // doTemp.setHtmlEvent("PAYDAY_ADJUST","onchange","getTerminateInfo"); doTemp.setHtmlEvent("ADJUST_TYPE","onchange","changeInfo"); doTemp.setHtmlEvent("OTHER_IN","onchange","changeContract"); doTemp.setHtmlEvent("REPURCHASE_RATIO","onchange","getRepurchaseMoney"); + + doTemp.setHtmlEvent("SETTLE_METHOD","onchange","setEquipmentRatioCharge"); + /* + * 获取合同金额 + */ + String PAYMENT_NUMBER = ""; + String START_DATE = ""; + String YEAR_RATE = ""; + if(condition!=null){ + PAYMENT_NUMBER = condition.getAttribute("PAYMENT_NUMBER").getString(); + START_DATE = condition.getAttribute("START_DATE").getString(); + YEAR_RATE = condition.getAttribute("YEAR_RATE").getString(); + }else{ + BizObject condition2=JBOFactory.createBizObjectQuery("jbo.app.tenwa.calc.LC_CONTRACT_CONDITION","CONTRACT_ID=:CONTRACT_ID").setParameter("CONTRACT_ID", contractId).getSingleResult(false); + PAYMENT_NUMBER = condition2.getAttribute("PAYMENT_NUMBER").getString(); + START_DATE = condition2.getAttribute("START_DATE").getString(); + YEAR_RATE = condition2.getAttribute("YEAR_RATE").getString(); + } + + ASObjectWindow dwTemp = new ASObjectWindow(CurPage, doTemp,request); dwTemp.Style = "2";//freeform if((null!=RightType&&RightType.equals("ReadOnly"))||(null!=ishistory&&ishistory.equals("true"))){ @@ -163,6 +184,8 @@ //计算债券总计 function updateContractBondTotal(){ + var SETTLE_METHOD = getItemValue(0,0,"SETTLE_METHOD"); + if(SETTLE_METHOD == "SETTLE_METHOD01"){ var dunrent = getItemValue(0,getRow(),"DUN_RENT"); var agreedPenalty = getItemValue(0,getRow(),"AGREED_PENALTY"); var corpusOverage = getItemValue(0,getRow(),"CORPUS_OVERAGE"); @@ -175,6 +198,21 @@ return (Number(dunrent ? dunrent : 0 ) + Number(agreedPenalty ? agreedPenalty : 0 ) + Number(corpusOverage ? corpusOverage : 0 ) + Number(sdhandlingCharge ? sdhandlingCharge : 0 ) + Number(otherin ? otherin : 0 ) - Number(otherout ? otherout : 0 ) + Number(sdnominalPrice ? sdnominalPrice : 0 ) +Number(agreeddatepenalty ? agreeddatepenalty : 0 )).toFixed(2); + }else if(SETTLE_METHOD == "SETTLE_METHOD02"){ + // 获取未到期本金 + var PREMATURE_MONEY = getItemValue(0,getRow(),"PREMATURE_MONEY"); + // 获取罚息 + var DUN_RENT = getItemValue(0,getRow(),"DUN_RENT"); + // 获取商定还款日息差 + var AGREED_DATEPENALTY = getItemValue(0,getRow(),"AGREED_DATEPENALTY"); + // 获取商定逾期罚息 + var AGREED_PENALTY = getItemValue(0,getRow(),"AGREED_PENALTY"); + // 获取商定违约金 + var SDHANDLING_CHARGE = getItemValue(0,getRow(),"SDHANDLING_CHARGE"); + var MAXIMUM_TOTAL = (Number(PREMATURE_MONEY ? PREMATURE_MONEY : 0 )+Number(DUN_RENT ? DUN_RENT : 0 ) + Number(AGREED_DATEPENALTY ? AGREED_DATEPENALTY : 0 ) + +Number(AGREED_PENALTY ? AGREED_PENALTY : 0 )+Number(SDHANDLING_CHARGE ? SDHANDLING_CHARGE : 0 )).toFixed(2); + return MAXIMUM_TOTAL; + } } //计算债券总计 /* function getContractBondTotal(){ @@ -206,6 +244,7 @@ //保存数据 function saveRecord(sPostEvents) { + debugger; //校验是否有保证金代偿 var isCompensation = AsControl.RunJavaMethod("com.tenwa.reckon.executor.RentCalHelper","isCompensation","contractId=<%=contractId%>"); if("false" == isCompensation){ @@ -262,8 +301,22 @@ } function run() - { - AsControl.RunJavaMethod("com.tenwa.reckon.executor.CreateTransactionExecutor","runTerminate","flowunid=<%=flowunid%>,plannumber=<%=paymentnumber%>,productId=<%=productId%>,calType=pay_process"); + { + var EQUIPMENT_RATIO=getItemValue(0,0,'PROPROTION_NUMBER');//租赁物比重 + var PAYDAY_ADJUST = getItemValue(0,0,'PAYDAY_ADJUST'); //约定终止日 + var SETTLE_METHOD = getItemValue(0,0,"SETTLE_METHOD"); // 结清方式 + var ret = ""; + if(SETTLE_METHOD == "SETTLE_METHOD01"){ + AsControl.RunJavaMethod("com.tenwa.reckon.executor.CreateTransactionExecutor","runTerminate","flowunid=<%=flowunid%>,plannumber=<%=paymentnumber%>,productId=<%=productId%>,calType=pay_process"); + ret = "操作成功" + }else if(SETTLE_METHOD == "SETTLE_METHOD02"){ + ret = AsControl.RunJavaMethodTrans("com.tenwa.voucher.CreateVoucherProcess.EarlyContract","partSettlement","REPURCHASE_RATIO="+EQUIPMENT_RATIO+",flowunid=<%=flowunid%>,contractId=<%=contractId%>,START_DATE=<%=START_DATE%>,plannumber=<%=PAYMENT_NUMBER%>,calType=pay_process,PAYDAY_ADJUST="+PAYDAY_ADJUST+",SettleMethod="+SETTLE_METHOD); + } + if(ret=="操作成功"){ + $m.alert("操作成功","success"); + }else{ + $m.alert("结清失败,请联系管理员!","error"); + } } @@ -326,6 +379,139 @@ } } } + + function setEquipmentRatioCharge(){ + var settlemethod = getItemValue(0,0,"SETTLE_METHOD"); + var ADJUST_TYPE = getItemValue(0,0,"ADJUST_TYPE"); + var PAYDAY_ADJUST = getItemValue(0,0,"PAYDAY_ADJUST"); + if(ADJUST_TYPE.length==0){ + alert("请先选择变更类型!!!"); + setItemValue(0,getRow(),"ADJUST_TYPE",""); + return; + } + if(PAYDAY_ADJUST.length==0){ + alert("请先选择约定终止日!!!"); + setItemValue(0,getRow(),"PAYDAY_ADJUST",""); + return; + } + setItemValue(0,0,"CLEAN_LEASE_MONEY","<%=CLEAN_LEASE_MONEY%>"); + if(settlemethod=="SETTLE_METHOD02"){ + $("#A_div_1008").attr("style","display:block;"); + $("#A_div_1009").attr("style","display:block;"); + $("#A_div_2096").attr("style","display:block;"); + $("#A_div_2098").attr("style","display:block;"); + settlemet(); + }else if(settlemethod=="SETTLE_METHOD01") { + $("#A_div_1008").attr("style","display:none;"); + $("#A_div_1009").attr("style","display:none;"); + $("#A_div_2096").attr("style","display:none;"); + $("#A_div_2098").attr("style","display:none;"); + getTerminateInfo(); + } + } + + + function settlemet(){ + AsDialog.OpenSelector("selectEquipCarTermination","contractid,<%=contractId%>,flowunid,<%=flowunid%>","dialogWidth=" + parseInt(window.screen.width * 0.8) + "px dialogHeight=" + parseInt(window.screen.height * 0.6) + "px",function(sReturn){ + if(!sReturn||sReturn=="_CANCEL_"||sReturn=="_NONE_"){ + setItemValue(0,0,'SETTLE_METHOD',""); + }else{ + var IDS= sReturn; + // 获取选中租赁物参融比例 + var PROPROTION_NUMBER = AsControl.RunJavaMethodTrans("com.tenwa.voucher.CreateVoucherProcess.EarlyContract","getReductionRatio","flowunid=<%=flowunid%>,IDS="+IDS); + var returns = AsControl.RunJavaMethodTrans("com.tenwa.voucher.CreateVoucherProcess.EarlyContract","setEquipmentTerminateStatus","flowunid=<%=flowunid%>,IDS="+IDS); + if(returns=="false"){ + $m.alert("系统异常,请联系管理员!", 'error'); + }else{ + setItemValue(0,0,'PROPROTION_NUMBER',PROPROTION_NUMBER); + if(PAYDAY_ADJUST!=""){ + changeContractTotal(); + } + } + } + },"请选择租赁物"); + } + + /* + * 提前结清结清金额计算 + */ + function changeContractTotal(){ + var ADJUST_TYPE = getItemValue(0,0,"ADJUST_TYPE"); + var AGREED_PENALTY = parseFloat(getItemValue(0,0,"AGREED_PENALTY")); + var SDHANDLING_CHARGE = parseFloat(getItemValue(0,0,"SDHANDLING_CHARGE")); + var AGREED_DATEPENALTY = parseFloat(getItemValue(0,0,"AGREED_DATEPENALTY")); + if(AGREED_PENALTY>DUN_PENALTY){ + $m.alert("减免减免逾期违约金不能大于逾期违约金!", "warning"); + setItemValue(0,getRow(),"AGREED_PENALTY","0"); + } + var REPURCHASE_RATIO = parseFloat(getItemValue(0,0,"PROPROTION_NUMBER")); + var PAYDAY_ADJUST = getItemValue(0,0,"PAYDAY_ADJUST"); + if(PAYDAY_ADJUST!="" && REPURCHASE_RATIO>0){ + // 减免逾期违约金 + var AGREED_PENALTY = getItemValue(0,0,"AGREED_PENALTY"); + // 其他应收 + var OTHER_IN = getItemValue(0,0,"OTHER_IN"); + var params = "contractId=<%=contractId%>,flowunid=<%=flowunid%>,YEAR_RATE=<%=YEAR_RATE%>,PAYDAY_ADJUST="+PAYDAY_ADJUST+",REPURCHASE_RATIO="+REPURCHASE_RATIO+",AGREED_PENALTY="+AGREED_PENALTY+",OTHER_IN="+OTHER_IN+",SDHANDLING_CHARGE="+SDHANDLING_CHARGE; + var result = AsControl.RunJavaMethodTrans("com.tenwa.voucher.CreateVoucherProcess.EarlyContract","getSettlementMoney",params); + // 根据提前终止日计算还款日息差 + var dateRate=Number("<%=yearrate%>")/100;//获取利率 + var rentPlanDate = AsControl.RunJavaMethod("com.tenwa.reckon.executor.RentCalHelper","rentPlanDate","contractId=<%=contractId%>,paydayAdjust="+PAYDAY_ADJUST); + var idays = datedifference(rentPlanDate,PAYDAY_ADJUST);//获取约定终止日和提出日期相差天数 + + result = result.split("@"); + var CORPUS_OVERAGE = result[0]; + var PREMATURE_MONEY = result[1]; + var RESIDUE_MONEY = result[2]; + var DUN_RENT = result[3]; + var DUN_PENALTY = result[4]; + // 未到期本金 + setItemValue(0,getRow(),"CORPUS_OVERAGE",CORPUS_OVERAGE); + // 部分结清车辆未到期本金 + setItemValue(0,getRow(),"PREMATURE_MONEY",PREMATURE_MONEY); + // 剩余车辆未到期本金 + setItemValue(0,getRow(),"RESIDUE_MONEY",RESIDUE_MONEY); + // 逾期租金 + setItemValue(0,getRow(),"DUN_RENT",DUN_RENT); + // 逾期罚息 + setItemValue(0,getRow(),"DUN_PENALTY",DUN_PENALTY); + // 应退金额 + setItemValue(0,getRow(),"OTHER_OUT",'0.00'); + // 留购价 + setItemValue(0,getRow(),"NOMINAL_PRICE","<%=nominalPrice%>"); + // 违约金 + var ratio=0; + if("<%=ratio%>"==""||"<%=ratio%>"==null||"<%=ratio%>"=="null"){ + ratio = 0.05; + }else{ + ratio = (Number("<%=ratio%>")/100).toFixed(2); + } + var HANDLING_CHARGE = Math.round(Number(PREMATURE_MONEY*ratio)*100)/100; + setItemValue(0,getRow(),"HANDLING_CHARGE",HANDLING_CHARGE); + //计算还款日息差 + var REPAYMENT=((Number(PREMATURE_MONEY)*dateRate)/360)*Number(idays); + setItemValue(0,0,'REPAYMENT_INTEREST',REPAYMENT); + // 提前还款金额 + var CONTRACT_TOTAL = (Number(PREMATURE_MONEY)+Number(DUN_RENT)+Number(DUN_PENALTY)+Number(HANDLING_CHARGE)+Number(REPAYMENT)); + setItemValue(0,0,'CONTRACT_TOTAL',CONTRACT_TOTAL); + // 最终还款金额 + var MAXIMUM_TOTAL = (Number(PREMATURE_MONEY)+Number(DUN_RENT)+Number(AGREED_PENALTY)+SDHANDLING_CHARGE+AGREED_DATEPENALTY); + setItemValue(0,0,'MAXIMUM_TOTAL',MAXIMUM_TOTAL); + + if(ADJUST_TYPE=="coerce_terminate"){ + setItemValue(0,getRow(),"PENALTY_MONEY","0.00"); + setItemValue(0,getRow(),"DUN_PENALTY","0.00"); + setItemValue(0,getRow(),"RECEIVABLE_MONEY02","0.00"); + }else if(ADJUST_TYPE=="normal_terminate"){ + setItemValue(0,getRow(),"PENALTY_MONEY","0.00"); + setItemValue(0,getRow(),"OPEN_MONEY","0.00"); + }else{ + setItemValue(0,getRow(),"OPEN_MONEY","0.00"); + } + } + } + + + function changeContract(){ getTerminateInfo(); // setItemValue(0,0,"CONTRACT_TOTAL",(Number(getItemValue(0,getRow(),"CONTRACT_TOTAL"))+Number(getItemValue(0,getRow(),"OTHER_IN"))).toFixed(2)); diff --git a/WebContent/WEB-INF/etc/jbo/jbo_calc.xml b/WebContent/WEB-INF/etc/jbo/jbo_calc.xml index a20e7514a..8e2f1901e 100644 --- a/WebContent/WEB-INF/etc/jbo/jbo_calc.xml +++ b/WebContent/WEB-INF/etc/jbo/jbo_calc.xml @@ -326,6 +326,11 @@ + + + + + @@ -378,6 +383,11 @@ + + + + + diff --git a/src_core/com/tenwa/voucher/CreateVoucherProcess/EarlyContract.java b/src_core/com/tenwa/voucher/CreateVoucherProcess/EarlyContract.java new file mode 100644 index 000000000..f1e55cb95 --- /dev/null +++ b/src_core/com/tenwa/voucher/CreateVoucherProcess/EarlyContract.java @@ -0,0 +1,746 @@ +package com.tenwa.voucher.CreateVoucherProcess; + +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.text.DecimalFormat; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.UUID; + +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.awe.util.SqlObject; +import com.amarsoft.awe.util.Transaction; +import com.tenwa.comm.util.date.DateAssistant; +import com.tenwa.jbo.manager.DataUtil; +import com.tenwa.reckon.bean.TabCalBean; +import com.tenwa.reckon.util.DateUtil; +import com.tenwa.reckon.util.TbBeanTools; +import com.tenwa.reckon.util.UUIDUtil; + +public class EarlyContract { + + // 流程编号 + private String flowunid; + // 租赁物编号 + private String IDS; + // 提出日期 + private String PAYDAY_ADJUST; + // 提请结清租赁物占比 + private String REPURCHASE_RATIO; + // 合同ID + private String contractId; + // 合同年利率 + private String YEAR_RATE; + // 变更类型 + private String ADJUST_TYPE; + // 商定逾期罚息 + private String AGREED_PENALTY; + // 其它应收 + private String OTHER_IN; + // 投放编号 + private String plannumber; + // 产品编号 + private String productId; + // + private String calType; + // + private String planList; + //结清方式 + private String SettleMethod; + + public String getSettleMethod() { + return SettleMethod; + } + + public void setSettleMethod(String settleMethod) { + SettleMethod = settleMethod; + } + + public String getPlanList() { + return planList; + } + + public void setPlanList(String planList) { + this.planList = planList; + } + + public String getCalType() { + return calType; + } + + + public void setCalType(String calType) { + this.calType = calType; + } + + + public String getPlannumber() { + return plannumber; + } + + + public void setPlannumber(String plannumber) { + this.plannumber = plannumber; + } + + + public String getProductId() { + return productId; + } + + + public void setProductId(String productId) { + this.productId = productId; + } + + + public String getPAYDAY_ADJUST() { + return PAYDAY_ADJUST; + } + + + public void setPAYDAY_ADJUST(String pAYDAY_ADJUST) { + PAYDAY_ADJUST = pAYDAY_ADJUST; + } + + + public String getREPURCHASE_RATIO() { + return REPURCHASE_RATIO; + } + + + public void setREPURCHASE_RATIO(String rEPURCHASE_RATIO) { + REPURCHASE_RATIO = rEPURCHASE_RATIO; + } + + + public String getContractId() { + return contractId; + } + + + public void setContractId(String contractId) { + this.contractId = contractId; + } + + + public String getYEAR_RATE() { + return YEAR_RATE; + } + + + public void setYEAR_RATE(String yEAR_RATE) { + YEAR_RATE = yEAR_RATE; + } + + + public String getADJUST_TYPE() { + return ADJUST_TYPE; + } + + + public void setADJUST_TYPE(String aDJUST_TYPE) { + ADJUST_TYPE = aDJUST_TYPE; + } + + + public String getAGREED_PENALTY() { + return AGREED_PENALTY; + } + + + public void setAGREED_PENALTY(String aGREED_PENALTY) { + AGREED_PENALTY = aGREED_PENALTY; + } + + + public String getOTHER_IN() { + return OTHER_IN; + } + + + public void setOTHER_IN(String oTHER_IN) { + OTHER_IN = oTHER_IN; + } + + + public String getFlowunid() { + return flowunid; + } + + + public void setFlowunid(String flowunid) { + this.flowunid = flowunid; + } + + + public String getIDS() { + return IDS; + } + + + public void setIDS(String iDS) { + IDS = iDS; + } + + + /** + * 获取租赁物比重 + */ + public String getReductionRatio(JBOTransaction tx) { + Transaction Sqlca = null; + String REDUCTION_RATIO=""; + try { + Sqlca = Transaction.createTransaction(tx); + String idss=""; + if(IDS!=null && !"".equals(IDS)) { + String[] ids = IDS.split("@~"); + for (String id : ids) { + if("".equals(idss)) { + idss="'"+id+"'"; + }else { + idss+=",'"+id+"'"; + } + } + } + // 获取租赁物-增融后租赁物价格(元) + REDUCTION_RATIO = Sqlca.getString("SELECT ROUND(ifnull(LECT.EQUIP_PRICE,0)/ifnull(LEC.EQUIP_PRICE,0),4) AS REDUCTION_RATIO FROM ( SELECT CONTRACT_ID, SUM(ifnull(EQUIP_PRICE,0)) AS EQUIP_PRICE FROM LB_EQUIPMENT_CAR_TEMP WHERE ID IN ( "+idss+" ) AND FLOWUNID='"+flowunid+"' GROUP BY CONTRACT_ID ) LECT LEFT JOIN ( SELECT CONTRACT_ID, SUM(ifnull(EQUIP_PRICE,0)) AS EQUIP_PRICE FROM LB_EQUIPMENT_CAR WHERE ifnull(TERMINATE_TYPE,'1')<>'2' GROUP BY CONTRACT_ID )LEC ON LEC.CONTRACT_ID=LECT.CONTRACT_ID "); + REDUCTION_RATIO = new BigDecimal(REDUCTION_RATIO).multiply(new BigDecimal(100)).toString(); + DecimalFormat df = new DecimalFormat("#.00"); + REDUCTION_RATIO = df.format(Double.valueOf(REDUCTION_RATIO.toString())); + } catch (Exception e) { + try { + Sqlca.rollback(); + } catch (JBOException e1) { + e1.printStackTrace(); + } + e.printStackTrace(); + }finally { + if(Sqlca!=null) { + try { + Sqlca.disConnect(); + Sqlca=null; + } catch (JBOException e) { + e.printStackTrace(); + } + } + } + // return REDUCTION_RATIO; + return ""+REDUCTION_RATIO+""; + } + + + /** + * 全部结清,将租赁物等于未结清的标记为本次结清,如果是部分结清,将选中租赁物标记为本次结清 + */ + @SuppressWarnings("deprecation") + public String setEquipmentTerminateStatus(JBOTransaction tx) { + Transaction Sqlca = null; + String returns="true"; + try { + Sqlca = Transaction.createTransaction(tx); + /** + * 每次选择全部结清与部分结清,初始化租赁物状态 + */ + String sql="UPDATE LB_EQUIPMENT_CAR_TEMP SET TERMINATE_TYPE='1',SETTLE_STATUS='1' WHERE FLOWUNID='"+flowunid+"' AND ifnull(TERMINATE_TYPE,'1') <> '2' "; + Sqlca.executeSQL(sql); + sql = "UPDATE LB_EQUIPMENT_CAR_TEMP SET SETTLE_STATUS='1',TERMINATE_TYPE='1' WHERE (TERMINATE_TYPE='3' or SETTLE_STATUS='3') AND FLOWUNID='"+flowunid+"'"; + Sqlca.executeSQL(sql); + sql="UPDATE LB_EQUIPMENT_CAR_TEMP SET SETTLE_STATUS='3' WHERE (TERMINATE_TYPE IS NULL OR TERMINATE_TYPE='1') AND FLOWUNID='"+flowunid+"' "; + /** + * 查询本次结清车辆加融总额 + */ + String sql2="SELECT SUM(ifnull(EQUIP_PRICE,0)) AS EQUIP_PRICE FROM LB_EQUIPMENT_CAR_TEMP WHERE (TERMINATE_TYPE IS NULL OR TERMINATE_TYPE='1') AND FLOWUNID='"+flowunid+"' "; + // 部分结清将选中的变更为本次结清 + if(IDS!=null && !"".equals(IDS)) { + String[] ids = IDS.split("@~"); + String idss=""; + for (String id : ids) { + if("".equals(idss)) { + idss="'"+id+"'"; + }else { + idss+=",'"+id+"'"; + } + } + sql2+=" AND ID IN("+idss+") "; + Sqlca.executeSQL(sql+" AND ID IN("+idss+")"); + // 全部结清,将未结清租赁物全部转入本次结清租赁物 + }else { + Sqlca.executeSQL(sql); + } + returns = Sqlca.getString(sql2); + Sqlca.commit(); + } catch (Exception e) { + returns="false"; + try { + Sqlca.rollback(); + } catch (JBOException e1) { + e1.printStackTrace(); + } + e.printStackTrace(); + }finally { + if(Sqlca!=null) { + try { + Sqlca.disConnect(); + Sqlca=null; + } catch (JBOException e) { + e.printStackTrace(); + } + } + } + // return returns; + return ""+returns+""; + } + + + + /** + * 获取结清金额数据 + */ + public String getSettlementMoney(JBOTransaction tx){ + Transaction Sqlca = null; + try{ + Sqlca = Transaction.createTransaction(tx); + // 剩余本金- 本次结清车辆约定终止日,次月后所有本金 + String CORPUS_OVERAGE = Sqlca.getString("select sum(round(ifnull(lrp.CORPUS, 0) - ifnull(lri.CORPUS, 0),2)) as CORPUS from LC_RENT_PLAN LRP left join (select CONTRACT_ID,PLAN_LIST,SUM(ifnull(CORPUS, 0)) as CORPUS from LC_RENT_INCOME group by CONTRACT_ID,PLAN_LIST ) LRI on LRI.CONTRACT_ID = LRP.CONTRACT_ID and LRP.PLAN_LIST = LRI.PLAN_LIST where date_format(STR_TO_DATE(lrp.PLAN_DATE,'%Y/%m/%d'),'%Y/%m')> date_format(STR_TO_DATE('"+PAYDAY_ADJUST+"','%Y/%m/%d'),'%Y/%m') and lrp.CONTRACT_ID = '"+contractId+"'"); + if(CORPUS_OVERAGE == null) { + CORPUS_OVERAGE="0.00"; + } + // 部分结清车辆未到期本金- 本次结清车辆约定终止日,次月后所有本金 + String PREMATURE_MONEY = Sqlca.getString("select sum(round(((ifnull(lrp.CORPUS, 0) - ifnull(lri.CORPUS, 0))*'"+REPURCHASE_RATIO+"'/100),2)) as CORPUS from LC_RENT_PLAN LRP left join (select CONTRACT_ID,PLAN_LIST,SUM(ifnull(CORPUS, 0)) as CORPUS from LC_RENT_INCOME group by CONTRACT_ID,PLAN_LIST ) LRI on LRI.CONTRACT_ID = LRP.CONTRACT_ID and LRP.PLAN_LIST = LRI.PLAN_LIST where date_format(STR_TO_DATE(lrp.PLAN_DATE,'%Y/%m/%d'),'%Y/%m')> date_format(STR_TO_DATE('"+PAYDAY_ADJUST+"','%Y/%m/%d'),'%Y/%m') and lrp.CONTRACT_ID = '"+contractId+"'"); + if(PREMATURE_MONEY == null) { + PREMATURE_MONEY="0.00"; + } + // 剩余车辆未到期本金- 本次结清车辆约定终止日,次月后所有本金 + BigDecimal bg = new BigDecimal(Double.parseDouble(CORPUS_OVERAGE) - Double.parseDouble(PREMATURE_MONEY)); + double f1 = bg.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); + String RESIDUE_MONEY = Double.toString(f1); + if(RESIDUE_MONEY == null) { + RESIDUE_MONEY="0.00"; + } + // 逾期租金- 本次结清车辆截止约定终止日(上月)所有逾期租金 + String DUN_RENT = Sqlca.getString("select ifnull(sum(round(ifnull(ifnull(LRP.RENT,0),0) - ifnull(ifnull(LRI.RENT,0),0),2)),0) as OVER_RENT from LC_RENT_PLAN LRP left join (select CONTRACT_ID,PLAN_LIST,SUM(ifnull(RENT, 0)) as RENT from LC_RENT_INCOME group by CONTRACT_ID,PLAN_LIST ) LRI on LRI.CONTRACT_ID = LRP.CONTRACT_ID and LRP.PLAN_LIST = LRI.PLAN_LIST where STR_TO_DATE(LRP.PLAN_DATE,'%Y/%m/%d') < STR_TO_DATE('"+PAYDAY_ADJUST+"','%Y/%m/%d') and LRP.CONTRACT_ID = '"+contractId+"'"); + if(DUN_RENT == null) { + DUN_RENT="0.00"; + } + // 逾期罚息- 本次结清车辆截止约定终止日所有罚息 + String DUN_PENALTY =Sqlca.getString("select ifnull(SUM(ROUND(ifnull(GETRENTPENALTY (LRP.PAYMENT_NUMBER, LRP.PLAN_LIST, '\"+PAYDAY_ADJUST+\"')-ifnull(LRI.PENALTY, 0)-ifnull(LRI.PENALTY_ADJUST, 0), 0), 2)),0) as DUN_PENALTY from LC_RENT_PLAN LRP left join (select PAYMENT_NUMBER,PLAN_LIST,SUM(ifnull(PENALTY, 0)) as PENALTY,SUM(ifnull(PENALTY_ADJUST, 0)) as PENALTY_ADJUST from LC_RENT_INCOME group by PAYMENT_NUMBER,PLAN_LIST) LRI on LRI.PAYMENT_NUMBER = LRP.PAYMENT_NUMBER and LRI.PLAN_LIST = LRP.PLAN_LIST where date_format(STR_TO_DATE(lrp.PLAN_DATE, '%Y/%m/%d'), '%Y/%m')> date_format(STR_TO_DATE('\"+PAYDAY_ADJUST+\"', '%Y/%m/%d'), '%Y/%m') and LRP.CONTRACT_ID = '"+contractId+"'"); + + // return CORPUS_OVERAGE+"@"+PREMATURE_MONEY+"@"+RESIDUE_MONEY+"@"+DUN_RENT+"@"+DUN_PENALTY; + return ""+CORPUS_OVERAGE+"@"+PREMATURE_MONEY+"@"+RESIDUE_MONEY+"@"+DUN_RENT+"@"+DUN_PENALTY+""; + }catch(Exception e){ + e.printStackTrace(); + return "ERR"; + } + + } + + + @SuppressWarnings("unchecked") + public String partSettlement(JBOTransaction tx){ + com.amarsoft.awe.util.Transaction Sqlca = null; + try{ + TabCalBean bean = TbBeanTools.getTabInfoTrans(calType, flowunid,plannumber,productId,tx); + BigDecimal t = new BigDecimal( "0.01" ); + BigDecimal zero = new BigDecimal(0); + Sqlca = com.amarsoft.awe.util.Transaction.createTransaction(tx); + //本次结清租赁物比例 + String equipmentRatio = REPURCHASE_RATIO; + String paydayAdjust = PAYDAY_ADJUST; + BigDecimal equipmentRatio2 = new BigDecimal(equipmentRatio).divide(new BigDecimal(100)); + + BizObjectManager lfratBm = JBOFactory.getBizObjectManager("jbo.app.tenwa.calc.LC_FUND_RENT_ADJUST_TEMP",Sqlca); + BizObject lfrat = lfratBm.createQuery("FLOWUNID='"+flowunid+"'").getSingleResult(true); + String CONTRACT_ID = Sqlca.getString("SELECT lci.id FROM lb_contract_info_temp lcit left join lb_contract_info lci on lci.CONTRACT_NO = lcit.CONTRACT_NO where lcit.FLOWUNID='"+flowunid+"'"); + String adjustType = lfrat.getAttribute("ADJUST_TYPE").toString();//coerce_terminate + + // 获取网银ID + String EBANK_NUMBER = Sqlca.getString("SELECT LE.ID FROM LC_EBANK_TEMP LET LEFT JOIN LC_EBANK LE ON LE.EBANK_NUMBER=LET.EBANK_NUMBER where LET.FLOWUNID='"+flowunid+"'"); + String MAXIMUM_TOTAL = lfrat.getAttribute("MAXIMUM_TOTAL").getString(); + String RECEIVABLE_MONEY02 = MAXIMUM_TOTAL; + //String OPEN_MONEY = lfrat.getAttribute("OPEN_MONEY").getString(); + // 判断结清类型是否为提前结清 + if("01".equals(adjustType)){ + Sqlca.executeSQL(new SqlObject("update LC_EBANK_TEMP let set HAD_MONEY = HAD_MONEY+"+RECEIVABLE_MONEY02+",MAYOPE_MONEY=MAYOPE_MONEY-"+RECEIVABLE_MONEY02+" where LET.FLOWUNID = '" +flowunid+ "'") ); + }else if("coerce_terminate".equals(adjustType)){ + Sqlca.executeSQL(new SqlObject("update LC_EBANK_TEMP let set HAD_MONEY = HAD_MONEY+MAYOPE_MONEY,MAYOPE_MONEY=MAYOPE_MONEY-MAYOPE_MONEY where LET.FLOWUNID = '" +flowunid+ "'") ); + } + /** + * 变更租金计划表 + */ + // 获取日期大于约定终止日所在月的租金计划,按比例算出每期租金,本金,利息,在约定终止日那一月汇总后边的 + BizObjectManager lrptBm = JBOFactory.getBizObjectManager("jbo.app.tenwa.calc.LC_RENT_PLAN_TEMP",Sqlca); + List lrptBoList = lrptBm.createQuery("FLOWUNID='"+flowunid+"' and v.date_format(v.STR_TO_DATE(PLAN_DATE,'%Y/%m/%d'),'%Y/%m/%d')>=v.date_format(v.STR_TO_DATE('"+paydayAdjust+"','%Y/%m/%d'),'%Y/%m/%d') order by plan_list desc").getResultList(true); + //查询结清租金 +// BigDecimal tax = new BigDecimal( bean.getTax() ).multiply( t ); +// BigDecimal other = new BigDecimal( bean.getOther() ).multiply( t ).add( BigDecimal.ONE ); + // 获取该合同约定终止日所在月开始所有本金 + String SUM_CORPUS = Sqlca.getString("SELECT ifnull(SUM(ifnull(CORPUS,0)),0) FROM LC_RENT_PLAN WHERE CONTRACT_ID='"+contractId+"' AND date_format(STR_TO_DATE(PLAN_DATE,'%Y/%m/%d'),'%Y/%m/%d')>=date_format(STR_TO_DATE('"+paydayAdjust+"','%Y/%m/%d'),'%Y/%m/%d')"); + // 未结清租金 + BigDecimal now_rent = new BigDecimal(0); + // 未结清本金 + BigDecimal now_corpus = new BigDecimal(0); + // 结清日最近的一期租金 + BigDecimal end_rent = new BigDecimal(0); + // 结清日最近的一期本金 + BigDecimal end_corpus = new BigDecimal(0); + // 结清日最近的一期利息 + BigDecimal end_interest = new BigDecimal(0); + String last_plan_date = ""; + for(int i=0; iifnull(LRI.RENT,0) order by LRPT.PLAN_LIST"; + }else{ + sql = "select ifnull(LRPT.RENT,0)-ifnull(LRI.RENT,0) as OVER_RENT,ifnull(LRPT.CORPUS,0)-ifnull(LRI.CORPUS,0) as OVER_CORPUS,ifnull(LRPT.INTEREST,0)-ifnull(LRI.INTEREST,0) as OVER_INTEREST,LRPT.PLAN_LIST as PLAN_LIST,LRPT.PLAN_DATE as PLAN_DATE,LRP.PLAN_ID,date_format(now() ,'%Y/%m/%d') as ACCOUNTING_DATE,date_format(now(),'%Y/%m/%d %h:%m:%s') as INPUTTIME from(select MAX(ID) as PLAN_ID,CONTRACT_ID,PLAN_LIST,MAX(PLAN_DATE) as PLAN_DATE,SUM(RENT) as RENT,SUM(CORPUS) as CORPUS,SUM(INTEREST) as INTEREST from LC_RENT_PLAN_TEMP where FLOWUNID = '"+flowunid+"' and CONTRACT_ID = '"+contractId+"' group by CONTRACT_ID,PLAN_LIST ) LRPT left join (select CONTRACT_ID,PLAN_LIST,MAX(ID) as PLAN_ID from LC_RENT_PLAN where CONTRACT_ID = '"+contractId+"' group by CONTRACT_ID,PLAN_LIST )LRP on LRP.CONTRACT_ID = LRPT.CONTRACT_ID and LRP.PLAN_LIST = LRPT.PLAN_LIST left join (select CONTRACT_ID,PLAN_LIST,SUM(RENT) as RENT,SUM(CORPUS) as CORPUS,SUM(INTEREST) as INTEREST from LC_RENT_INCOME where CONTRACT_ID = '"+contractId+"' group by CONTRACT_ID,PLAN_LIST ) LRI on LRI.CONTRACT_ID = LRPT.CONTRACT_ID and LRI.PLAN_LIST = LRPT.PLAN_LIST where ifnull(LRPT.RENT,0)>ifnull(LRI.RENT,0) and LRPT.PLAN_DATE <= '"+last_plan_date+"' order by LRPT.PLAN_LIST "; + } + + + /** + * 保证金抵扣留购价款 (强制结清不核销留购价) + */ + BigDecimal REPURCHASE_MONEY = new BigDecimal(lfrat.getAttribute("REPURCHASE_MONEY").toString()); + + /** + * 处理资金计划表-其他应收 + */ + BigDecimal OTHER_IN = new BigDecimal(lfrat.getAttribute("OTHER_IN").toString()); + String OTHER_IN_ID = UUID.randomUUID().toString().replaceAll("-",""); + if(OTHER_IN.compareTo(zero)>0) { + BizObject lfptBo = lfptBm.newObject(); + lfptBo.setAttributeValue("ID",OTHER_IN_ID); + lfptBo.setAttributeValue("PROJECT_ID",lrptBo2.getAttribute("PROJECT_ID")); + lfptBo.setAttributeValue("PROJECT_PLAN_NUMBER",lrptBo2.getAttribute("PROJECT_PLAN_NUMBER")); + lfptBo.setAttributeValue("CONTRACT_ID",lrptBo2.getAttribute("CONTRACT_ID")); + lfptBo.setAttributeValue("CONTRACT_PLAN_NUMBER",lrptBo2.getAttribute("CONTRACT_PLAN_NUMBER")); + lfptBo.setAttributeValue("PAYMENT_NUMBER",lrptBo2.getAttribute("PAYMENT_NUMBER")); + lfptBo.setAttributeValue("PLAN_LIST","1"); + lfptBo.setAttributeValue("PAY_TYPE","pay_type_in"); + lfptBo.setAttributeValue("FEE_TYPE","feetype8"); + lfptBo.setAttributeValue("SETTLE_METHOD","settlemethod6"); + lfptBo.setAttributeValue("PLAN_DATE",paydayAdjust); + lfptBo.setAttributeValue("PLAN_MONEY",OTHER_IN.toString()); + lfptBo.setAttributeValue("FLOWUNID",flowunid); + lfptBo.setAttributeValue("INPUTTIME",DateUtil.getSystemDateTime()); + lfptBm.saveObject(lfptBo); + } + BigDecimal OTHER_OUT = new BigDecimal(lfrat.getAttribute("OTHER_OUT").toString()); + String OTHER_OUT_ID = UUID.randomUUID().toString().replaceAll("-",""); + if(OTHER_OUT.compareTo(zero)>0) { + BizObject lfptBo = lfptBm.newObject(); + lfptBo.setAttributeValue("ID",OTHER_OUT_ID); + lfptBo.setAttributeValue("PROJECT_ID",lrptBo2.getAttribute("PROJECT_ID")); + lfptBo.setAttributeValue("PROJECT_PLAN_NUMBER",lrptBo2.getAttribute("PROJECT_PLAN_NUMBER")); + lfptBo.setAttributeValue("CONTRACT_ID",lrptBo2.getAttribute("CONTRACT_ID")); + lfptBo.setAttributeValue("CONTRACT_PLAN_NUMBER",lrptBo2.getAttribute("CONTRACT_PLAN_NUMBER")); + lfptBo.setAttributeValue("PAYMENT_NUMBER",lrptBo2.getAttribute("PAYMENT_NUMBER")); + lfptBo.setAttributeValue("PLAN_LIST","1"); + lfptBo.setAttributeValue("PAY_TYPE","pay_type_out"); + lfptBo.setAttributeValue("FEE_TYPE","feetype11"); + lfptBo.setAttributeValue("SETTLE_METHOD","settlemethod6"); + lfptBo.setAttributeValue("PLAN_DATE",paydayAdjust); + lfptBo.setAttributeValue("PLAN_MONEY",OTHER_OUT.toString()); + lfptBo.setAttributeValue("FLOWUNID",flowunid); + lfptBo.setAttributeValue("INPUTTIME",DateUtil.getSystemDateTime()); + lfptBm.saveObject(lfptBo); + } + + + /** + * 租金实收表操作 + */ + if(!"coerce_terminate".equals(adjustType)){ + sql = "SELECT ifnull(LRPT.RENT,0)-ifnull(LRI.RENT,0)-ifnull(LRIT.RENT,0) AS OVER_RENT, ifnull(LRPT.CORPUS,0)-ifnull(LRI.CORPUS,0)-ifnull(LRIT.CORPUS,0) AS OVER_CORPUS, ifnull(LRPT.INTEREST,0)-ifnull(LRI.INTEREST,0)-ifnull(LRIT.INTEREST,0) AS OVER_INTEREST, LRPT.PLAN_LIST AS PLAN_LIST, LRPT.PLAN_DATE AS PLAN_DATE, LRP.PLAN_ID, date_format(now(),'%Y/%m/%d') AS ACCOUNTING_DATE, date_format(now(),'%Y/%m/%d %h:%m:%s') AS INPUTTIME FROM ( SELECT MAX(ID) AS PLAN_ID, CONTRACT_ID, PLAN_LIST, MAX(PLAN_DATE) AS PLAN_DATE, SUM(RENT) AS RENT, SUM(CORPUS) AS CORPUS, SUM(INTEREST) AS INTEREST FROM LC_RENT_PLAN_TEMP WHERE FLOWUNID='"+flowunid+"' AND CONTRACT_ID='"+contractId+"' GROUP BY CONTRACT_ID, PLAN_LIST ) LRPT LEFT JOIN (SELECT CONTRACT_ID, PLAN_LIST, MAX(ID) AS PLAN_ID FROM LC_RENT_PLAN WHERE CONTRACT_ID='"+contractId+"' GROUP BY CONTRACT_ID, PLAN_LIST )LRP ON LRP.CONTRACT_ID=LRPT.CONTRACT_ID AND LRP.PLAN_LIST=LRPT.PLAN_LIST LEFT JOIN ( SELECT CONTRACT_ID, PLAN_LIST, SUM(RENT) AS RENT, SUM(CORPUS) AS CORPUS, SUM(INTEREST) AS INTEREST FROM LC_RENT_INCOME WHERE CONTRACT_ID='"+contractId+"' GROUP BY CONTRACT_ID, PLAN_LIST ) LRI ON LRI.CONTRACT_ID=LRPT.CONTRACT_ID AND LRI.PLAN_LIST=LRPT.PLAN_LIST LEFT JOIN ( SELECT CONTRACT_ID, PLAN_LIST, SUM(RENT) AS RENT, SUM(CORPUS) AS CORPUS, SUM(INTEREST) AS INTEREST FROM LC_RENT_INCOME_TEMP WHERE CONTRACT_ID='"+contractId+"' and FLOWUNID='"+flowunid+"' GROUP BY CONTRACT_ID, PLAN_LIST ) LRIT ON LRIT.CONTRACT_ID=LRPT.CONTRACT_ID AND LRIT.PLAN_LIST=LRPT.PLAN_LIST WHERE ifnull(LRPT.RENT,0)>(ifnull(LRI.RENT,0)+ifnull(LRIT.RENT,0)) AND LRPT.PLAN_LIST<=(SELECT MIN(PLAN_LIST) FROM LC_RENT_PLAN_TEMP WHERE FLOWUNID='"+flowunid+"' AND date_format(STR_TO_DATE(PLAN_DATE,'%Y/%m/%d'),'%Y/%m/%d')>=date_format(STR_TO_DATE('"+paydayAdjust+"','%Y/%m/%d'),'%Y/%m/%d')) ORDER BY LRPT.PLAN_LIST"; + } + List> dataList = DataUtil.query(sql, Sqlca); + for(int i=0; i ifnull(LRI.RENT,0)or vlrp.PENALTY_OVER>0) and LRPT.PLAN_LIST = '"+PLAN_LIST+"' order by LRPT.PLAN_LIST"; + List> dataOverList = DataUtil.query(overSql, Sqlca); + BigDecimal plan_rent = new BigDecimal(dataOverList.get(0).get("OVER_RENT")); + BigDecimal plan_corpus = new BigDecimal(dataOverList.get(0).get("OVER_CORPUS")); + String factSql = "SELECT CONTRACT_ID, PLAN_LIST, SUM(RENT) AS RENT, SUM(CORPUS) AS CORPUS, SUM(INTEREST) AS INTEREST FROM LC_RENT_INCOME_TEMP WHERE CONTRACT_ID='"+contractId+"' and FLOWUNID='"+flowunid+"' and plan_list='"+PLAN_LIST+"' GROUP BY CONTRACT_ID, PLAN_LIST"; + List> dataFactList = DataUtil.query(factSql, Sqlca); + BigDecimal old_rent = new BigDecimal(0); + BigDecimal old_corpus = new BigDecimal(0); + if(dataFactList.size()>0){ + old_rent = new BigDecimal(dataFactList.get(0).get("RENT")); + old_corpus = new BigDecimal(dataFactList.get(0).get("CORPUS")); + } + over_rent=plan_rent.setScale(2,BigDecimal.ROUND_HALF_UP).subtract(old_rent); + over_corpus=plan_corpus.setScale(2,BigDecimal.ROUND_HALF_UP).subtract(old_corpus); + //提交结清收取逾期利息,强制结清不收利息 + if("SETTLE_METHOD02".equals(SettleMethod)){ + over_interest=over_rent.subtract(over_corpus); + }else{ + over_rent=over_corpus; + } + } + + + if(over_rent.compareTo(BigDecimal.ZERO)!=0){ + BizObject lritBo = lritBm.newObject(); + lritBo.setAttributeValue("PROJECT_ID",lrptBo2.getAttribute("PROJECT_ID")); + lritBo.setAttributeValue("PROJECT_PLAN_NUMBER",lrptBo2.getAttribute("PROJECT_PLAN_NUMBER")); + lritBo.setAttributeValue("CONTRACT_ID",lrptBo2.getAttribute("CONTRACT_ID")); + lritBo.setAttributeValue("CONTRACT_PLAN_NUMBER",lrptBo2.getAttribute("CONTRACT_PLAN_NUMBER")); + lritBo.setAttributeValue("PAYMENT_NUMBER",lrptBo2.getAttribute("PAYMENT_NUMBER")); + lritBo.setAttributeValue("PLAN_LIST",PLAN_LIST); + lritBo.setAttributeValue("PLAN_ID",PLAN_ID); + lritBo.setAttributeValue("RENT",over_rent.toString()); + lritBo.setAttributeValue("CORPUS",over_corpus.toString()); + lritBo.setAttributeValue("INTEREST",over_interest.toString()); + lritBo.setAttributeValue("PENALTY",over_penalty); + lritBo.setAttributeValue("HIRE_LIST",getHireList(lrptBo2.getAttribute("PAYMENT_NUMBER").toString(),PLAN_LIST,Sqlca)); + lritBo.setAttributeValue("HIRE_DATE",paydayAdjust); + lritBo.setAttributeValue("CORPUS_ADJUST","0.00"); + lritBo.setAttributeValue("INTEREST_ADJUST","0.00"); + lritBo.setAttributeValue("PENALTY_ADJUST","0.00"); + lritBo.setAttributeValue("SETTLE_METHOD","settlemethod6"); + lritBo.setAttributeValue("DEDUCTION_ID",""); + lritBo.setAttributeValue("ACCOUNTING_DATE",paydayAdjust); + lritBo.setAttributeValue("ROLL_BACK","0"); + lritBo.setAttributeValue("FLOWUNID",flowunid); + lritBo.setAttributeValue("IS_FLOWING","0"); + lritBo.setAttributeValue("INPUTTIME",INPUTTIME); + lritBo.setAttributeValue("EBANK_NUMBER",EBANK_NUMBER); + lritBm.saveObject(lritBo); + } + } + + + /** + * 处理保证金未抵扣的留购价款 + */ + BizObject boLFP = JBOFactory.getBizObjectManager("jbo.app.tenwa.calc.LC_FUND_PLAN",tx).createQuery("CONTRACT_ID='"+CONTRACT_ID+"' and FEE_TYPE='feetype4'").getSingleResult(false); + if(!"coerce_terminate".equals(adjustType)){ + if(REPURCHASE_MONEY.compareTo(BigDecimal.ZERO)!=0){ + BizObject lfitBo2 = lfitBm.newObject(); + lfitBo2.setAttributeValue("ID", UUIDUtil.getUUID()); + lfitBo2.setAttributeValue("PROJECT_ID",boLFP.getAttribute("PROJECT_ID").getString()); + lfitBo2.setAttributeValue("PROJECT_PLAN_NUMBER",boLFP.getAttribute("PROJECT_PLAN_NUMBER").getString()); + lfitBo2.setAttributeValue("CONTRACT_ID",boLFP.getAttribute("CONTRACT_ID").getString()); + lfitBo2.setAttributeValue("CONTRACT_PLAN_NUMBER",boLFP.getAttribute("CONTRACT_PLAN_NUMBER").getString()); + lfitBo2.setAttributeValue("PAYMENT_NUMBER",boLFP.getAttribute("PAYMENT_NUMBER").getString()); + lfitBo2.setAttributeValue("PLAN_ID",boLFP.getAttribute("ID").getString()); + lfitBo2.setAttributeValue("PLAN_LIST","1"); + lfitBo2.setAttributeValue("PAY_TYPE","pay_type_in"); + lfitBo2.setAttributeValue("FEE_TYPE","feetype4"); + lfitBo2.setAttributeValue("SETTLE_METHOD","settlemethod6"); + lfitBo2.setAttributeValue("CHARGE_LIST","1"); + lfitBo2.setAttributeValue("FACT_DATE",paydayAdjust); + lfitBo2.setAttributeValue("FACT_MONEY",REPURCHASE_MONEY); + lfitBo2.setAttributeValue("FEE_ADJUST","0.00"); + lfitBo2.setAttributeValue("ACCOUNTING_DATE",paydayAdjust); + lfitBo2.setAttributeValue("ROLL_BACK","0"); + lfitBo2.setAttributeValue("FLOWUNID",flowunid); + lfitBo2.setAttributeValue("IS_FLOWING","0"); + lfitBo2.setAttributeValue("INPUTTIME", DateAssistant.getTodayNow()); + lfitBo2.setAttributeValue("EBANK_NUMBER",EBANK_NUMBER); + lfitBm.saveObject(lfitBo2); + } + } + /** + * 处理保证金未抵扣的其他应收 + */ + if(OTHER_IN.compareTo(BigDecimal.ZERO)!=0){ + BizObject lfitBo2 = lfitBm.newObject(); + lfitBo2.setAttributeValue("ID", UUIDUtil.getUUID()); + lfitBo2.setAttributeValue("PROJECT_ID",boLFP.getAttribute("PROJECT_ID").getString()); + lfitBo2.setAttributeValue("PROJECT_PLAN_NUMBER",boLFP.getAttribute("PROJECT_PLAN_NUMBER").getString()); + lfitBo2.setAttributeValue("CONTRACT_ID",boLFP.getAttribute("CONTRACT_ID").getString()); + lfitBo2.setAttributeValue("CONTRACT_PLAN_NUMBER",boLFP.getAttribute("CONTRACT_PLAN_NUMBER").getString()); + lfitBo2.setAttributeValue("PAYMENT_NUMBER",boLFP.getAttribute("PAYMENT_NUMBER").getString()); + lfitBo2.setAttributeValue("PLAN_ID",OTHER_IN_ID); + lfitBo2.setAttributeValue("PLAN_LIST","1"); + lfitBo2.setAttributeValue("PAY_TYPE","pay_type_in"); + lfitBo2.setAttributeValue("FEE_TYPE","feetype8"); + lfitBo2.setAttributeValue("SETTLE_METHOD","settlemethod6"); + lfitBo2.setAttributeValue("CHARGE_LIST","1"); + lfitBo2.setAttributeValue("FACT_DATE",paydayAdjust); + lfitBo2.setAttributeValue("FACT_MONEY",OTHER_IN); + lfitBo2.setAttributeValue("FEE_ADJUST","0.00"); + lfitBo2.setAttributeValue("ACCOUNTING_DATE",paydayAdjust); + lfitBo2.setAttributeValue("ROLL_BACK","0"); + lfitBo2.setAttributeValue("FLOWUNID",flowunid); + lfitBo2.setAttributeValue("IS_FLOWING","0"); + lfitBo2.setAttributeValue("INPUTTIME", DateAssistant.getTodayNow()); + lfitBo2.setAttributeValue("EBANK_NUMBER",EBANK_NUMBER); + lfitBm.saveObject(lfitBo2); + } + + if("coerce_terminate".equals(adjustType)){ + String sql1="SELECT ((((ifnull(lcfd.interest,0))+ifnull(lcfd.interest_adjust,0)))) AS interest_over,lrpt.PLAN_LIST AS plan_list FROM LC_RENT_PLAN lrpt LEFT JOIN (SELECT lri.PAYMENT_NUMBER AS payment_number,lri.PLAN_LIST AS plan_list,SUM(lri.INTEREST) AS interest,SUM(lri.INTEREST_ADJUST) AS interest_adjust FROM lc_rent_income lri WHERE lri.ROLL_BACK='0' GROUP BY lri.PAYMENT_NUMBER,lri.PLAN_LIST) lcfd ON lrpt.PAYMENT_NUMBER=lcfd.payment_number AND lrpt.PLAN_LIST=lcfd.plan_list WHERE lrpt.CONTRACT_ID='\" + CONTRACT_ID + \"' AND (lrpt.INTEREST-(ifnull(lcfd.interest,0)+ifnull(lcfd.interest_adjust,0)))> 0 AND ifnull(lcfd.interest,0)>=0"; + List> dataList1 = DataUtil.query(sql1, tx); + String plan_list=""; + String INTEREST_OVER=""; + for(int i=0;i lrptBoList2 = lrptBm.createQuery("FLOWUNID='"+flowunid+"' and v.ifnull(PLAN_STATUS,'未回笼')<>'已回笼' order by plan_list desc").getResultList(false); + for(int i=0;i="+RENT+" THEN '已回笼' WHEN (ifnull(LFIT.RENT,0)+ifnull(LRI.RENT,0))> 0 AND (ifnull(LFIT.RENT,0)+ifnull(LRI.RENT,0))<"+RENT+" THEN '部分回笼' ELSE '未回笼' END FROM (SELECT MAX(CONTRACT_ID) AS CONTRACT_ID, SUM(ifnull(RENT,0)) AS RENT FROM LC_RENT_INCOME_TEMP WHERE FLOWUNID='"+flowunid+"' AND PLAN_LIST='"+PLAN_LIST+"' )LFIT LEFT JOIN (SELECT MAX(CONTRACT_ID) AS CONTRACT_ID, SUM(ifnull(RENT,0)) AS RENT FROM LC_RENT_INCOME WHERE CONTRACT_ID='"+CONTRACT_ID+"' AND PLAN_LIST='"+PLAN_LIST+"' )LRI ON LRI.CONTRACT_ID=LFIT.CONTRACT_ID ) WHERE FLOWUNID='"+flowunid+"' AND PLAN_LIST='"+PLAN_LIST+"'", tx); + } + + // 变更租赁物 + DataUtil.executeUpdate("UPDATE LB_EQUIPMENT_CAR_TEMP SET TERMINATE_TYPE=SETTLE_STATUS WHERE FLOWUNID='"+flowunid+"' ",tx); + + BizObjectManager lcctBom = JBOFactory.getBizObjectManager("jbo.app.tenwa.calc.LC_CALC_CONDITION_TEMP", Sqlca); + + BizObject lcctBo = lcctBom.createQuery("flowunid=:flowunid").setParameter("flowunid", flowunid).getSingleResult(false); + BigDecimal clean_lease_money = new BigDecimal(lcctBo.getAttribute("CLEAN_LEASE_MONEY").toString()); //融资额 + List lrptBList = lrptBm.createQuery("flowunid=:flowunid order by plan_list").setParameter("flowunid", flowunid).getResultList(true); + for(BizObject lrptB : lrptBList) { + String corpus = lrptB.getAttribute("CORPUS").toString(); + BigDecimal bdCorpus = new BigDecimal(corpus); + lrptB.setAttributeValue("ALL_REMAIN_CORPUS", clean_lease_money.subtract(bdCorpus).toString()); + clean_lease_money = clean_lease_money.subtract(bdCorpus); + lrptBm.saveObject(lrptB); + } + Sqlca.commit(); + }catch(Exception e){ + e.printStackTrace(); + try { + Sqlca.rollback(); + } catch (JBOException jboException) { + jboException.printStackTrace(); + } + return "操作失败"; + } finally { + try { + if(Sqlca!=null) { + Sqlca.disConnect(); + } + } catch (JBOException e) { + e.printStackTrace(); + } + } + + return "操作成功"; + } + + /** + * 获取回笼期项 + */ + public String getHireList(String paymentNumber,String planList,com.amarsoft.awe.util.Transaction Sqlca) throws Exception{ + String hireList = Sqlca.getString("select max(HIRE_LIST) HIRE_LIST from (select max(HIRE_LIST) HIRE_LIST from LC_RENT_INCOME_TEMP where ROLL_BACK='0' and IS_FLOWING='0' and PAYMENT_NUMBER='"+paymentNumber+"' and PLAN_LIST='"+planList+"' union all select max(HIRE_LIST) HIRE_LIST from LC_RENT_INCOME where ROLL_BACK='0' and PAYMENT_NUMBER='"+paymentNumber+"' and PLAN_LIST='"+planList+"') aa"); + if(hireList==null){ + return "1"; + } + int hireList2 = Integer.valueOf(hireList); + return hireList2+1+""; + } + + +} diff --git a/src_jbo/jbo/app/tenwa/calc/LC_FUND_RENT_ADJUST.java b/src_jbo/jbo/app/tenwa/calc/LC_FUND_RENT_ADJUST.java index f32eed54a..5ed1d7715 100644 --- a/src_jbo/jbo/app/tenwa/calc/LC_FUND_RENT_ADJUST.java +++ b/src_jbo/jbo/app/tenwa/calc/LC_FUND_RENT_ADJUST.java @@ -177,4 +177,24 @@ public interface LC_FUND_RENT_ADJUST{ * 商定还款日息差 STRING(32)
*/ public static final String AGREED_DATEPENALTY = "AGREED_DATEPENALTY"; + /** + * 结清方式 STRING(32)
+ */ + public static final String SETTLE_METHOD = "SETTLE_METHOD"; + /** + * 租赁物比重 STRING(32)
+ */ + public static final String PROPROTION_NUMBER = "PROPROTION_NUMBER"; + /** + * 融资金额(元) STRING(32)
+ */ + public static final String CLEAN_LEASE_MONEY = "CLEAN_LEASE_MONEY"; + /** + * 部分结清车辆未到期本金 STRING(32)
+ */ + public static final String PREMATURE_MONEY = "PREMATURE_MONEY"; + /** + * 剩余车辆未到期本金 STRING(32)
+ */ + public static final String RESIDUE_MONEY = "RESIDUE_MONEY"; } \ No newline at end of file diff --git a/src_jbo/jbo/app/tenwa/calc/LC_FUND_RENT_ADJUST_TEMP.java b/src_jbo/jbo/app/tenwa/calc/LC_FUND_RENT_ADJUST_TEMP.java index 641f22090..bda1c7aa1 100644 --- a/src_jbo/jbo/app/tenwa/calc/LC_FUND_RENT_ADJUST_TEMP.java +++ b/src_jbo/jbo/app/tenwa/calc/LC_FUND_RENT_ADJUST_TEMP.java @@ -181,4 +181,24 @@ public interface LC_FUND_RENT_ADJUST_TEMP{ * 商定还款日息差 STRING(32)
*/ public static final String AGREED_DATEPENALTY = "AGREED_DATEPENALTY"; + /** + * 结清方式 STRING(32)
+ */ + public static final String SETTLE_METHOD = "SETTLE_METHOD"; + /** + * 租赁物比重 STRING(32)
+ */ + public static final String PROPROTION_NUMBER = "PROPROTION_NUMBER"; + /** + * 融资金额(元) STRING(32)
+ */ + public static final String CLEAN_LEASE_MONEY = "CLEAN_LEASE_MONEY"; + /** + * 部分结清车辆未到期本金 STRING(32)
+ */ + public static final String PREMATURE_MONEY = "PREMATURE_MONEY"; + /** + * 剩余车辆未到期本金 STRING(32)
+ */ + public static final String RESIDUE_MONEY = "RESIDUE_MONEY"; } \ No newline at end of file