apzl_leasing/calc/com/tenwa/reckon/product/ProductCondition.java
zhangbb d6ea10a743 1.修改租金测算页面。
2.整理产品配置。
2018-06-30 19:28:49 +08:00

455 lines
16 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.product;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Vector;
import jbo.sys.CODE_LIBRARY;
import com.amarsoft.app.awe.config.InitDBType;
import com.amarsoft.app.util.ProductParamUtil;
import com.amarsoft.are.jbo.BizObject;
import com.amarsoft.are.jbo.JBOFactory;
import com.amarsoft.awe.dw.ASObjectModel;
import com.amarsoft.awe.dw.ui.validator.ValidateRule;
import com.tenwa.officetempalte.util.FileOperatorUtil;
import com.tenwa.quartz.StringUtil;
public class ProductCondition {
public ProductConditionService prodSer=new ProductConditionService();
/**
* 获取测算相关产品配置信息
* @param doTemp
* @param productId
* @return
* @throws Exception
*/
public String getProductRules(ASObjectModel doTemp,String productId,Vector<ValidateRule> vali) throws Exception{
StringBuilder sb=new StringBuilder();
sb.append("{");
sb.append("'fund':"+getProductFundRules(doTemp, productId,vali));//资金配置项
sb.append(",'grace':"+this.getProductGraceRules(doTemp, productId, vali));//宽限期
sb.append(",'method':"+this.getProductSettleRules(doTemp, productId));//计算方式
sb.append("}");
setRentOrRate(doTemp, productId);//租金推算方法
this.getOtherRule(doTemp, productId);//其它配置
this.getProductPenaRules(doTemp, productId);//罚息
this.getProductAdjustRules(doTemp, productId);//调息
this.getGrossRules(doTemp, productId);//
//this.setDateRule(doTemp, productId);//日期
this.getCautionRatio(doTemp, productId);//保证金比例
return sb.toString();
}
/**
* 设置日期
* @param doTemp
* @param productId
* @throws Exception
*/
public void setDateRule(ASObjectModel doTemp,String productId) throws Exception{
Map<String,Map<String,String>> map=ProductParamUtil.getProductComponentType(productId, "PRD0340");
if(map.containsKey("PaymentDate")){//还款日
Map<String,String> plandatemap=map.get("PaymentDate");
if(plandatemap.containsKey("HolidayAdjust")){
doTemp.setDefaultValue("PLAN_DATE_HOILDAY", plandatemap.get("HolidayAdjust"));
}else{
doTemp.setDefaultValue("PLAN_DATE_HOILDAY", "unchanged");
}
if(plandatemap.containsKey("date_proc")){
String s=plandatemap.get("date_proc");
if(s.indexOf("1")>=0){
doTemp.setColumnAttribute("FIRST_PLAN_DATE", "colvisible", "1");
doTemp.setColumnAttribute("FIRST_PLAN_DATE", "colrequired", "1");
}
if(s.indexOf("2")>=0){
doTemp.setColumnAttribute("LAST_PLAN_DATE", "colvisible", "1");
doTemp.setColumnAttribute("LAST_PLAN_DATE", "colrequired", "1");
}
if(s.indexOf("3")>=0){
doTemp.setColumnAttribute("PLAN_DATE_HOILDAY", "colvisible", "1");
doTemp.setColumnAttribute("PLAN_DATE_HOILDAY", "colrequired", "1");
}
}
}
if(map.containsKey("InterestDate")){//计息日
Map<String,String> plandatemap=map.get("InterestDate");
if(plandatemap.containsKey("HolidayAdjust")){
doTemp.setDefaultValue("INTEREST_DATE_HOLIDAY", plandatemap.get("HolidayAdjust"));
}else{
doTemp.setDefaultValue("INTEREST_DATE_HOLIDAY", "unchanged");
}
if(plandatemap.containsKey("date_proc")){
String s=plandatemap.get("date_proc");
if(s.indexOf("1")>=0){
doTemp.setColumnAttribute("FIRST_INTEREST_DATE", "colvisible", "1");
doTemp.setColumnAttribute("FIRST_INTEREST_DATE", "colrequired", "1");
}
if(s.indexOf("2")>=0){
doTemp.setColumnAttribute("LAST_INTEREST_DATA", "colvisible", "1");
doTemp.setColumnAttribute("LAST_INTEREST_DATA", "colrequired", "1");
}
if(s.indexOf("3")>=0){
doTemp.setColumnAttribute("INTEREST_DATE_HOLIDAY", "colvisible", "1");
doTemp.setColumnAttribute("INTEREST_DATE_HOLIDAY", "colrequired", "1");
}
}
}
if(map.containsKey("RateInfo")){
doTemp.setDefaultValue("RATE", map.get("RateInfo").get("RATE"));
doTemp.setDefaultValue("ADDITIONAL_RATE", map.get("RateInfo").get("AdditionalRate"));
}
}
/**
* 项目粗利 净融资额 期初付款总计 是否显示
* @param doTemp
* @param productId
* @throws Exception
*/
public void getGrossRules(ASObjectModel doTemp,String productId) throws Exception{
Map<String,Map<String,String>> map=ProductParamUtil.getProductComponentType(productId, "PRD0330");
if(!map.containsKey("GrossProfit")){
doTemp.setVisible("GROSS_PROFIT",false);
}
if(!map.containsKey("CleanCreditMoney")){
doTemp.setVisible("CLEAN_CREDIT_MONEY",false);
doTemp.setVisible("CLEAN_CREDIT_RATIO",false);
}
if(!map.containsKey("PeriodBeginPayMoney")){
doTemp.setVisible("FIRST_PAYMENT_TOTAL",false);
}
}
/**
* 设置租金推算方法 下拉选项
* @param doTemp
* @param productId
* @throws Exception
*/
public void setRentOrRate(ASObjectModel doTemp,String productId) throws Exception{
Map<String,Map<String,String>> map=ProductParamUtil.getProductComponentType(productId, "PRD0310");
if(map.containsKey("ROR01")){
if(map.get("ROR01").get("RentOrRate").length()>0){
String[] rule=map.get("ROR01").get("RentOrRate").split(",");
String s="";
for(int i=0;i<rule.length;i++){
if(s.length()>0){s+=",";}
s+="'"+rule[i]+"'";
}
doTemp.setColumnAttribute("RENT_OR_RATE","coleditsource","jbo.sys.CODE_LIBRARY,itemno,itemname,codeno='rent_or_rate' and itemno in ("+s+") order by sortno");
}
}
}
/**
* 获取产品配置的资金项
* @param productId
* @return
* @throws Exception
*/
@SuppressWarnings("unchecked")
public String getProductFundList(String productId) throws Exception{
Map<String,Map<String,String>> map=ProductParamUtil.getProductComponentType(productId, "PRD0315");
String sql="codeno='FeeType' and relativecode is not null and relativecode<>''";
if(InitDBType.DBTYPE.equals("ORACLE")){
sql="codeno='FeeType' and relativecode is not null";
}
List<BizObject> feeList=JBOFactory.createBizObjectQuery(CODE_LIBRARY.CLASS_NAME,sql).getResultList(false);
String list="";
for(BizObject fee:feeList){
if(map.containsKey(fee.getAttribute("relativecode").getString())){
if(list.length()>0){list+=",";}
if("feetype10".equals(fee.getAttribute("itemno").getString())){
continue;
}
list+=fee.getAttribute("itemno").getString();
if(fee.getAttribute("itemno").getString().equals("feetype2")){
list+=",feetype16,feetype17";
}
}
}
return list;
}
/**
* 获取产品 资金类型 配置 显示页面
* @param doTemp
* @param productId
* @return
* @throws Exception
*/
@SuppressWarnings("unchecked")
public String getProductFundRules(ASObjectModel doTemp,String productId,Vector<ValidateRule> vali) throws Exception{
StringBuilder sb=new StringBuilder();
sb.append("{");
//获取产品资金项
Map<String,Map<String,String>> map=ProductParamUtil.getProductComponentType(productId, "PRD0315");
//获取需要和产品关联的资金项
String sql="";
// if("MYSQL".equals(InitDBType.DBTYPE)){
sql="codeno='FeeType' and relativecode is not null and relativecode<>''";
// }else if("ORACLE".equals(InitDBType.DBTYPE)){
// sql="codeno='FeeType' and relativecode is not null";
//}
List<BizObject> feeList=JBOFactory.createBizObjectQuery(CODE_LIBRARY.CLASS_NAME,sql).getResultList(false);
String rule="";
for(BizObject fee:feeList){
rule="";
String col=fee.getAttribute("relativecode").getString();//费用项在表中的字段
String colName=fee.getAttribute("itemname").getString();//费用名称
String isFina=fee.getAttribute("attribute2").getString();//是否参与融资
String fina = ProductParamUtil.getProductParameterValue(productId, "PRD0315",col,"FINAN");
if("Y".equals(fina)){
fina = "finatype02";
}else if("N".equals(fina)){
fina = "finatype01";
}
if(fee.getAttribute("itemno").getString().equals("feetype10")){
rule=prodSer.getEquipRule(doTemp, map,col,vali);
}else{
if(map.containsKey(col)){//产品配置了该费用项
rule=prodSer.getFeeRule(doTemp, map, col,colName,vali);
doTemp.setDefaultValue(col+"_FINA",fina);
/*if("FINA".equals(isFina)){
doTemp.setRequired(col, true);
doTemp.setRequired(col+"_"+isFina, true);
}*/
}else{
if("FINA".equals(isFina)){
doTemp.setVisible(col+"_"+isFina, false);
}
doTemp.setVisible(col, false);
if(fee.getAttribute("itemno").getString().equals("feetype2")){
doTemp.setVisible("CAUTION_DEDUCTION_MONEY", false);
doTemp.setVisible("CAUTION_MONEY_REMAIN", false);
}
rule=null;
}
}
if(rule!=null){
if(sb.length()>1){sb.append(",");}
sb.append("'"+col+"':"+rule+"");
}
}
for(String key:map.keySet()){
if(key.toUpperCase().indexOf("FEETYPE")>=0){
rule=prodSer.getFeeRule(doTemp, map, key,map.get(key).get("colheader"),vali);
if(sb.length()>1){sb.append(",");}
sb.append("'"+key.toUpperCase()+"':"+rule+"");
}
}
sb.append("}");
return sb.toString();
}
/**
* 宽限期最大值
* @param doTemp
* @param flowunid
* @return
* @throws Exception
*/
public String getProductGraceRules(ASObjectModel doTemp,String productId,Vector<ValidateRule> vali) throws Exception{
Map<String,String> rule=new HashMap<String, String>();
//获取产品其它
Map<String,Map<String,String>> map=ProductParamUtil.getProductComponentType(productId, "PRD0311");
if(map.isEmpty()){
doTemp.setColumnAttribute("GRACE", "colvisible", "0");
}else if(map.containsKey("LT01")&&map.get("LT01").containsKey("isleaseterm")&&"N".equals(map.get("LT01").get("isleaseterm"))){
doTemp.setColumnAttribute("GRACE", "colvisible", "0");
}else{
if(map.containsKey("LT01")){
String max=StringUtil.nullToString(map.get("LT01").get("leaseterm-MAX"));
if(max.length()>0){
rule.put("max",max);
String vaildat=this.prodSer.getValidat(max,"宽限期最大"+max+"","<=");
this.prodSer.setColValidat(vali,"GRACE", vaildat);
}
}
}
return FileOperatorUtil.getMapToJsonStr(rule);
}
/**
* 设置 第一期还款计划 第二期还款计划 期末余值 是否显示
* @param doTemp
* @param productId
* @throws Exception
*/
public void getOtherRule(ASObjectModel doTemp,String productId) throws Exception{
String[] param={"EQUIP_END_VALUE"};
//获取产品其它
Map<String,Map<String,String>> map=ProductParamUtil.getProductComponentType(productId, "PRD0311");
for(int i=0;i<param.length;i++){
if(map.containsKey(param[i])){
doTemp.setColumnAttribute(param[i], "colvisible", "1");
doTemp.setColumnAttribute(param[i], "colrequired", "1");
}
}
}
/**
* 设置免罚息天数 罚息日利率 默认值
* @param doTemp
* @param flowunid
* @return
* @throws Exception
*/
public void getProductPenaRules(ASObjectModel doTemp,String productId) throws Exception{
Map<String,Map<String,String>> map=ProductParamUtil.getProductComponentType(productId, "PRD0308");
if(map.containsKey("PFD01")){//免罚息天数
String day=map.get("PFD01").get("PenaltyFreeDays");
if(day.length()>0){
doTemp.setDefaultValue("FREE_DEFA_INTER_DAY", day);
}
if("N".equals(map.get("PFD01").get("AllowModify"))){
doTemp.setColumnAttribute("FREE_DEFA_INTER_DAY","colreadonly", "1");
}
}
if(map.containsKey("PENALTY_RATE_DAY")){//罚息日利率
String rate=map.get("PENALTY_RATE_DAY").get("PENALTY_RATE_DAY");
if(rate.length()>0){
doTemp.setDefaultValue("PENA_RATE", rate);
}
if("N".equals(map.get("PENALTY_RATE_DAY").get("AllowModify"))){
doTemp.setColumnAttribute("PENA_RATE","colreadonly", "1");
}
}
}
/**
* 设置调息规则
* @param doTemp
* @param productId
* @throws Exception
*/
public void getProductAdjustRules(ASObjectModel doTemp,String productId) throws Exception{
Map<String,Map<String,String>> map=ProductParamUtil.getProductComponentType(productId, "PRD0320");
if(map.containsKey("ADJUST_INTEREST")){
Map<String,String> rule=map.get("ADJUST_INTEREST");
if("N".equals(rule.get("ISADJUST_INTEREST"))){
doTemp.setColumnAttribute("ADJUST_STYLE","colvisible", "0");
doTemp.setColumnAttribute("ADJUST_TYPE","colvisible", "0");
}else if("Y".equals(rule.get("ISADJUST_INTEREST"))){
doTemp.setColumnAttribute("ADJUST_STYLE","colvisible", "1");
doTemp.setColumnAttribute("ADJUST_TYPE","colvisible", "1");
//调息生效节点
doTemp.setColumnAttribute("ADJUST_STYLE","coleditsource","jbo.sys.CODE_LIBRARY,itemno,itemname,codeno='adjust_style' and itemno in ("+this.getSqlWhere(rule.get("adjust_style"))+") order by sortno");
//调息方式
doTemp.setColumnAttribute("ADJUST_TYPE","coleditsource","jbo.sys.CODE_LIBRARY,itemno,itemname,codeno='adjust_type' and itemno in ("+this.getSqlWhere(rule.get("rate_float_type"))+") order by sortno");
}
}
}
/**
* 设置计算方式
* @param doTemp
* @param productId
* @return
* @throws Exception
*/
public String getProductSettleRules(ASObjectModel doTemp,String productId) throws Exception{
//租金计算方式
Map<String,Map<String,String>> map=ProductParamUtil.getProductComponentType(productId, "PRD0301");
//分段
Map<String,Map<String,String>> submap=ProductParamUtil.getProductComponentType(productId, "PRD0321");
String s="";
String sJson="";
for(Map.Entry<String,Map<String,String>> entry:map.entrySet()){
if(s.length()>0)s+=",";
s+="'"+entry.getKey()+"'";
if(sJson.length()>0)sJson+=",";
sJson+="'"+entry.getKey()+"':"+FileOperatorUtil.getMapToJsonStr(entry.getValue());
if(entry.getKey().equals( doTemp.getColumnAttribute("SETTLE_METHOD", "coldefaultvalue"))){
Map<String,String> values=entry.getValue();
if(values.containsKey("HolidayAdjust")){
doTemp.setDefaultValue("PLAN_DATE_HOILDAY", values.get("HolidayAdjust"));
}
if(values.containsKey("InterestHolidayAdjust")){
doTemp.setDefaultValue("INTEREST_DATE_HOLIDAY", values.get("InterestHolidayAdjust"));
}
if(values.containsKey("RATE")){
doTemp.setDefaultValue("RATE", values.get("RATE"));
}
if(values.containsKey("AdditionalRate")){
doTemp.setDefaultValue("ADDITIONAL_RATE", values.get("AdditionalRate"));
}
if(values.containsKey("InterestDayType")){
doTemp.setDefaultValue("INTEREST_DAY_TYPE", values.get("InterestDayType"));
}
}
}
if(submap.containsKey("ISSUBSECTION")){
if(s.length()>0)s+=",";
s+="'even_subsection'";
}
doTemp.setColumnAttribute("SETTLE_METHOD","coleditsource","jbo.sys.CODE_LIBRARY,itemno,itemname,codeno='settle_method' and itemno in ("+s+") order by sortno");
return "{"+sJson+"}";
}
/**
* 获取产品 资金类型 配置 添加列
* @param doTemp
* @param productId
* @return
* @throws Exception
*/
@SuppressWarnings("unchecked")
public void getProductFundRules(ASObjectModel doTemp,String productId) throws Exception{
//获取产品资金项
Map<String,Map<String,String>> map=ProductParamUtil.getProductComponentType(productId, "PRD0315");
for(String key:map.keySet()){
if(!("EQUIP_AMT".equals(key)||"FIRST_PAYMENT".equals(key))){//设备款和首付款不管
if("feetype_test".equals(key)){//测试费用
doTemp.Columns.add(this.prodSer.createFeeCol(key, map.get(key)));
doTemp.Columns.add(this.prodSer.createFeeColRatio(key, map.get(key)));
}
}
}
}
public String getSqlWhere(String condition){
String[] conds=condition.split(",");
String s="";
for(int i=0;i<conds.length;i++){
if(s.length()>0)s+=",";
s+="'"+conds[i]+"'";
}
return s;
}
public void getCautionRatio(ASObjectModel doTemp,String productId) throws Exception{
String caution_money = ProductParamUtil.getProductParameterValue(productId, "PRD0315","CAUTION_MONEY","CostType09");
String handle_charge_money = ProductParamUtil.getProductParameterValue(productId, "PRD0315","HANDLING_CHARGE_MONEY","CostType09");
String INCOME_NUMBER = ProductParamUtil.getProductParameterValue(productId, "PRD0350","product_rate","INCOME_NUMBER");
String CAR_FIRST_PAYMENT_RATIO = ProductParamUtil.getProductParameterValue(productId, "PRD0315","FIRST_PAYMENT","CostType09");
doTemp.setDefaultValue("CAUTION_MONEY_RATIO",caution_money);
doTemp.setDefaultValue("HANDLING_CHARGE_MONEY_RATIO",handle_charge_money);
doTemp.setDefaultValue("INCOME_NUMBER",INCOME_NUMBER);
doTemp.setDefaultValue("CAR_FIRST_PAYMENT_RATIO",CAR_FIRST_PAYMENT_RATIO);
String ProductType = ProductParamUtil.getProductParameterValue(productId, "PRD0350","product_rate","ProductType");
String isReadOnly = ProductParamUtil.getProductParameterValue(productId, "PRD0350","product_rate","ProductRateReadOnly");
String YEAR_RATE = ProductParamUtil.getProductParameterValue(productId, "PRD0350","product_rate","ProductRate");
//利率为0费率为1
if("1".equals(ProductType)){
doTemp.setColumnAttribute("YEAR_RATE","colheader","测算费率");
}
if("Y".equals(isReadOnly)){
doTemp.setColumnAttribute("YEAR_RATE","colreadyonly","1");
}
doTemp.setDefaultValue("YEAR_RATE",YEAR_RATE);
}
}