apzl_leasing/calc/com/tenwa/reckon/executor/CreateTransactionExecutor.java
2020-08-06 17:38:36 +08:00

1270 lines
50 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package com.tenwa.reckon.executor;
import java.io.InputStream;
import java.math.BigDecimal;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import com.amarsoft.app.util.ProductParamUtil;
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.json.JSONEncoder;
import com.amarsoft.are.util.json.JSONObject;
import com.amarsoft.awe.util.SqlObject;
import com.tenwa.comm.exception.BusinessException;
import com.tenwa.comm.util.jboutil.DataOperatorUtil;
import com.tenwa.lease.flow.comm.service.LeaseFlowBaseService;
import com.tenwa.lease.flow.comm.service.ServiceOperatorEnum;
import com.tenwa.lease.flow.comm.serviceImp.LeaseFlowBaseServiceImp;
import com.tenwa.officetempalte.util.ExcelVersionEnum;
import com.tenwa.quartz.StringUtil;
import com.tenwa.reckon.bean.AdjustBean;
import com.tenwa.reckon.bean.ConditionBean;
import com.tenwa.reckon.bean.FundRentPlanBean;
import com.tenwa.reckon.bean.FundRentPlanIrr;
import com.tenwa.reckon.bean.KnowingTableBean;
import com.tenwa.reckon.bean.TabCalBean;
import com.tenwa.reckon.executor.rentChange.RentChangeExe;
import com.tenwa.reckon.executor.rentTerminate.RentTerminateExe;
import com.tenwa.reckon.help.CalYearRateFromRent;
import com.tenwa.reckon.help.ConditionHelper;
import com.tenwa.reckon.help.RentPlanContrCalDAOImpl;
import com.tenwa.reckon.util.DateUtil;
import com.tenwa.reckon.util.DictTools;
import com.tenwa.reckon.util.ExcelReader;
import com.tenwa.reckon.util.MoneyUtils;
import com.tenwa.reckon.util.ObjectConvertUtils;
import com.tenwa.reckon.util.TbBeanTools;
import jbo.app.tenwa.calc.LC_CALC_CONDITION;
import jbo.app.tenwa.calc.LC_CALC_CONDITION_TEMP;
import jbo.app.tenwa.calc.LC_CALC_RULES_TEMP;
import jbo.app.tenwa.calc.LC_CASH_FLOW;
import jbo.app.tenwa.calc.LC_CASH_FLOW_TEMP;
import jbo.app.tenwa.calc.LC_EBANK;
import jbo.app.tenwa.calc.LC_EBANK_PROCESS;
import jbo.app.tenwa.calc.LC_EBANK_TEMP;
import jbo.app.tenwa.calc.LC_FUND_PLAN;
import jbo.app.tenwa.calc.LC_FUND_PLAN_TEMP;
import jbo.app.tenwa.calc.LC_FUND_RENT_ADJUST_TEMP;
import jbo.app.tenwa.calc.LC_RENT_PLAN;
import jbo.app.tenwa.calc.LC_RENT_PLAN_TEMP;
import jbo.com.tenwa.entity.comm.flow.FLOW_BUSSINESS_OBJECT;
import jbo.com.tenwa.lease.comm.LB_EQUIPMENT_TEMP;
import jbo.com.tenwa.lease.comm.LC_PAY_CONDTION_TEMP;
import jbo.sys.CODE_LIBRARY;
/**
*
* @author chuang <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
public class CreateTransactionExecutor implements Transaction {
private String calType;
private String flowunid;
private String rentOrRate;
private String cleanLeasemoney;
private String equipEndValue;
private String contractId;
private String paydayAdjust;
private String plannumber;
private String productId;
private String planCName;
private String startDate;
private String userID;
private String orgID;
private String flow_name;
private String ebanknumber;
private String projectId;
public String getStartDate() {
return startDate;
}
public void setStartDate(String startDate) {
this.startDate = startDate;
}
/**
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
@Override
public String run() {
JSONObject jsonObject = JSONObject.createObject();
String irr = "";
JBOTransaction tx=null;
try {
tx=JBOFactory.createJBOTransaction();
TabCalBean bean = TbBeanTools.getTabInfo(calType, flowunid,plannumber,productId);
this.deletePayCondition(this.getFlowunid(),bean.getPlanCName(), bean.getPlanCValue(), tx);
DictTools.setYearRate(bean);
String yearRate = bean.getCb().getYearRate();
this.preHandle(bean.getCb(),bean);
if(bean.getCb().getRentOrRate().equals("rent")&&new BigDecimal(bean.getCb().getIncomeNumber()).multiply(new BigDecimal(bean.getCb().getRentValue())).compareTo(new BigDecimal(bean.getCb().getCleanLeaseMoney()))<0){
throw new BusinessException("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܺͱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD>");
}
//<2F><>ȡ<EFBFBD><C8A1>Ʒ<EFBFBD><C6B7><EFBFBD><EFBFBD>
com.amarsoft.awe.util.Transaction Sqlca = com.amarsoft.awe.util.Transaction.createTransaction(tx);
String productType = Sqlca.getString(new SqlObject("select attribute2 from business_type where typeno='"+productId+"'"));
bean.setProductType(productType);
bean.getCb().setProductType(productType);
jsonObject.appendElement("year_rate", yearRate);
FundRentPlanBean rentPlan = this.createRentPlan(bean,tx);
this.createFundPlan(rentPlan, bean,tx);
irr = this.createCashFlow(bean,tx);
jsonObject.appendElement("result", "true");
this.callBack(jsonObject, bean.getCb(), bean,rentPlan,false,tx);
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
return JSONEncoder.encode(jsonObject);
}catch(BusinessException e){
try {
tx.rollback();
} catch (JBOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
jsonObject.appendElement("message",e.getMessage());
return JSONEncoder.encode(jsonObject);
}catch (Exception e) {
try {
tx.rollback();
} catch (JBOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
e.printStackTrace();
return irr;
}finally{
if(tx!=null){
try {
tx.commit();
} catch (JBOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
/**
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
@Override
public void runTrans( JBOTransaction tx ) throws Exception {
JSONObject jsonObject = JSONObject.createObject();
TabCalBean bean = TbBeanTools.getTabInfoTrans( calType, flowunid, plannumber, productId, tx );
this.deletePayCondition(this.getFlowunid(),bean.getPlanCName(), bean.getPlanCValue(), tx);
DictTools.setYearRate(bean);
String yearRate = bean.getCb().getYearRate();
this.preHandle(bean.getCb(),bean);
if(bean.getCb().getRentOrRate().equals("rent")&&new BigDecimal(bean.getCb().getIncomeNumber()).multiply(new BigDecimal(bean.getCb().getRentValue())).compareTo(new BigDecimal(bean.getCb().getCleanLeaseMoney()))<0){
throw new BusinessException("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܺͱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD>");
}
//<2F><>ȡ<EFBFBD><C8A1>Ʒ<EFBFBD><C6B7><EFBFBD><EFBFBD>
com.amarsoft.awe.util.Transaction Sqlca = com.amarsoft.awe.util.Transaction.createTransaction(tx);
String productType = Sqlca.getString(new SqlObject("select attribute2 from business_type where typeno='"+productId+"'"));
bean.setProductType(productType);
bean.getCb().setProductType(productType);
jsonObject.appendElement("year_rate", yearRate);
FundRentPlanBean rentPlan = this.createRentPlan(bean,tx);
this.createFundPlan(rentPlan, bean,tx);
String irr = this.createCashFlow(bean,tx);
jsonObject.appendElement("result", "true");
this.callBack(jsonObject, bean.getCb(), bean,rentPlan,false,tx);
}
/**
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
@Override
public String runOnhire() {
JSONObject jsonObject = JSONObject.createObject();
String irr = "";
JBOTransaction tx=null;
try {
tx=JBOFactory.createJBOTransaction();
TabCalBean bean = TbBeanTools.getTabInfo(calType, flowunid,plannumber,productId);
FundRentPlanBean rentPlan = this.createRentPlan(bean,tx);
this.createFundPlan(rentPlan, bean,tx);
irr = this.createCashFlow(bean,tx);
jsonObject.appendElement("result", "true");
this.callBack(jsonObject, bean.getCb(), bean,rentPlan,false,tx);
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
return JSONEncoder.encode(jsonObject);
} catch (Exception e) {
try {
tx.rollback();
} catch (JBOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
e.printStackTrace();
return irr;
}finally{
if(tx!=null){
try {
tx.commit();
} catch (JBOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
/**
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param Sqlca
* @return
* @throws Exception
*/
public String carRunOnhire(com.amarsoft.awe.util.Transaction Sqlca) throws Exception {
JBOTransaction tx=null;
BizObjectManager Bm=JBOFactory.getBizObjectManager(LC_CALC_CONDITION.CLASS_NAME, Sqlca);
BizObject boLCC = Bm.createQuery("contract_id='" + contractId + "'").getSingleResult(true);
//<2F><>ȡ<EFBFBD>ڴ<EFBFBD>
if(boLCC != null) {
String settleMethod = boLCC.getAttribute("SETTLE_METHOD").getString();
String defaultDueDay = ProductParamUtil.getProductParameterValue(productId, "PRD0301", settleMethod, "DefaultDueDay");
int incomeNumber = boLCC.getAttribute("INCOME_NUMBER").getInt();
String periodType = boLCC.getAttribute("PERIOD_TYPE").getString();
String incomeIntervalMonth = boLCC.getAttribute("INCOME_INTERVAL_MONTH").getInt() + "";
List<String> planDateList = null;
if("02".equals(defaultDueDay)) {
planDateList = getPlanDateListFixed(incomeNumber, periodType, incomeIntervalMonth, startDate);
} else {
planDateList = getPlanDateList(incomeNumber, periodType, incomeIntervalMonth, startDate);
}
String insertSql="insert into lc_rent_plan(id,quot_id,cust_id, project_id, project_plan_number,contract_id,contract_plan_number,payment_number,plan_list,plan_date,plan_status,rent,corpus,interest,penalty,corpus_business,interest_business,rent_adjust,all_remain_corpus,settle_method,coin,year_rate,memo,flowunid,inputuserid,inputorgid,inputtime,updateuserid,updateorgid,updatetime,interest_date) select id,quot_id,cust_id, project_id, project_plan_number,contract_id,contract_plan_number,payment_number,plan_list,plan_date,plan_status,rent,corpus,interest,penalty,corpus_business,interest_business,rent_adjust,all_remain_corpus,settle_method,coin,year_rate,memo,flowunid,inputuserid,inputorgid,inputtime,updateuserid,updateorgid,updatetime,interest_date from lc_pay_rent_plan where payment_number = '" + this.plannumber + "'";
Sqlca.executeSQL(new SqlObject(insertSql));
Connection conn = Sqlca.getConnection(Sqlca);
//ʵ<><CAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƻ<EFBFBD><C6BB><EFBFBD><EFBFBD>ڣ<EFBFBD><DAA3><EFBFBD>ʼ<EFBFBD><CABC>
PreparedStatement ps = null;
try {
ps = conn.prepareStatement("update lc_rent_plan set plan_date = ? where payment_number = '" + this.plannumber + "' and plan_list = ?");
for(int i = 0; i < planDateList.size(); i ++) {
ps.setString(1, planDateList.get(i));
ps.setString(2, (i + 1) + "");
ps.addBatch();
}
ps.executeBatch();
} catch(Exception e) {
e.printStackTrace();
throw new RuntimeException("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
} finally {
if(ps != null) ps.close();
}
boLCC.setAttributeValue("start_date", startDate);
boLCC.setAttributeValue("lease_amt_date", startDate);
if(planDateList.size()>0)boLCC.setAttributeValue("first_plan_date", planDateList.get(0));
if(planDateList.size()>1)boLCC.setAttributeValue("second_plan_date", planDateList.get(1));
Bm.saveObject(boLCC);
//ʵ<><CAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƻ<EFBFBD><C6BB><EFBFBD><EFBFBD>ڣ<EFBFBD><DAA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Sqlca.executeSQL(new SqlObject("update lc_fund_plan set plan_date = '" + planDateList.get(planDateList.size() - 1) + "' where payment_number = '" + this.plannumber + "' and pay_type = 'pay_type_out' and fee_type != 'feetype10'"));
Sqlca.executeSQL(new SqlObject("update lc_fund_plan set plan_date = '" + startDate + "' where payment_number = '" + this.plannumber + "' and pay_type = 'pay_type_in' and fee_type != 'feetype4' and fee_type != 'feetype12'"));
Sqlca.executeSQL(new SqlObject("update lc_fund_plan set plan_date = '" + startDate + "' where payment_number = '" + this.plannumber + "' and fee_type = 'feetype10'"));
this.setCashFlow(this.plannumber, this.productId, Sqlca);
}
return "success";
}
/**
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƻ<EFBFBD>
* @param splittingRatio,Sqlca
* @return
* @throws JBOException
* @throws Exception
*/
public void insertRentPlan_SP (String splittingRatio,com.amarsoft.awe.util.Transaction Sqlca) throws Exception{
BizObjectManager BmLRP=JBOFactory.getBizObjectManager(LC_RENT_PLAN.CLASS_NAME, Sqlca);
java.text.SimpleDateFormat format = new java.text.SimpleDateFormat("yyyy/MM/dd");
String day ="0";
Long start = format.parse(startDate).getTime();
List<BizObject> BoLRP = BmLRP.createQuery("payment_number=:payment_number order by plan_list").setParameter("payment_number", this.plannumber).getResultList(false);
Connection conn = Sqlca.getConnection(Sqlca);
PreparedStatement ps = null;
BigDecimal corpus_sp = new BigDecimal("0.00");
try{
ps = conn.prepareStatement("update lc_rent_plan set CORPUS_SP = ?,INTEREST_SP = ? where payment_number = '" + this.plannumber + "' and plan_list = ?");
for(int i = 0; i < BoLRP.size(); i ++){
BigDecimal corpus = new BigDecimal(BoLRP.get(i).getAttribute("CORPUS").toString());
BigDecimal allRemainCorpus =new BigDecimal(BoLRP.get(i).getAttribute("ALL_REMAIN_CORPUS").toString());
BigDecimal interest =new BigDecimal(BoLRP.get(i).getAttribute("INTEREST").toString());
BigDecimal ratio = new BigDecimal(splittingRatio).divide(new BigDecimal("100"));
Long planDate = BoLRP.get(i).getAttribute("PLAN_DATE").getDate().getTime();
//<2F><>һ<EFBFBD>ڵĻ<DAB5><C4BB><EFBFBD><EFBFBD>üƻ<C3BC><C6BB><EFBFBD><EFBFBD>ڼ<EFBFBD>ȥ<EFBFBD><C8A5><EFBFBD><EFBFBD><EFBFBD>ա<EFBFBD><D5A1><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD>ڱ<EFBFBD><DAB1><EFBFBD><EFBFBD><EFBFBD>ʣ<EFBFBD><CAA3><EFBFBD>ܱ<EFBFBD><DCB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܱ<EFBFBD><DCB1><EFBFBD><EFBFBD><EFBFBD>
if(i==0){
day = String.valueOf((planDate-start)/(24*60*60*1000));
}else{
day = String.valueOf((planDate-(BoLRP.get(i-1).getAttribute("PLAN_DATE").getDate().getTime()))/(24*60*60*1000));
}
corpus_sp = corpus.add(allRemainCorpus).multiply(ratio).multiply(new BigDecimal(day)).divide(new BigDecimal("360"),2,BigDecimal.ROUND_HALF_UP);
BigDecimal interest_sp = interest.subtract(corpus_sp);
ps.setString(1, corpus_sp.toString());
ps.setString(2, interest_sp.toString());
ps.setString(3, (i + 1) + "");
ps.addBatch();
}
ps.executeBatch();
}catch(Exception e){
e.printStackTrace();
throw new RuntimeException("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
} finally {
if(ps != null) ps.close();
}
}
public void setCashFlow(String paymentNumber, String productId, com.amarsoft.awe.util.Transaction Sqlca) throws Exception {
String sql = "";
sql += "INSERT INTO LC_CASH_FLOW (id,project_id,project_plan_number,contract_id,contract_plan_number,payment_number";
sql += ",plan_date";
sql += ",fund_in";
sql += ",fund_in_details";
sql += ",fund_out";
sql += ",fund_out_details";
sql += ",net_flow";
//sql += ",flowunid";//create_date,creator_ "+DateUtil.getSystemDate()+"' create_date ,'"+SecurityUtil.getPrincipal().getId()+"' creator_"
sql += " )";
sql +=" select replace(uuid(),'-','') id,max(t.project_id),max(t.project_plan_number),max(t.contract_id),max(t.contract_plan_number),max(t.payment_number),t.plan_date,sum(t.flowin) fundin,ifnull(group_concat(if(t.flowindetail='',null,t.flowindetail)),'-') fundindetails, ";
sql +=" sum(t.flowout) fundout ,ifnull(group_concat(if(t.flowoutdetail='',null,t.flowoutdetail)),'-')fundoutdetails ,sum(t.cleanfow)netflow " ;
sql +=" from (" ;
sql +=" select cfrp.project_id,cfrp.project_plan_number,cfrp.contract_id,cfrp.contract_plan_number,cfrp.payment_number,cfrp.plan_date,cfrp.rent flowin,concat('<27><>',cfrp.plan_list,'<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:',format(cfrp.rent,2)) flowindetail,0 flowout,'' flowoutdetail,cfrp.rent-0 cleanfow " ;
sql +=" from lc_rent_plan cfrp" ;
sql +=" where cfrp.payment_number='" + paymentNumber + "'" ;
sql +=" union all " ;
sql +=" select fundplan.project_id,fundplan.project_plan_number,fundplan.contract_id,fundplan.contract_plan_number,fundplan.payment_number,fundplan.plan_date,if(fundplan.pay_type='pay_type_in',fundplan.plan_money,0)flowin, ";
sql +=" if(fundplan.pay_type='pay_type_in',concat(tdd.itemname,':',format(fundplan.plan_money,2)),''), " ;
sql +=" if(fundplan.pay_type='pay_type_out',fundplan.plan_money,0)flowout, " ;
sql +=" if(fundplan.pay_type='pay_type_out',concat(tdd.itemname,':',format(fundplan.plan_money,2)),'')flowoutdetail, " ;
sql +=" if(fundplan.pay_type='pay_type_in',fundplan.plan_money,-fundplan.plan_money) cleanfow " ;
sql +=" from lc_fund_plan fundplan " ;
sql +=" left join code_library tdd on fundplan.fee_type = tdd.itemno " ;
sql +=" where fundplan.payment_number='" + paymentNumber + "'";
if(productId != null){
Map<String,Map<String,String>> productCashInIRRList = ProductParamUtil.getProductComponentType(productId, "PRD0315");
Set<Entry<String,Map<String,String>>> entry = productCashInIRRList.entrySet();
for(Entry<String,Map<String,String>> e : entry){
Map<String,String> parameMap = e.getValue();
boolean flag = false;
if("N".equals(parameMap.get("CostType10"))){
flag = true;
}
if(flag){
sql +=" and tdd.relativecode<>'"+e.getKey()+"' ";
}
}
}
sql +=" )t group by t.plan_date ";
Sqlca.executeSQL(new SqlObject(sql));
}
//<2F>̶<EFBFBD><CCB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
public static List<String> getPlanDateListFixed(int incomeNumber, String periodType, String incomeIntervalMonth, String startDate) throws ParseException {
List<String> planDate = new ArrayList<String>();
Calendar calendar = Calendar.getInstance();
calendar.setTime(com.amarsoft.app.als.sys.tools.DateUtil.parseStringToDate(startDate, "yyyy/MM/dd"));
int day = calendar.get(Calendar.DAY_OF_MONTH);
boolean flag = false;
if("period_type_0".equals(periodType)) {
if(day >= 1 && day <= 9) {
day = 5;
} else if(day >= 10 && day <= 19) {
day = 15;
} else {
day = 25;
}
} else {
if(day >= 6 && day <= 15) {
day = 15;
} else if(day >= 16 && day <= 25) {
day = 25;
} else {
if(day >= 26 && day <= 31) {
flag = true;
}
day = 5;
}
}
int addMonth = Integer.parseInt(incomeIntervalMonth);
for(int i = 0; i < incomeNumber; i ++) {
if(!("period_type_1".equals(periodType) && i == 0 && !flag)) {//<2F><>ĩ<EFBFBD><C4A9><EFBFBD>ϻ<EFBFBD><CFBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
calendar.add(Calendar.MONTH, addMonth);
if(day != calendar.get(Calendar.DAY_OF_MONTH)) {
if(day > calendar.getActualMaximum(Calendar.DAY_OF_MONTH)) {
calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
} else {
calendar.set(Calendar.DAY_OF_MONTH, day);
}
}
} else {
calendar.set(Calendar.DAY_OF_MONTH, day);
}
planDate.add(com.amarsoft.app.als.sys.tools.DateUtil.formatDateToString(calendar.getTime(), "yyyy/MM/dd"));
}
return planDate;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
public static List<String> getPlanDateList(int incomeNumber, String periodType, String incomeIntervalMonth, String startDate) throws ParseException {
List<String> planDate = new ArrayList<String>();
Calendar calendar = Calendar.getInstance();
calendar.setTime(com.amarsoft.app.als.sys.tools.DateUtil.parseStringToDate(startDate, "yyyy/MM/dd"));
int day = calendar.get(Calendar.DAY_OF_MONTH);
int addMonth = Integer.parseInt(incomeIntervalMonth);
for(int i = 0; i < incomeNumber; i ++) {
if(!("period_type_1".equals(periodType) && i == 0)) {//<2F><>ĩ<EFBFBD><C4A9><EFBFBD>ϻ<EFBFBD><CFBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
calendar.add(Calendar.MONTH, addMonth);
if(day != calendar.get(Calendar.DAY_OF_MONTH)) {
if(day > calendar.getActualMaximum(Calendar.DAY_OF_MONTH)) {
calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
} else {
calendar.set(Calendar.DAY_OF_MONTH, day);
}
}
}
planDate.add(com.amarsoft.app.als.sys.tools.DateUtil.formatDateToString(calendar.getTime(), "yyyy/MM/dd"));
}
return planDate;
}
/**
* <20><>;<EFBFBD><CDBE>ֹ
*/
@Override
public String runTerminate() throws Exception {
JSONObject jsonObject = JSONObject.createObject();
JBOTransaction tx=null;
try {
tx=JBOFactory.createJBOTransaction();
//<2F><>װʵ<D7B0><CAB5>bean
TabCalBean bean = TbBeanTools.getTabInfo(calType, flowunid,plannumber,productId);
BizObject bo = JBOFactory.getFactory().getManager(LC_FUND_RENT_ADJUST_TEMP.CLASS_NAME).createQuery("flowunid =:flowunid").setParameter("flowunid", flowunid).getSingleResult(true);
//AdjustBean ab = ObjectConvertUtils.converBizObjectToBean(AdjustBean.class, bo);
RentTerminateExe exe = new RentTerminateExe(tx);
FundRentPlanBean rentPlan = exe.create(bean.getCb(), bo, bean);
this.createFundPlanTerminate(rentPlan, bean,tx,bo);
this.createCashFlow(bean,tx);
jsonObject.appendElement("result", "true");
this.callBack(jsonObject, bean.getCb(), bean,rentPlan,false,tx);
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
} catch (Exception e) {
tx.rollback();
e.printStackTrace();
jsonObject.appendElement("result", "false");
}finally{
if(tx!=null){
tx.commit();
}
}
return JSONEncoder.encode(jsonObject);
}
/**
* ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param tx
* @return
*/
public String deletePlan(JBOTransaction tx){
Map<String,String> condtion=new HashMap<String, String>();
condtion.put("flowunid", flowunid);
condtion.put(this.planCName, plannumber);
try{
DataOperatorUtil.deleteJBOByCondtion(LC_CALC_CONDITION_TEMP.CLASS_NAME, condtion, tx);
DataOperatorUtil.deleteJBOByCondtion(LC_CALC_RULES_TEMP.CLASS_NAME, condtion, tx);
DataOperatorUtil.deleteJBOByCondtion(LC_CASH_FLOW_TEMP.CLASS_NAME, condtion, tx);
DataOperatorUtil.deleteJBOByCondtion(LC_FUND_PLAN_TEMP.CLASS_NAME, condtion, tx);
DataOperatorUtil.deleteJBOByCondtion(LC_RENT_PLAN_TEMP.CLASS_NAME, condtion, tx);
}catch(Exception e){
e.printStackTrace();
return "ɾ<EFBFBD><EFBFBD>ʧ<EFBFBD>ܣ<EFBFBD>";
}
return "ɾ<EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD><EFBFBD><EFBFBD>";
}
/**
* ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0>
* @param flowunid
* @param planCName
* @param planCValue
* @param tx
* @throws JBOException
*/
public void deletePayCondition(String flowunid,String planCName,String planCValue,JBOTransaction tx) throws JBOException{
String sql="";
if(planCName.equals("PAYMENT_NUMBER")){
sql="delete from O where flowunid=:flowunid and PAYMENT_NUMBER=:plannumber";
}else{
sql="delete from O where flowunid=:flowunid and PLAN_NUMBER=:plannumber";
}
JBOFactory.getBizObjectManager(LC_PAY_CONDTION_TEMP.CLASS_NAME, tx).createQuery(sql).setParameter("flowunid", flowunid).setParameter("plannumber", planCValue).executeUpdate();
}
@Override
public FundRentPlanBean createRentPlan(TabCalBean bean,JBOTransaction tx) throws Exception {
ConditionBean cb = bean.getCb();
bean.setCb(cb);
DictTools.getReversDict(cb);
String settleMethod = cb.getSettleMethod();
FundRentPlanExecutor executor;
FundRentPlanBean planBean = new FundRentPlanBean();
if (settleMethod.equals("even_interest")) {
executor = new EvenInterestExecutor(tx);
} else if (settleMethod.equals("even_corpus")||settleMethod.equals("even_corpus_rate")) {
executor = new EvenCorpusExecutor(tx);
}else if(settleMethod.equals("even_rent_day")){
executor=new EvenRentDayExecutor(tx);
}else if(settleMethod.equals("even_subsection")){
executor=new EvenSubsectionExecutor(tx);
}else if(settleMethod.equals("car_even_interest")){
executor=new CarEvenInterestExecutor(tx,bean.getProductId());//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>
}else if(settleMethod.equals("car_even_rent")){
executor=new CarEvenRentExecutor(tx,bean.getProductId());//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
} else {
executor = new EvenRentExecutor(tx);
}
if(bean.getCalType().equals("onHire_process")){
planBean = executor.createOnhire(bean);
}else{
planBean= executor.create(bean,1);
}
if (planBean.getPlanDateList() != null&& planBean.getPlanDateList().size() > 0) {
cb.setLastPlanDate(planBean.getPlanDateList().get(planBean.getPlanDateList().size() - 1));//ĩ<><C4A9><EFBFBD><EFBFBD><EFBFBD>𻹿<EFBFBD><F0BBB9BF><EFBFBD><EFBFBD><EFBFBD>
String endDate=DateUtil.addDate(cb.getStartDate(),DateUtil.TIME_MONTH,cb.getLeaseTerm());
cb.setEndDate(endDate);
if(cb.getPeriodType().equals("0")){
cb.setEndPlanDate(endDate);
}else{
cb.setEndPlanDate(DateUtil.addDate(cb.getLastPlanDate(),DateUtil.TIME_MONTH,cb.getIncomeIntervalMonth()));
}
}
return planBean;
}
@Override
public void createFundPlan(FundRentPlanBean planBean, TabCalBean bean,JBOTransaction tx)
throws Exception {
FundFundPlanExecutor fundFundExecutor = new FundFundPlanExecutor();
fundFundExecutor.run(bean.getCb(), bean, planBean,tx);
}
@Override
public void createFundPlanTerminate(FundRentPlanBean planBean, TabCalBean bean,JBOTransaction tx,BizObject bo)
throws Exception {
FundFundPlanExecutor fundFundExecutor = new FundFundPlanExecutor();
fundFundExecutor.runTerminate(bean.getCb(), bean, planBean,tx,bo);
}
@Override
public String createCashFlow(TabCalBean bean,JBOTransaction tx) throws Exception {
CashFlowExecutor executor = new CashFlowExecutor(tx);
return executor.run(bean.getCb(), bean);
}
/**
* <20><>֪<EFBFBD><D6AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ȶ<EFBFBD><C8B6><EFBFBD><EFBFBD><EFBFBD> <20><>Ϣ<EFBFBD><CFA2> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
@Override
public void preHandle(ConditionBean cb,TabCalBean bean) throws Exception {
CalYearRateFromRent calYearRate = CalYearRateFromRent.getInstance();
calYearRate.calDo(cb,bean);
}
/**
* <20><>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> IRR <20><>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ŷ<EFBFBD>
*/
@Override
public void callBack(JSONObject jsonObject,ConditionBean cb,TabCalBean bean,FundRentPlanBean rentPlan,Boolean flag,JBOTransaction tx) throws Exception {
ConditionHelper helper = new ConditionHelper();
helper.setTx(tx);
helper.run(jsonObject, cb, bean, rentPlan,flag);
}
/**
* ɾ<><C9BE><EFBFBD><EFBFBD>֪<EFBFBD><D6AA><EFBFBD><EFBFBD>
*/
@Override
public String runDelteKnowing() throws Exception{
TabCalBean tcb=TbBeanTools.getTabInfo(this.calType);
BizObjectManager bm=JBOFactory.getBizObjectManager(tcb.getRuleTb());
bm.createQuery("delete from O where flowunid=:flowunid and "+this.planCName+"=:plannumber").setParameter("flowunid",this.flowunid).setParameter("plannumber",this.plannumber).executeUpdate();
BizObjectManager bm2=JBOFactory.getBizObjectManager(tcb.getPeriodTb());
bm2.createQuery("delete from O where flowunid=:flowunid and "+this.planCName+"=:plannumber").setParameter("flowunid",this.flowunid).setParameter("plannumber",this.plannumber).executeUpdate();
return null;
}
/**
* ɾ<><C9BE>
* @return
* @throws Exception
*/
public String runDeleSubsection() throws Exception{
TabCalBean tcb=TbBeanTools.getTabInfo(this.calType);
BizObjectManager bm=JBOFactory.getBizObjectManager(tcb.getSubsectionTb());
bm.createQuery("delete from O where flowunid=:flowunid and "+this.planCName+"=:plannumber").setParameter("flowunid",this.flowunid).setParameter("plannumber",this.plannumber).executeUpdate();
return null;
}
/**
* <20><>֪<EFBFBD><D6AA><EFBFBD><EFBFBD>
* @throws Exception
*/
@SuppressWarnings("unchecked")
@Override
public String checkKnowingConfig() throws Exception {
try {
TabCalBean tcb=TbBeanTools.getTabInfo(this.calType);
BizObjectManager manager = JBOFactory.getBizObjectManager(tcb.getRuleTb());
BigDecimal corpusTotal = new BigDecimal(MoneyUtils.getZeroStr(this.cleanLeasemoney)).subtract(new BigDecimal(MoneyUtils.getZeroStr(this.equipEndValue)));
List<BizObject> libX =manager.createQuery("flowunid=:flowunid and "+this.planCName+"=:plannumber").setParameter("plannumber",this.plannumber).setParameter("flowunid", this.flowunid).getResultList(false);
BigDecimal planMoneyTotal = BigDecimal.ZERO;
for(BizObject obj : libX){
int startList = obj.getAttribute("start_list").getInt();
int endList = obj.getAttribute("end_list").getInt();
for(int i = startList ; i<=endList ; i++){
planMoneyTotal = planMoneyTotal.add(new BigDecimal(obj.getAttribute("plan_money").getDouble()));
}
}
if(this.rentOrRate.equals("knowing_rent")){
if(planMoneyTotal.compareTo(corpusTotal) > 0){
return "";
}else{
return "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ";
}
}else if(this.rentOrRate.equals("knowing_corpus")){
if(planMoneyTotal.compareTo(corpusTotal) == 0){
return "";
}else{
return "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>򱾽<EFBFBD><EFBFBD>ܶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ";
}
}
BizObjectManager bm=JBOFactory.getBizObjectManager(tcb.getPeriodTb());
List<BizObject> periodList=bm.createQuery("flowunid=:flowunid and "+this.planCName+"=:plannumber").setParameter("plannumber",this.plannumber).setParameter("flowunid", this.flowunid).getResultList(false);
planMoneyTotal=BigDecimal.ZERO;
for(BizObject bo:periodList){
planMoneyTotal=planMoneyTotal.add(new BigDecimal(bo.getAttribute("PLAN_MONEY").getString()));
}
if(this.rentOrRate.equals("rent_period")){
if(planMoneyTotal.compareTo(corpusTotal) > 0){
return "";
}else{
return "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ";
}
}else if(this.rentOrRate.equals("corpus_period")){
if(planMoneyTotal.compareTo(corpusTotal) == 0){
return "";
}else{
return "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>򱾽<EFBFBD><EFBFBD>ܶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ";
}
}
return "";
} catch (JBOException e) {
e.printStackTrace();
return "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>æ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ժ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԣ<EFBFBD>";
}
}
/**
* <20><><EFBFBD><EFBFBD><EFBFBD>ƻ<EFBFBD><C6BB><EFBFBD><EFBFBD><EFBFBD>
*/
@Override
public String runRentChange() throws Exception{
JSONObject jsonObject = JSONObject.createObject();
JBOTransaction tx=null;
try {
tx=JBOFactory.createJBOTransaction();
//<2F><>װʵ<D7B0><CAB5>bean
TabCalBean bean = TbBeanTools.getTabInfo(calType, flowunid,plannumber,productId);
BizObject bo = JBOFactory.getFactory().getManager(LC_FUND_RENT_ADJUST_TEMP.CLASS_NAME).createQuery("flowunid =:flowunid and payment_number=:plannumber").setParameter("flowunid", flowunid).setParameter("plannumber", plannumber).getSingleResult(true);
AdjustBean ab = ObjectConvertUtils.converBizObjectToBean(AdjustBean.class, bo);
RentChangeExe exe = new RentChangeExe(tx);
ConditionBean csOld=bean.getCb().clone();
csOld.setOldIncomeNumber(csOld.getIncomeNumber());
FundRentPlanBean rentPlan = exe.create(bean.getCb(), ab, bean);
//<2F><><EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD>
csOld.setIncomeNumber(ab.getAdjustList());
csOld.setLeaseTerm(bean.getCb().getLeaseTerm());
csOld.setYearRate(ab.getYearRate().toString());
bean.setCb(csOld);
//this.createFundPlan(rentPlan, bean,tx);
this.createCashFlow(bean,tx);
jsonObject.appendElement("result", "true");
this.callBack(jsonObject, bean.getCb(), bean,rentPlan,true,tx);
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
} catch (Exception e) {
tx.rollback();
e.printStackTrace();
jsonObject.appendElement("result", "false");
}finally{
if(tx!=null){
tx.commit();
}
}
return JSONEncoder.encode(jsonObject);
}
/**
* ȡ<><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
@Override
public String cancelRentChange(JBOTransaction tx) throws Exception {
BizObjectManager manager = JBOFactory.getFactory().getManager(LC_FUND_RENT_ADJUST_TEMP.CLASS_NAME);
//ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼
BizObject bo = manager.createQuery("flowunid =:flowunid and payment_number=:plannumber").setParameter("flowunid", flowunid).setParameter("plannumber", plannumber).getSingleResult(true);
if(bo != null ){
manager.deleteObject(bo);
}
//<2F><><EFBFBD>¸<EFBFBD><C2B8><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƻ<EFBFBD><C6BB><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
Map<String, String> fromCondition = new HashMap<String, String>();
Map<String,String> toCondition=new HashMap<String, String>();
toCondition.put("flowunid", this.getFlowunid());
toCondition.put("payment_number", this.getPlannumber());
Map<String, String> otherProperty = new HashMap<String, String>();
fromCondition.put("payment_number",this.getPlannumber());
otherProperty.put("flowunid", flowunid);
DataOperatorUtil.copyJBOSet(LC_RENT_PLAN.CLASS_NAME, fromCondition,LC_RENT_PLAN_TEMP.CLASS_NAME ,toCondition, otherProperty,null, tx);
DataOperatorUtil.copyJBOSet(LC_CALC_CONDITION.CLASS_NAME, fromCondition,LC_CALC_CONDITION_TEMP.CLASS_NAME ,toCondition, otherProperty,null, tx);
DataOperatorUtil.copyJBOSet(LC_FUND_PLAN.CLASS_NAME, fromCondition,LC_FUND_PLAN_TEMP.CLASS_NAME ,toCondition, otherProperty,null, tx);
DataOperatorUtil.copyJBOSet(LC_CASH_FLOW.CLASS_NAME, fromCondition,LC_CASH_FLOW_TEMP.CLASS_NAME ,toCondition, otherProperty,null, tx);
String mage = deleteEbank(tx);
if(!"Success".equals(mage)){
return "false";
}
return "true";
}
/**
* <20>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>
*/
@Override
public String checkIsRentChange() throws Exception {
try{
BizObject bo = JBOFactory.getFactory().getManager(LC_FUND_RENT_ADJUST_TEMP.CLASS_NAME).createQuery("flowunid =:flowunid and PAYMENT_NUMBER=:plannumber").setParameter("flowunid", flowunid).setParameter("plannumber", plannumber).getSingleResult(true);
if(bo == null){
return "true";
}else{
return "false";
}
}catch(Exception e){
return "false";
}
}
/**
* <20>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ񱣴<C7B7>
*/
@Override
public String checkIsSaveCondition() throws Exception {
try{
TabCalBean tcb=TbBeanTools.getTabInfo(this.calType);
BizObject bo = JBOFactory.getFactory().getManager(tcb.getCondition_tb()).createQuery("flowunid =:flowunid and "+this.planCName+"='"+this.plannumber+"'").setParameter("flowunid", flowunid).getSingleResult(true);
if(bo == null){
return "false";
}else{
return "true";
}
}catch(Exception e){
return "false";
}
}
@SuppressWarnings("unchecked")
public String updateConditionFund() throws Exception{
List<BizObject> funds=JBOFactory.createBizObjectQuery(LC_FUND_PLAN_TEMP.CLASS_NAME,"flowunid=:flowunid and payment_number=:paymentnumber").setParameter("flowunid",this.flowunid).setParameter("paymentnumber",this.plannumber).getResultList(false);
BizObjectManager bm=JBOFactory.getBizObjectManager(LC_CALC_CONDITION_TEMP.CLASS_NAME);
BizObject condition=bm.createQuery("flowunid=:flowunid and payment_number=:paymentnumber").setParameter("flowunid",this.flowunid).setParameter("paymentnumber",this.plannumber).getSingleResult(true);
Map<String,BigDecimal> map=new HashMap<String, BigDecimal>();
List<BizObject> fundConfig=JBOFactory.createBizObjectQuery(CODE_LIBRARY.CLASS_NAME,"codeno='FeeType'").getResultList(false);
Map<String,String> fundCol=new HashMap<String, String>();
for(BizObject config:fundConfig){
map.put(config.getAttribute("itemno").getString(),BigDecimal.ZERO);
fundCol.put(config.getAttribute("itemno").getString(),config.getAttribute("relativecode").getString());
if(config.getAttribute("itemno").getString().equals("feetype16")){//<2F>ֿ۱<D6BF>֤<EFBFBD><D6A4>
fundCol.put(config.getAttribute("itemno").getString(),"CAUTION_DEDUCTION_MONEY");
}
if(config.getAttribute("itemno").getString().equals("feetype17")){//<2F>˻<EFBFBD><CBBB><EFBFBD>֤<EFBFBD><D6A4>
fundCol.put(config.getAttribute("itemno").getString(),"CAUTION_MONEY_REMAIN");
}
if(config.getAttribute("itemno").getString().equals("feetype12")){//<2F><>ĩ<EFBFBD><C4A9>ֵ
fundCol.remove(config.getAttribute("itemno").getString());
map.remove(config.getAttribute("itemno").getString());
}
}
for(BizObject fund:funds){
map.put(fund.getAttribute("FEE_TYPE").getString(), map.get(fund.getAttribute("FEE_TYPE").getString()).add(new BigDecimal(fund.getAttribute("PLAN_MONEY").getString())));
}
if(map.get("feetype2").compareTo(map.get("feetype16").add(map.get("feetype17")))!=0){
return "<EFBFBD><EFBFBD>֤<EFBFBD>𲻵<EFBFBD><EFBFBD>ڱ<EFBFBD>֤<EFBFBD><EFBFBD><EFBFBD>ֿۼӱ<EFBFBD>֤<EFBFBD><EFBFBD><EFBFBD>˻<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
}
Map<String,String> fundColMoney=new HashMap<String, String>();
for(String key:map.keySet()){
fundColMoney.put(fundCol.get(key), map.get(key).toString());
}
Map<String,Map<String,String>> fundmap=ProductParamUtil.getProductComponentType(productId, "PRD0315");
Map<String,String> fundColMoneyRatio=new HashMap<String, String>();
fundColMoneyRatio.putAll(fundColMoney);
for(Map.Entry<String,String> entry:fundColMoney.entrySet()){
String key=entry.getKey();
if(fundmap.containsKey(key)&&!key.equals("EQUIP_AMT")){
String q= StringUtil.nullToString(fundmap.get(key).get("CostType07"));
if(q.equals("EquipAmt")){
fundColMoneyRatio.put(key+"_RATIO",new BigDecimal(fundColMoney.get(key)).multiply(new BigDecimal(100)).divide(new BigDecimal(condition.getAttribute("EQUIP_AMT").getString()),6,BigDecimal.ROUND_HALF_UP).toString() );
}else if(q.equals("EquipEndAmt")){
fundColMoneyRatio.put(key+"_RATIO",new BigDecimal(fundColMoney.get(key)).multiply(new BigDecimal(100)).divide(new BigDecimal(condition.getAttribute("CLEAN_LEASE_MONEY").getString()),6,BigDecimal.ROUND_HALF_UP).toString() );
}
}
}
condition.setAttributesValue(fundColMoneyRatio);
bm.saveObject(condition);
return "true";
}
/**
* <20><><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD>
* @return
* @throws Exception
*/
@Override
public String updateCashFlow() throws Exception {
JSONObject jsonObject = JSONObject.createObject();
JBOTransaction tx=null;
try {
tx=JBOFactory.createJBOTransaction();
BizObject flow=JBOFactory.createBizObjectQuery(FLOW_BUSSINESS_OBJECT.CLASS_NAME,"flow_unid=:flowunid").setParameter("flowunid", this.flowunid).getSingleResult(false);
String productId;
if(flow!=null){
productId=flow.getAttribute("productId").getString();
}else{
productId=this.productId;
}
TabCalBean tcb = TbBeanTools.getTabInfo(calType, flowunid,plannumber,productId);
RentPlanContrCalDAOImpl rpccdi = new RentPlanContrCalDAOImpl();
FundRentPlanBean frpb = rpccdi.getRentAndDateByTcb(tcb, 1,tx);
this.createCashFlow(tcb,tx);
jsonObject.appendElement("result", "true");
jsonObject.appendElement("IRR",tcb.getCb().getIrr());
this.callBack(jsonObject, tcb.getCb(), tcb,frpb,false,tx);
} catch (Exception e) {
tx.rollback();
jsonObject.appendElement("result", "false");
}finally{
if(tx!=null){
tx.commit();
}
}
return JSONEncoder.encode(jsonObject);
}
/**
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param fileName
* @param sourceFile
* @param sourceMap
* @return
* @throws Exception
*/
public String importRentOrCorpusTable(String fileName, InputStream sourceFile,Map<String,String>sourceMap) throws Exception{
TabCalBean tcb=TbBeanTools.getTabInfo(sourceMap.get("calType"));
String suffix = fileName.substring(fileName.lastIndexOf(".")+1);
ExcelVersionEnum type;
if(suffix.equalsIgnoreCase("xlsx")){
type = ExcelVersionEnum.VERSION2007;
}else{
type = ExcelVersionEnum.VERSION2003;
}
List<Map<String, String>> result = ExcelReader.readExcelDatas(sourceFile,type);
List<KnowingTableBean> tableBeans = new ArrayList<KnowingTableBean>();
for(int i = 0 ; i < result.size() ; i++ ){
Map<String, String>tableBean = result.get(i);
for(Map.Entry<String,String> entry:tableBean.entrySet()){
if(entry.getKey().equals("plandate")){
SimpleDateFormat sdf=new SimpleDateFormat("yyyy<EFBFBD><EFBFBD>MM<EFBFBD><EFBFBD>dd<EFBFBD><EFBFBD>");
Date date=sdf.parse(tableBean.get(entry.getKey()));
tableBean.put(entry.getKey(), DateUtil.getSystemTimeByFormat(date, "yyyy/MM/dd"));
}
}
Map<String, Object> map = new HashMap<String, Object>();
map.putAll(tableBean);
KnowingTableBean table = ObjectConvertUtils.convertMapToBean(KnowingTableBean.class, map);
KnowingTableBean.checkKnowingTableBean(table, i);
tableBeans.add(table);
}
//<2F><>У<EFBFBD><EFBFBD><E9B1BE>֮<EFBFBD><D6AE><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD>
BigDecimal moneyTotal = BigDecimal.ZERO;
Date upperDate=null;
for(KnowingTableBean tablePlan : tableBeans){
moneyTotal = moneyTotal.add(new BigDecimal(tablePlan.getPlanMoney()));
if(upperDate!=null&&DateUtil.getIntervalDays(DateUtil.getTimeByFormat(tablePlan.getPlandate(), "yyyy/MM/dd"), upperDate)>0){
throw new BusinessException("<EFBFBD>ϴ<EFBFBD>Excel<EFBFBD>е<EFBFBD>"+tablePlan.getPalnList()+"<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD>һ<EFBFBD>ڣ<EFBFBD><DAA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
}else{
upperDate=DateUtil.getTimeByFormat(tablePlan.getPlandate(), "yyyy/MM/dd");
}
}
String cleanLeaseMoney=sourceMap.get("CLEAN_LEASE_MONEY");
String rentOrRate=sourceMap.get("RENT_OR_RATE");
if(rentOrRate.equals("rent_period")&&moneyTotal.compareTo(new BigDecimal(cleanLeaseMoney))<=0){
throw new BusinessException("<EFBFBD>ϴ<EFBFBD>Excel<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֮<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD><EFBFBD><EFBFBD>ٽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD><EFBFBD><EFBFBD>");
}else if(rentOrRate.equals("corpus_period")&&moneyTotal.compareTo(new BigDecimal(cleanLeaseMoney).subtract(new BigDecimal(sourceMap.get("EQUIP_END_VALUE"))))!=0){
throw new BusinessException("<EFBFBD>ϴ<EFBFBD>Excel<EFBFBD>еı<EFBFBD><EFBFBD><EFBFBD>֮<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD><EFBFBD><EFBFBD>ٽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD><EFBFBD><EFBFBD>");
}
BizObjectManager bm=JBOFactory.getBizObjectManager(tcb.getPeriodTb());
bm.createQuery("delete from O where flowunid=:flowunid and "+sourceMap.get("planCName")+"=:plannumber").setParameter("flowunid", sourceMap.get("flowunid")).setParameter("plannumber", sourceMap.get("plannumber")).executeUpdate();
JSONObject json=JSONObject.createObject();
json.appendElement("firstplan","");
json.appendElement("second","");
for(KnowingTableBean tablePlan : tableBeans){
BizObject bo=bm.newObject();
bo.setAttributeValue("PLAN_LIST", tablePlan.getPalnList());
bo.setAttributeValue("PLAN_DATE", tablePlan.getPlandate());
bo.setAttributeValue("PLAN_MONEY", tablePlan.getPlanMoney());
bo.setAttributeValue("flowunid", sourceMap.get("flowunid"));
bo.setAttributeValue(sourceMap.get("planCName"),sourceMap.get("plannumber"));
bm.saveObject(bo);
if(tablePlan.getPalnList().equals("1")){
json.appendElement("firstplan", tablePlan.getPlandate());
}else if(tablePlan.getPalnList().equals("2")){
json.appendElement("second", tablePlan.getPlandate());
}
}
json.appendElement("index", tableBeans.size());
return JSONEncoder.encode(json);
}
/**
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƻ<EFBFBD>
* */
@Override
public int importRentPlan(String fileName, InputStream sourceFile,Map<String,String>sourceMap) throws Exception {
JBOTransaction tx=null;
JSONObject jsonObject = JSONObject.createObject();
try{
tx=JBOFactory.createJBOTransaction();
this.flowunid = sourceMap.get("flowunid");
this.plannumber=sourceMap.get("plannumber");
this.calType=sourceMap.get("calType");
TabCalBean bean = TbBeanTools.getTabInfo(calType, flowunid,plannumber,productId);
IrregularRentCalExecutor exe = new IrregularRentCalExecutor(tx);
List<FundRentPlanIrr> irrPlans = exe.preCreate(fileName, sourceFile, bean);
FundRentPlanBean rentPlan = exe.create(bean, 1, irrPlans);
bean.getCb().setFirstPlanDate(rentPlan.getPlanDateList().get(0));
if(rentPlan.getPlanDateList().size()>1){//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴε<DAB4><CEB5><EFBFBD>1<EFBFBD><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD>õڶ<C3B5><DAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֧<EFBFBD><D6A7><EFBFBD><EFBFBD>
bean.getCb().setSecondPlanDate(rentPlan.getPlanDateList().get(1));
}
bean.setProductType("business_product");
bean.getCb().setProductType("business_product");
this.createFundPlan(rentPlan, bean,tx);
this.createCashFlow(bean,tx);
jsonObject.appendElement("result", "true");
bean.getCb().setIncomeNumber(rentPlan.getRentList().size());
this.callBack(jsonObject, bean.getCb(), bean,rentPlan,false,tx);
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
return irrPlans.size();
}catch(BusinessException e){
tx.rollback();
throw e;
}catch(Exception e){
tx.rollback();
return 0;
}finally{
if(tx!=null){
tx.commit();
}
}
}
/**
* <20><><EFBFBD><EFBFBD><EFBFBD>ƻ<EFBFBD><C6BB><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD>ǰ<EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD><EFBFBD><EFBFBD>ֵ˰
* @param tx
* @return
* @throws Exception
*/
public String updateRentTax() throws Exception{
BizObjectManager bm=JBOFactory.getBizObjectManager(LC_RENT_PLAN_TEMP.CLASS_NAME);
@SuppressWarnings("unchecked")
List<BizObject> rentplans=bm.createQuery("select * from O where flowunid=:flowunid and payment_number=:payment_number order by plan_list")
.setParameter("flowunid",this.flowunid).setParameter("payment_number",this.plannumber).getResultList(true);
//<2F><>ȡ˰<C8A1><CBB0>
/*BizObject projOrCont=JBOFactory.createBizObjectQuery(LB_CONTRACT_INFO_TEMP.CLASS_NAME,"flowunid=:flowunid").setParameter("flowunid",this.flowunid).getSingleResult(false);
String lesae="02";//<2F><><EFBFBD><EFBFBD>
if(projOrCont!=null&&projOrCont.getAttribute("LEAS_FORM").getString().length()>0){
lesae=projOrCont.getAttribute("LEAS_FORM").getString();
}
BizObject flow=JBOFactory.createBizObjectQuery(FLOW_BUSSINESS_OBJECT.CLASS_NAME,"flow_unid=:flowunid").setParameter("flowunid", flowunid).getSingleResult(false);
String productId=flow.getAttribute("productId").getString();
Map<String, List<Map<String, String>>> map=ProductParamUtil.getProductComponentDecisionTable(productId, "PRD0340","LeasForm","TaxRate");
BigDecimal rate=BigDecimal.ONE;
for(int i=0;i<map.get("CalcRate").size();i++){
if(map.get("CalcRate").get(i).get("LeasForm").equals(lesae)){
rate=new BigDecimal(map.get("CalcRate").get(i).get("TaxRate")).add(rate);
}
}*/
BizObject condition=JBOFactory.createBizObjectQuery(LC_CALC_CONDITION_TEMP.CLASS_NAME,"flowunid=:flowunid").setParameter("flowunid", this.flowunid).getSingleResult(false);
BigDecimal cleanmoney=new BigDecimal(condition.getAttribute("CLEAN_LEASE_MONEY").getString());
for(BizObject rent:rentplans){
cleanmoney= cleanmoney.subtract(new BigDecimal(rent.getAttribute(LC_RENT_PLAN_TEMP.CORPUS).getString()));
rent.setAttributeValue("ALL_REMAIN_CORPUS", cleanmoney.toString());
/*if(lesae.equals("01")){//ֱ<><D6B1>
rent.setAttributeValue("tax",new BigDecimal(rent.getAttribute("rent").getString()).subtract(new BigDecimal(rent.getAttribute("rent").getString()).divide(rate, 2,BigDecimal.ROUND_HALF_UP)));
rent.setAttributeValue("tax_free_corpus",new BigDecimal(rent.getAttribute("corpus").getString()).divide(rate, 2,BigDecimal.ROUND_HALF_UP));
rent.setAttributeValue("tax_free_interest",rent.getAttribute("rent").getDouble()-rent.getAttribute("tax").getDouble()-rent.getAttribute("tax_free_corpus").getDouble());
}else{
rent.setAttributeValue("tax",new BigDecimal(rent.getAttribute("interest").getString()).subtract(new BigDecimal(rent.getAttribute("interest").getString()).divide(rate, 2,BigDecimal.ROUND_HALF_UP)));
rent.setAttributeValue("tax_free_corpus",rent.getAttribute("corpus"));
rent.setAttributeValue("tax_free_interest",rent.getAttribute("rent").getDouble()-rent.getAttribute("tax").getDouble()-rent.getAttribute("tax_free_corpus").getDouble());
}*/
bm.saveObject(rent);
}
return "true";
}
/**
* <20><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @return
*/
public String copyLCEbankTemp(JBOTransaction tx) throws Exception {
Map<String,String> fromCondtion = new HashMap<String, String>();
fromCondtion.put("id",contractId);
Map<String,String> otherProperty = new HashMap<String,String>();
otherProperty.put("FlowUnid", flowunid);
otherProperty.put("HAD_MONEY", "0.00");
// otherProperty.put("ID", id);
LeaseFlowBaseService service=new LeaseFlowBaseServiceImp();
service.copyEbankInfo(tx, fromCondtion, null,otherProperty, ServiceOperatorEnum.FormalToTemp);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
Map<String,String> fromCondtion1 = new HashMap<String, String>();
fromCondtion1.put("id",contractId);
fromCondtion1.put("userID",userID);
fromCondtion1.put("orgID",orgID);
Map<String,String> otherProperty1 = new HashMap<String,String>();
otherProperty1.put("FlowUnid", flowunid);
otherProperty1.put("flow_name", flow_name);
LeaseFlowBaseService service1=new LeaseFlowBaseServiceImp();
service1.copyEbankInfoToProcess(tx, fromCondtion1, null,otherProperty1, ServiceOperatorEnum.FormalToTemp);
String sMessage="true";
return "";
}
/**
* ɾ<><C9BE><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̱<EFBFBD>
* @param tx
* @return
* @throws Exception
*/
public String deleteLCEbankTemp(JBOTransaction tx) throws Exception {
BizObjectManager leManage = JBOFactory.getBizObjectManager(LC_EBANK.CLASS_NAME, tx);
BizObject le = leManage.createQuery("EBANK_SN=:EBANK_SN").setParameter("EBANK_SN", ebanknumber).getSingleResult(false);
BizObjectManager lepManage = JBOFactory.getBizObjectManager(LC_EBANK_PROCESS.CLASS_NAME, tx);
lepManage.createQuery("delete from O where flowunid=:flowunid and EBANK_NUMBER=:ebanknumber").setParameter("flowunid", flowunid).setParameter("ebanknumber", le.getAttribute("ID").getString()).executeUpdate();
return "true";
}
//<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>LC_EBANK_TEMP<4D><50>
public String updateEbank(JBOTransaction tx)throws Exception{
BizObjectManager letManage = JBOFactory.getBizObjectManager(LC_EBANK_TEMP.CLASS_NAME, tx);
List<BizObject> lets = letManage.createQuery(" flowunid=:flowunid ").setParameter("flowunid",flowunid).getResultList(true);
Double advanceMoney = new Double(cleanLeasemoney);
for (BizObject let : lets) {
Double mayopeMoney = new Double(let.getAttribute("MAYOPE_MONEY").getString());
if(mayopeMoney>=advanceMoney){
let.setAttributeValue("HAD_MONEY", advanceMoney);
let.setAttributeValue("MAYOPE_MONEY", mayopeMoney-advanceMoney);
letManage.saveObject(let);
break;
}else{
let.setAttributeValue("HAD_MONEY", mayopeMoney);
advanceMoney = advanceMoney-mayopeMoney;
let.setAttributeValue("MAYOPE_MONEY", 0);
letManage.saveObject(let);
}
}
tx.commit();
return "Success";
}
//<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>LC_EBANK_TEMP<4D><50>
public String deleteEbank(JBOTransaction tx)throws Exception{
BizObjectManager letManage = JBOFactory.getBizObjectManager(LC_EBANK_TEMP.CLASS_NAME, tx);
List<BizObject> lets = letManage.createQuery(" flowunid=:flowunid ").setParameter("flowunid",flowunid).getResultList(true);
for (BizObject let : lets) {
Double mayopeMoney = new Double(let.getAttribute("MAYOPE_MONEY").getString());
Double hadMoney = new Double(let.getAttribute("HAD_MONEY").getString());
let.setAttributeValue("HAD_MONEY", 0);
let.setAttributeValue("MAYOPE_MONEY", mayopeMoney+hadMoney);
letManage.saveObject(let);
}
tx.commit();
return "Success";
}
//У<><D0A3><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>Ƿ񳬶<C7B7>
public String checkMoney()throws Exception{
BigDecimal sumMoney = new BigDecimal("0") ;
BizObjectManager letManage = JBOFactory.getBizObjectManager(LB_EQUIPMENT_TEMP.CLASS_NAME);
List<BizObject> letms = letManage.createQuery("flowunid=:flowunid").setParameter("flowunid", this.flowunid).getResultList(false);
for(BizObject letm:letms){
sumMoney = new BigDecimal(letm.getAttribute("EQUIP_PRICE").getString()).add(sumMoney);
}
sumMoney = sumMoney.setScale(2, BigDecimal.ROUND_HALF_UP);
return sumMoney.toString();
}
public String getCalType() {
return calType;
}
public void setCalType(String calType) {
this.calType = calType;
}
public String getFlowunid() {
return flowunid;
}
public void setFlowunid(String flowunid) {
this.flowunid = flowunid;
}
public String getRentOrRate() {
return rentOrRate;
}
public void setRentOrRate(String rentOrRate) {
this.rentOrRate = rentOrRate;
}
public String getCleanLeasemoney() {
return cleanLeasemoney;
}
public void setCleanLeasemoney(String cleanLeasemoney) {
this.cleanLeasemoney = cleanLeasemoney;
}
public String getEquipEndValue() {
return equipEndValue;
}
public void setEquipEndValue(String equipEndValue) {
this.equipEndValue = equipEndValue;
}
public String getContractId() {
return contractId;
}
public void setContractId(String contractId) {
this.contractId = contractId;
}
public String getPaydayAdjust() {
return paydayAdjust;
}
public void setPaydayAdjust(String paydayAdjust) {
this.paydayAdjust = paydayAdjust;
}
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 getPlanCName() {
return planCName;
}
public void setPlanCName(String planCName) {
this.planCName = planCName;
}
public String getUserID() {
return userID;
}
public void setUserID(String userID) {
this.userID = userID;
}
public String getOrgID() {
return orgID;
}
public void setOrgID(String orgID) {
this.orgID = orgID;
}
public String getFlow_name() {
return flow_name;
}
public void setFlow_name(String flow_name) {
this.flow_name = flow_name;
}
public String getEbanknumber() {
return ebanknumber;
}
public void setEbanknumber(String ebanknumber) {
this.ebanknumber = ebanknumber;
}
public String getProjectId() {
return projectId;
}
public void setProjectId(String projectId) {
this.projectId = projectId;
}
}