提交内容:带息债务统计表

时间:2025-11-12 17:27
提交人:邹江涛
This commit is contained in:
zoujiangtao 2025-11-12 17:27:23 +08:00
parent ef59d6a83c
commit 8f7312b934
2 changed files with 609 additions and 55 deletions

View File

@ -1,15 +1,35 @@
package shkd.sys.sys.plugin.report;
import kd.bos.algo.DataSet;
import kd.bos.bill.BillShowParameter;
import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.dataentity.entity.DynamicObjectCollection;
import kd.bos.dataentity.entity.LocaleString;
import kd.bos.db.DB;
import kd.bos.db.DBRoute;
import kd.bos.entity.datamodel.events.PackageDataEvent;
import kd.bos.entity.datamodel.events.PropertyChangedArgs;
import kd.bos.entity.report.ReportColumn;
import kd.bos.entity.report.ReportQueryParam;
import kd.bos.form.ShowType;
import kd.bos.form.events.HyperLinkClickEvent;
import kd.bos.form.events.HyperLinkClickListener;
import kd.bos.orm.ORM;
import kd.bos.orm.query.QCP;
import kd.bos.orm.query.QFilter;
import kd.bos.report.ReportList;
import kd.bos.report.ReportShowParameter;
import kd.bos.report.filter.ReportFilter;
import kd.bos.report.plugin.AbstractReportFormPlugin;
import kd.bos.servicehelper.BusinessDataServiceHelper;
import kd.bos.servicehelper.QueryServiceHelper;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.EventObject;
import java.util.List;
public class InterestBearingFromListPlugin extends AbstractReportFormPlugin {
public class InterestBearingFromListPlugin extends AbstractReportFormPlugin implements HyperLinkClickListener {
/**
* 值改变事件监听
@ -25,6 +45,18 @@ public class InterestBearingFromListPlugin extends AbstractReportFormPlugin {
this.getView().getModel().setValue("shkd_datevar", this.getModel().getValue("shkd_datevar")); //期限数
this.getView().getModel().setValue("shkd_datetype", this.getModel().getValue("shkd_datetype")); //期限类型
this.getView().getModel().setValue("shkd_datasel", e.getChangeSet()[0].getNewValue()); //数据查询维度
this.getView().getModel().setValue("shkd_startintdatecase", this.getModel().getValue("shkd_startintdatecase")); //借款时间开始
this.getView().getModel().setValue("shkd_startintdateend", this.getModel().getValue("shkd_startintdateend")); //借款时间结束
this.getView().getModel().setValue("shkd_expiredatecase", this.getModel().getValue("shkd_expiredatecase")); //到期时间开始
this.getView().getModel().setValue("shkd_expiredateend", this.getModel().getValue("shkd_expiredateend")); //到期时间结束
if(e.getChangeSet()[0].getNewValue().equals("datagp8")){
//数据汇总 不显示其他日期 只显示日期字段
this.getView().setVisible(true,"shkd_bizdate");
this.getView().setVisible(false,"shkd_startintdatecase","shkd_startintdateend","shkd_expiredatecase","shkd_expiredateend","shkd_datetype");
}else{
this.getView().setVisible(false,"shkd_bizdate");
this.getView().setVisible(true,"shkd_startintdatecase","shkd_startintdateend","shkd_expiredatecase","shkd_expiredateend","shkd_datetype");
}
ReportFilter filter = this.getView().getControl("reportfilterap");//调用页面的自动查询
filter.search();
}
@ -44,14 +76,114 @@ public class InterestBearingFromListPlugin extends AbstractReportFormPlugin {
Object shkd_datevar = formShowParameter.getCustomParam("shkd_datevar"); //期限数
Object shkd_datetype = formShowParameter.getCustomParam("shkd_datetype"); //期限类型
Object shkd_datasel = formShowParameter.getCustomParam("shkd_datasel"); //数据查询维度
Object shkd_startintdatecase = formShowParameter.getCustomParam("shkd_startintdatecase"); //借款时间开始
Object shkd_startintdateend = formShowParameter.getCustomParam("shkd_startintdateend"); //借款时间结束
Object shkd_expiredatecase = formShowParameter.getCustomParam("shkd_expiredatecase"); //到期时间开始
Object shkd_expiredateend = formShowParameter.getCustomParam("shkd_expiredateend"); //到期时间结束
if (shkd_datasel != null) {
this.getView().getModel().setValue("shkd_bizdate", shkd_bizdate);
this.getView().getModel().setValue("shkd_amtunit", shkd_amtunit);
this.getView().getModel().setValue("shkd_datevar", shkd_datevar);
this.getView().getModel().setValue("shkd_datetype", shkd_datetype);
this.getView().getModel().setValue("shkd_datasel", shkd_datasel);
this.getView().getModel().setValue("shkd_startintdatecase", shkd_startintdatecase);
this.getView().getModel().setValue("shkd_startintdateend", shkd_startintdateend);
this.getView().getModel().setValue("shkd_expiredatecase", shkd_expiredatecase);
this.getView().getModel().setValue("shkd_expiredateend", shkd_expiredateend);
ReportFilter filter = this.getView().getControl("reportfilterap");//调用页面的自动查询
filter.search();
}
}
/**
* 超链接点击事件
* @param hyperLinkClickEvent
*/
@Override
public void hyperLinkClick(HyperLinkClickEvent hyperLinkClickEvent) {
if ("shkd_billno".equals(hyperLinkClickEvent.getFieldName())) {
BillShowParameter billShowParameter = new BillShowParameter();
String billNo = (String) hyperLinkClickEvent.getRowData().get("shkd_billno");//单据编码
//打开的单据页面标识
DataSet selIDRes = DB.queryDataSet(this.getClass().getSimpleName(), DBRoute.of("fi"), " SELECT fid FROM t_cfm_loanbill WHERE FBILLNO = '"+billNo+"'");//财务云
DynamicObjectCollection loanBillCol = ORM.create().toPlainDynamicObjectCollection(selIDRes.copy());
billShowParameter.setFormId("cfm_loanbill"); //提款处理
// billShowParameter.setBillTypeId("cfm_loanbill"); //提款处理
//打开的单据标题
billShowParameter.setCaption(new LocaleString("提款处理").toString());
billShowParameter.setPkId(loanBillCol.get(0).getString("fid"));
billShowParameter.getOpenStyle().setShowType(ShowType.MainNewTabPage);
this.getView().showForm(billShowParameter);
}
}
@Override
public void registerListener(EventObject e) {
super.registerListener(e);
this.addItemClickListeners("toolbarap");
ReportList reportlistap = this.getView().getControl("reportlistap");
reportlistap.addHyperClickListener(this::hyperLinkClick);
}
@Override
public void processRowData(String gridPK, DynamicObjectCollection rowData, ReportQueryParam queryParam) {
super.processRowData(gridPK, rowData, queryParam);
// if (rowData.size()==0){
// return;
// }
Object dataSel = this.getModel().getValue("shkd_datasel"); //数据查询维度
BigDecimal drawamountSum = BigDecimal.ZERO; //金额汇总
BigDecimal zhrzcbSum = BigDecimal.ZERO; //综合融资成本
BigDecimal zhrzqxSum = BigDecimal.ZERO; //综合融资期限
if(dataSel == null || dataSel.toString().equals("data1")){
//计算综合融资成本sum(单行本金*单行利率//总额)和综合融资期限
for(int i = 0;i<rowData.size();i++){
DynamicObject infoData = rowData.get(i);
//综合融资成本
BigDecimal zhrzcb = infoData.getBigDecimal("zhrzcb");
zhrzcbSum = zhrzcbSum.add(zhrzcb);
//综合融资期限
BigDecimal zhrzqx = infoData.getBigDecimal("zhrzqx");
zhrzqxSum = zhrzqxSum.add(zhrzqx);
//总金额
BigDecimal drawamount = infoData.getBigDecimal("drawamount");
drawamountSum = drawamountSum.add(drawamount);
}
}else if(!dataSel.toString().equals("datagp8") && !dataSel.toString().equals("data1")){
//不是数据汇总 且不是数据集
for(int i = 0;i<rowData.size();i++){
DynamicObject infoData = rowData.get(i);
//总金额
BigDecimal drawamount = infoData.getBigDecimal("sumamt");
drawamountSum = drawamountSum.add(drawamount);
}
}
this.getModel().setValue("shkd_zhrzcb",zhrzcbSum);
this.getModel().setValue("shkd_zhrzqx",zhrzqxSum);
this.getModel().setValue("shkd_sumamt",drawamountSum);
}
@Override
public void setMergeColums(List<String> columns) {
Object dataSel = this.getModel().getValue("shkd_datasel"); //数据查询维度
if(dataSel != null && dataSel.toString().equals("datagp6")){ //融资渠道汇总合并单元格
columns.add("gpname");
}else if(dataSel != null && dataSel.toString().equals("datagp8")){ //数据汇总查询
columns.add("shkd_blxmgp");
}
super.setMergeColums(columns);
}
@Override
public void packageData(PackageDataEvent packageDataEvent) {
super.packageData(packageDataEvent);
ReportColumn c = (ReportColumn)packageDataEvent.getSource();
Object dataSel = this.getModel().getValue("shkd_datasel"); //数据查询维度
if(dataSel == null || dataSel.toString().equals("datagp6")) { //融资渠道汇总合并单元格
if("gpname".equals(c.getFieldKey()) && "小计".equals(packageDataEvent.getFormatValue().toString())){
packageDataEvent.getNoMergeKey().add(c.getFieldKey());
}
}
}
}

View File

@ -26,6 +26,7 @@ import kd.tmc.gm.common.helper.GuaranteeContractHelper;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
@ -52,16 +53,26 @@ public class InterestBearingRptListPlugin extends AbstractReportListDataPlugin {
FilterItemInfo dateVarFilter = filterInfo.getFilterItem("shkd_datevar"); //期限数
FilterItemInfo dateTypeFiler = filterInfo.getFilterItem("shkd_datetype"); //期限类型
FilterItemInfo dataSelFilter = filterInfo.getFilterItem("shkd_datasel"); //数据查询维度
FilterItemInfo startDateCaseFilter = filterInfo.getFilterItem("shkd_startintdatecase"); //借款时间开始
FilterItemInfo startDateEndFilter = filterInfo.getFilterItem("shkd_startintdateend"); //借款时间结束
FilterItemInfo expireDateCaseFilter = filterInfo.getFilterItem("shkd_expiredatecase"); //到期时间开始
FilterItemInfo expireDateEndFilter = filterInfo.getFilterItem("shkd_expiredateend"); //到期时间结束
//下拉列表值查询不同类型数据
String amtUnit = null; //金额单位 yuan/qyuan/wyuan/bwyuan/yyuan
String dateType = null; //期限类型 year/month/day
String dateSel = null; //数据查询维度 数据表data1/融资主体汇总datagp1/报表科目汇总datagp2/金融机构汇总datagp3/借款期限汇总datagp4/到期时间汇总datagp5/融资渠道汇总datagp6
String dataSel = null; //数据查询维度 数据表data1/融资主体汇总datagp1/报表科目汇总datagp2/金融机构汇总datagp3/借款期限汇总datagp4/到期时间汇总datagp5/融资渠道汇总datagp6
String bizDate = null; //日期
String dateVar = null; //期限类型
String dateVar = null; //期限数
String startDateCase = null; //借款时间开始
String startDateEnd = null; //借款时间结束
String expireDateCase = null; //到期时间开始
String expireDateEnd = null; //到期时间结束
// 使用过滤条件创建QFilter
if(bizDateFilter != null && bizDateFilter.getValue() != null){
bizDate = sdfDate.format(bizDateFilter.getValue()); //日期
}else{
bizDate = sdfDate.format(new Date()); //日期
}
if(amtUnitFilter != null && amtUnitFilter.getValue() != null){
amtUnit = amtUnitFilter.getValue().toString(); //金额单位 yuan/qyuan/wyuan/bwyuan/yyuan
@ -73,15 +84,214 @@ public class InterestBearingRptListPlugin extends AbstractReportListDataPlugin {
dateType = dateTypeFiler.getValue().toString(); //期限类型 year/month/day
}
if(dataSelFilter != null && dataSelFilter.getValue() != null){
dateSel = dataSelFilter.getValue().toString(); //数据查询维度 数据表data1/融资主体汇总datagp1/报表科目汇总datagp2/金融机构汇总datagp3/借款期限汇总datagp4/到期时间汇总datagp5/融资渠道汇总datagp6
dataSel = dataSelFilter.getValue().toString(); //数据查询维度 数据表data1/融资主体汇总datagp1/报表科目汇总datagp2/金融机构汇总datagp3/借款期限汇总datagp4/到期时间汇总datagp5/融资渠道汇总datagp6
}
if(startDateCaseFilter != null && startDateCaseFilter.getValue() != null){
startDateCase = sdfDate.format(startDateCaseFilter.getValue()); //借款时间开始
}
if(startDateEndFilter != null && startDateEndFilter.getValue() != null){
startDateEnd = sdfDate.format(startDateEndFilter.getValue()); //借款时间结束
}
if(expireDateCaseFilter != null && expireDateCaseFilter.getValue() != null){
expireDateCase = sdfDate.format(expireDateCaseFilter.getValue()); //到期时间开始
}
if(expireDateEndFilter != null && expireDateEndFilter.getValue() != null){
expireDateEnd = sdfDate.format(expireDateEndFilter.getValue()); //到期时间结束
}
//报表查询数据返回
DataSet selData = null;
/**
* 区分是数据汇总查询还是其他报表查询
*/
if(dataSel != null && dataSel.equals("datagp8")){
selData = selDataRows1(amtUnit, bizDate);
}else{
selData = selDataRows(amtUnit, dateType, dataSel, startDateCase, startDateEnd, expireDateCase, expireDateEnd);
}
return selData;
}
/**
*
* @param amtUnit 金额单位
* @param bizDate 结束时间结束
* @return
*/
private DataSet selDataRows1(String amtUnit, String bizDate) throws ParseException {
DataSet selData = null; //返回的数据结果集
//获取传入日期条件的当前季度第一天和最后一天
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
Calendar cal=Calendar.getInstance();
cal.setTime(df.parse(bizDate));
cal.set(Calendar.MONTH, (((int) cal.get(Calendar.MONTH)) / 3) * 3);
cal.set(Calendar.DAY_OF_MONTH, 1);
String jdFirstDay = df.format(cal.getTime());
//--------------------------------获取本季度第一天
cal.setTime(df.parse(bizDate));
//计算季度数由于月份从0开始即1月份的Calendar.MONTH值为0,所以计算季度的第三个月份只需 月份 / 3 * 3 + 2
cal.set(Calendar.MONTH, (((int) cal.get(Calendar.MONTH)) / 3) * 3 + 2);
cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DAY_OF_MONTH));
String jdLastDay = df.format(cal.getTime());
//-------------------------------获取本季度的最后一天
int year = cal.get(Calendar.YEAR); //日期所在年
String sql = "/*dialect*/SELECT s1.shkd_blxm shkd_blxmgp,s1.shkd_rzpzmx shkd_rzpzmx,\n";
//计算元
if(amtUnit == null || amtUnit.equals("yuan")){
//
sql += "isnull(s2.sumamt,0) jdqianamt,isnull(s3.sumamt,0) jdaddamt,isnull(s4.sumamt,0) jdghamt,\n" +
"isnull(s5.sumamt,0) yearaddamt,isnull(s6.sumamt,0) yearghamt,isnull(s7.sumamt,0) jdlastamt\n";
}else if(amtUnit.equals("qyuan")){
//千元
sql += "isnull(s2.sumamt,0)/1000 jdqianamt,isnull(s3.sumamt,0)/1000 jdaddamt,isnull(s4.sumamt,0)/1000 jdghamt,\n" +
"isnull(s5.sumamt,0)/1000 yearaddamt,isnull(s6.sumamt,0)/1000 yearghamt,isnull(s7.sumamt,0)/1000 jdlastamt\n";
}else if(amtUnit.equals("wyuan")){
//万元
sql += "isnull(s2.sumamt,0)/10000 jdqianamt,isnull(s3.sumamt,0)/10000 jdaddamt,isnull(s4.sumamt,0)/10000 jdghamt,\n" +
"isnull(s5.sumamt,0)/10000 yearaddamt,isnull(s6.sumamt,0)/10000 yearghamt,isnull(s7.sumamt,0)/10000 jdlastamt\n";
}else if(amtUnit.equals("bwyuan")){
//百万元
sql += "isnull(s2.sumamt,0)/1000000 jdqianamt,isnull(s3.sumamt,0)/1000000 jdaddamt,isnull(s4.sumamt,0)/1000000 jdghamt,\n" +
"isnull(s5.sumamt,0)/1000000 yearaddamt,isnull(s6.sumamt,0)/1000000 yearghamt,isnull(s7.sumamt,0)/1000000 jdlastamt\n";
}else if(amtUnit.equals("yyuan")){
//亿元
sql += "isnull(s2.sumamt,0)/100000000 jdqianamt,isnull(s3.sumamt,0)/100000000 jdaddamt,isnull(s4.sumamt,0)/100000000 jdghamt,\n" +
"isnull(s5.sumamt,0)/100000000 yearaddamt,isnull(s6.sumamt,0)/100000000 yearghamt,isnull(s7.sumamt,0)/100000000 jdlastamt\n";
}
sql += "FROM(\n" +
"SELECT CASE \n" +
" \tWHEN (t1.fk_shkd_blxm IS NULL OR t1.fk_shkd_blxm == ' ') THEN '无'\n" +
" \tWHEN (t1.fk_shkd_blxm == '01') THEN '权益融资'\n" +
" \tWHEN (t1.fk_shkd_blxm == '02') THEN '债务融资'\n" +
" \tELSE ''\n" +
" END shkd_blxm,ISNULL(t4.fname,'无') shkd_rzpzmx\n" +
" FROM t_cfm_loanbill t1 \n" +
" INNER JOIN t_cfm_loanbill_e t2 ON t1.fid = t2.FID \n" +
" LEFT JOIN t_cfm_financingvarieties t4 ON t1.ffinproductid = t4.fid\n" +
" WHERE (t2.floantype = 'loan' OR t2.floantype = 'sl' OR t2.floantype = 'bond') \n" +
" GROUP BY fk_shkd_blxm,t4.fname) s1 \n" +
" LEFT JOIN (\n" +
" SELECT CASE \n" +
" \tWHEN (t1.fk_shkd_blxm IS NULL OR t1.fk_shkd_blxm == ' ') THEN '无'\n" +
" \tWHEN (t1.fk_shkd_blxm == '01') THEN '权益融资'\n" +
" \tWHEN (t1.fk_shkd_blxm == '02') THEN '债务融资'\n" +
" \tELSE ''\n" +
" END shkd_blxm,ISNULL(t4.fname,'无') shkd_rzpzmx,sum(t1.fdrawamount) sumamt\n" +
" FROM t_cfm_loanbill t1 \n" +
" INNER JOIN t_cfm_loanbill_e t2 ON t1.fid = t2.FID \n" +
" LEFT JOIN t_cfm_financingvarieties t4 ON t1.ffinproductid = t4.fid\n" +
" WHERE (t2.floantype = 'loan' OR t2.floantype = 'sl' OR t2.floantype = 'bond') \n" +
" AND to_char(t2.fstartintdate,'yyyy-MM-dd') < '"+jdFirstDay+"'\n" +
" GROUP BY fk_shkd_blxm,t4.fname) s2 ON s1.shkd_blxm = s2.shkd_blxm AND s1.shkd_rzpzmx = s2.shkd_rzpzmx\n" +
" LEFT JOIN (\n" +
" SELECT CASE \n" +
" \tWHEN (t1.fk_shkd_blxm IS NULL OR t1.fk_shkd_blxm == ' ') THEN '无'\n" +
" \tWHEN (t1.fk_shkd_blxm == '01') THEN '权益融资'\n" +
" \tWHEN (t1.fk_shkd_blxm == '02') THEN '债务融资'\n" +
" \tELSE ''\n" +
" END shkd_blxm,ISNULL(t4.fname,'无') shkd_rzpzmx,sum(t1.fdrawamount) sumamt\n" +
" FROM t_cfm_loanbill t1 \n" +
" INNER JOIN t_cfm_loanbill_e t2 ON t1.fid = t2.FID \n" +
" LEFT JOIN t_cfm_financingvarieties t4 ON t1.ffinproductid = t4.fid\n" +
" WHERE (t2.floantype = 'loan' OR t2.floantype = 'sl' OR t2.floantype = 'bond') \n" +
" AND to_char(t2.fstartintdate,'yyyy-MM-dd') >= '"+jdFirstDay+"'\n" +
" AND to_char(t2.fstartintdate,'yyyy-MM-dd') <= '"+jdLastDay+"'\n" +
" GROUP BY fk_shkd_blxm,t4.fname) s3 ON s1.shkd_blxm = s3.shkd_blxm AND s1.shkd_rzpzmx = s3.shkd_rzpzmx\n" +
" LEFT JOIN (\n" +
" SELECT CASE \n" +
" \tWHEN (t1.fk_shkd_blxm IS NULL OR t1.fk_shkd_blxm == ' ') THEN '无'\n" +
" \tWHEN (t1.fk_shkd_blxm == '01') THEN '权益融资'\n" +
" \tWHEN (t1.fk_shkd_blxm == '02') THEN '债务融资'\n" +
" \tELSE ''\n" +
" END shkd_blxm,ISNULL(t4.fname,'无') shkd_rzpzmx,sum(t5.frepayamount) sumamt\n" +
" FROM t_cfm_loanbill t1 \n" +
" INNER JOIN t_cfm_loanbill_e t2 ON t1.fid = t2.FID \n" +
" LEFT JOIN t_cfm_financingvarieties t4 ON t1.ffinproductid = t4.fid\n" +
" inner JOIN t_cfm_repaymentbill_loans t5 ON t1.fid = t5.floanbillid\n" +
" inner JOIN t_cfm_repaymentbill t6 ON t5.fid = t6.fid\n" +
" WHERE (t2.floantype = 'loan' OR t2.floantype = 'sl' OR t2.floantype = 'bond') \n" +
" AND to_char(t6.fbizdate,'yyyy-MM-dd') >= '"+jdFirstDay+"'\n" +
" AND to_char(t6.fbizdate,'yyyy-MM-dd') <= '"+jdLastDay+"'\n" +
" GROUP BY fk_shkd_blxm,t4.fname) s4 ON s1.shkd_blxm = s4.shkd_blxm AND s1.shkd_rzpzmx = s4.shkd_rzpzmx\n" +
" LEFT JOIN (\n" +
" SELECT CASE \n" +
" \tWHEN (t1.fk_shkd_blxm IS NULL OR t1.fk_shkd_blxm == ' ') THEN '无'\n" +
" \tWHEN (t1.fk_shkd_blxm == '01') THEN '权益融资'\n" +
" \tWHEN (t1.fk_shkd_blxm == '02') THEN '债务融资'\n" +
" \tELSE ''\n" +
" END shkd_blxm,ISNULL(t4.fname,'无') shkd_rzpzmx,sum(t1.fdrawamount) sumamt\n" +
" FROM t_cfm_loanbill t1 \n" +
" INNER JOIN t_cfm_loanbill_e t2 ON t1.fid = t2.FID \n" +
" LEFT JOIN t_cfm_financingvarieties t4 ON t1.ffinproductid = t4.fid\n" +
" WHERE (t2.floantype = 'loan' OR t2.floantype = 'sl' OR t2.floantype = 'bond') \n" +
" AND to_char(t2.fstartintdate,'yyyy') = '"+year+"'\n" +
" GROUP BY fk_shkd_blxm,t4.fname) s5 ON s1.shkd_blxm = s5.shkd_blxm AND s1.shkd_rzpzmx = s5.shkd_rzpzmx\n" +
" LEFT JOIN (\n" +
" SELECT CASE \n" +
" \tWHEN (t1.fk_shkd_blxm IS NULL OR t1.fk_shkd_blxm == ' ') THEN '无'\n" +
" \tWHEN (t1.fk_shkd_blxm == '01') THEN '权益融资'\n" +
" \tWHEN (t1.fk_shkd_blxm == '02') THEN '债务融资'\n" +
" \tELSE ''\n" +
" END shkd_blxm,ISNULL(t4.fname,'无') shkd_rzpzmx,sum(t5.frepayamount) sumamt\n" +
" FROM t_cfm_loanbill t1 \n" +
" INNER JOIN t_cfm_loanbill_e t2 ON t1.fid = t2.FID \n" +
" LEFT JOIN t_cfm_financingvarieties t4 ON t1.ffinproductid = t4.fid\n" +
" inner JOIN t_cfm_repaymentbill_loans t5 ON t1.fid = t5.floanbillid\n" +
" inner JOIN t_cfm_repaymentbill t6 ON t5.fid = t6.fid\n" +
" WHERE (t2.floantype = 'loan' OR t2.floantype = 'sl' OR t2.floantype = 'bond') \n" +
" AND to_char(t6.fbizdate,'yyyy') = '"+year+"'\n" +
" GROUP BY fk_shkd_blxm,t4.fname) s6 ON s1.shkd_blxm = s6.shkd_blxm AND s1.shkd_rzpzmx = s6.shkd_rzpzmx\n" +
" LEFT JOIN (\n" +
" SELECT CASE \n" +
" \tWHEN (t1.fk_shkd_blxm IS NULL OR t1.fk_shkd_blxm == ' ') THEN '无'\n" +
" \tWHEN (t1.fk_shkd_blxm == '01') THEN '权益融资'\n" +
" \tWHEN (t1.fk_shkd_blxm == '02') THEN '债务融资'\n" +
" \tELSE ''\n" +
" END shkd_blxm,ISNULL(t4.fname,'无') shkd_rzpzmx,sum(t1.fdrawamount) sumamt\n" +
" FROM t_cfm_loanbill t1 \n" +
" INNER JOIN t_cfm_loanbill_e t2 ON t1.fid = t2.FID \n" +
" LEFT JOIN t_cfm_financingvarieties t4 ON t1.ffinproductid = t4.fid\n" +
" WHERE (t2.floantype = 'loan' OR t2.floantype = 'sl' OR t2.floantype = 'bond') \n" +
" AND to_char(t2.fstartintdate,'yyyy-MM-dd') > '"+jdLastDay+"'\n" +
" GROUP BY fk_shkd_blxm,t4.fname) s7 ON s1.shkd_blxm = s7.shkd_blxm AND s1.shkd_rzpzmx = s7.shkd_rzpzmx\n" +
" ORDER BY s1.shkd_blxm,s1.shkd_rzpzmx";
DataSet dataSet = DB.queryDataSet(this.getClass().getSimpleName(), DBRoute.of("fi"), sql);//财务云
// 分组后进行合计(金额)
DataSet sumDataSet = dataSet.groupBy(new String[]{"shkd_blxmgp"}).sum("jdqianamt").sum("jdaddamt").sum("jdghamt").sum("yearaddamt").sum("yearghamt").sum("jdlastamt").finish();
sumDataSet = sumDataSet.select("concat(shkd_blxmgp,'-金额合计') as shkd_blxmgp, jdqianamt,jdaddamt,jdghamt,yearaddamt,yearghamt,jdlastamt");
// 由于分组计算之后Dataset的字段少了一个需要通过addField加回来为之后union做准备
sumDataSet = sumDataSet.addField("'-'", "shkd_rzpzmx");
// 添加高亮字段高亮字段将在界面规则里面生效
dataSet = dataSet.addField("1", "shkd_light");
sumDataSet = sumDataSet.addField("2", "shkd_light");
// union前需要保证两个dataSet的字段序列一致因此这里对sumDataSet对象重新排列字段序列
sumDataSet = sumDataSet.select("shkd_blxmgp,shkd_rzpzmx,jdqianamt,jdaddamt,jdghamt,yearaddamt,yearghamt,jdlastamt,shkd_light");
// union此时sumDataSet会续在dataSet的底部
dataSet = dataSet.select("shkd_blxmgp,shkd_rzpzmx,jdqianamt,jdaddamt,jdghamt,yearaddamt,yearghamt,jdlastamt,shkd_light");
DataSet unionDataSet = dataSet.union(sumDataSet);
// 按对应分组字段排序
selData = unionDataSet.orderBy(new String[]{"shkd_blxmgp"});
return selData;
}
/**
*
* @param amtUnit 金额单位
* @param dateType 日期类型
* @param dataSel 数据类型
* @param startDateCase 起始时间开始
* @param startDateEnd 起始时间结束
* @param expireDateCase 结束时间开始
* @param expireDateEnd 结束时间结束
* @return
*/
private DataSet selDataRows(String amtUnit, String dateType, String dataSel, String startDateCase, String startDateEnd, String expireDateCase, String expireDateEnd) {
DataSet selData = null;
//业务单元数据集
DataSet orgDataSet = QueryServiceHelper.queryDataSet(this.getClass().getSimpleName(),"bos_org","id,number as orgnumber,name as orgname", null, null);
// 查询提款处理和债券发行这两PC布局属于一个单据
String sql = " SELECT t1.FBILLNO billno,t1.fk_shkd_ejgs shkd_ejgs,t2.forgid orgid,t1.fk_shkd_zqrzh shkd_zqrzh,t2.ftextcreditor textcreditor,\n" +
" t5.fname shkd_rzpz,\n" +
String sql = "/*dialect*/ SELECT t1.FBILLNO shkd_billno,t1.fk_shkd_ejgs shkd_ejgs,t2.forgid orgid,t1.fk_shkd_zqrzh shkd_zqrzh,t2.ftextcreditor textcreditor,\n" +
" t5.fname shkd_rzpzmx,ISNULL(t7.fname,'无') shkd_rzpz,\n" +
" CASE \n" +
" \tWHEN (t1.fk_shkd_rzqd IS NULL OR t1.fk_shkd_rzqd == ' ') THEN '无'\n" +
" \tWHEN (t1.fk_shkd_rzqd == '01') THEN '直接融资'\n" +
@ -110,23 +320,29 @@ public class InterestBearingRptListPlugin extends AbstractReportListDataPlugin {
" \tWHEN (t1.fk_shkd_dybbkmmc == '12') THEN '租赁负债'\n" +
" \tELSE ''\n" +
" END shkd_dybbkmmc,\n" +
" t2.fterm term,to_char(t2.fstartintdate,'yyyy-MM-dd') startintdate,to_char(t1.fexpiredate,'yyyy-MM-dd') expiredate,\n";
" t2.fterm term,\n" +
" isnull(TIMESTAMPDIFF(day,t2.fstartintdate, t1.fexpiredate),0) xcday,\n" +
" 0.01 xcdate,\n" +
" to_char(t2.fstartintdate,'yyyy-MM-dd') startintdate,to_char(t1.fexpiredate,'yyyy-MM-dd') expiredate,\n";
//计算元
if(amtUnit == null || amtUnit.equals("yuan")){
//
sql +=" t1.fdrawamount drawamount,\n" ;
sql +=" isnull(t1.fdrawamount,0) drawamount,\n" ;
}else if(amtUnit.equals("qyuan")){
//千元
sql +=" t1.fdrawamount/1000 drawamount,\n" ;
sql +=" isnull(t1.fdrawamount,0)/1000 drawamount,\n" ;
}else if(amtUnit.equals("wyuan")){
//万元
sql +=" t1.fdrawamount/10000 drawamount,\n" ;
sql +=" isnull(t1.fdrawamount,0)/10000 drawamount,\n" ;
}else if(amtUnit.equals("bwyuan")){
//百万元
sql +=" t1.fdrawamount/1000000 drawamount,\n" ;
sql +=" isnull(t1.fdrawamount,0)/1000000 drawamount,\n" ;
}else if(amtUnit.equals("yyuan")){
//亿元
sql +=" t1.fdrawamount/100000000 drawamount,\n" ;
sql +=" isnull(t1.fdrawamount,0)/100000000 drawamount,\n" ;
}
sql +=" 0.01 zhrzcb,\n" ;
sql +=" 0.01 zhrzqx,\n" ;
sql +=" REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(CASE \n" +
" \tWHEN (t3.fguaranteeway IS NULL OR t3.fguaranteeway == ' ') AND (t4.fguarantee IS NULL OR t4.fguarantee == ' ') THEN ',无,'\n" +
" \tWHEN t3.fguaranteeway IS NULL OR t3.fguaranteeway == ' ' THEN t4.fguarantee\n" +
@ -144,7 +360,7 @@ public class InterestBearingRptListPlugin extends AbstractReportListDataPlugin {
" \tWHEN (t6.zywname IS NULL OR t6.zywname == ' ') THEN t6.dywname \n" +
" \tELSE t6.dywname || ',' || t6.zywname \n" +
" END dbwname,\n" +
" (SELECT TOP 1 s1.frayearrate FROM t_cfm_loanbill_ra_entry s1 where s1.fid = t1.fid AND s1.fraeffectdate <= SYSDATE ORDER BY s1.fraeffectdate desc) lilv," +
" concat(isnull((SELECT TOP 1 s1.frayearrate FROM t_cfm_loanbill_ra_entry s1 where s1.fid = t1.fid AND s1.fraeffectdate <= SYSDATE ORDER BY s1.fraeffectdate desc),0),'%') lilv," +
" t1.fdescription remark" +
" FROM t_cfm_loanbill t1 \n" +
" INNER JOIN t_cfm_loanbill_e t2 ON t1.fid = t2.FID \n" +
@ -163,96 +379,227 @@ public class InterestBearingRptListPlugin extends AbstractReportListDataPlugin {
" left JOIN t_gm_guaranteeuse s6 ON s1.fid = s6.fguaranteecontractid \n" +
" WHERE (s1.fguaranteeway like '%mortgage%' OR s1.fguaranteeway like '%pledge%') \n" +
" AND s6.fgsrcbilltype LIKE 'cfm_loanbill%'\n" +
" AND s1.fbillno = 'SIG5020000-DBHT-202502-0002'\n" + //---------------------担保合同编码条件
// " AND s1.fbillno = 'SIG5020000-DBHT-202502-0002'\n" + //---------------------担保合同编码条件
" GROUP BY s6.fgsrcbillno ) t6 ON t1.fbillno = t6.srcbillno\n" +
" WHERE 1=1\n";
if(bizDate != null){
sql += " and to_char(t2.fstartintdate,'yyyy-MM-dd') <= '"+bizDate+"'\n"; //起始时间小于等于选择的时间
sql += " and to_char(t1.fexpiredate,'yyyy-MM-dd') >= '"+bizDate+"'\n"; //到期时间大于等于选择的时间
" LEFT JOIN t_cfm_financingvarieties t7 ON t5.fparentid = t7.fid \n" +
" WHERE 1=1 AND (t2.floantype = 'loan' OR t2.floantype = 'sl' OR t2.floantype = 'bond') \n"; //贷款类型为 普通贷款银团贷款债券发行
if(startDateCase != null){
sql += " and to_char(t2.fstartintdate,'yyyy-MM-dd') >= '"+ startDateCase +"'\n"; //起始时间大于等于选择的借款时间开始
}
if(dateVar != null){
sql += " AND t2.fterm like '%"+dateVar+"%'\n"; //期限条件like
if(startDateEnd != null){
sql += " and to_char(t2.fstartintdate,'yyyy-MM-dd') <= '"+ startDateEnd +"'\n"; //起始时间小于等于选择的借款时间结束
}
sql += " and t1.fbillno in ('SIG1100000-TKCL-202510-0074','SIG1040100-JQFX-202502-0025','SIG5020000-TKCL-202502-0003')"; //---------------------提款处理单据编码条件
if(expireDateCase != null){
sql += " and to_char(t1.fexpiredate,'yyyy-MM-dd') >= '"+ expireDateCase +"'\n"; //到期时间大于等于选择的到期时间开始
}
if(expireDateEnd != null){
sql += " and to_char(t1.fexpiredate,'yyyy-MM-dd') <= '"+ expireDateEnd +"'\n"; //到期时间小于等于选择的到期时间结束
}
// if(bizDate != null){
// sql += " and to_char(t2.fstartintdate,'yyyy-MM-dd') <= '"+bizDate+"'\n"; //起始时间小于等于选择的时间
// sql += " and to_char(t1.fexpiredate,'yyyy-MM-dd') >= '"+bizDate+"'\n"; //到期时间大于等于选择的时间
// }
// if(dateVar != null){
// sql += " AND t2.fterm like '%"+dateVar+"%'\n"; //期限条件like
// }
// sql += " and t1.fbillno in ('SIG1100000-TKCL-202510-0074','SIG1040100-JQFX-202502-0025','SIG5020000-TKCL-202502-0003')"; //---------------------提款处理单据编码条件
/*
获取查询条件的总金额
*/
String selSumAmtSql = " /*dialect*/ SELECT sum(drawamount) sumamt FROM ("+sql+") sumAmt ";
DataSet selSumAmtRes = DB.queryDataSet(this.getClass().getSimpleName(), DBRoute.of("fi"), selSumAmtSql);//财务云
DynamicObjectCollection srcCollection = ORM.create().toPlainDynamicObjectCollection(selSumAmtRes.copy());
BigDecimal sumAmt = srcCollection.get(0).getBigDecimal("sumamt");
DynamicObjectCollection sumAmtCollection = ORM.create().toPlainDynamicObjectCollection(selSumAmtRes.copy());
BigDecimal sumAmt = sumAmtCollection.get(0).getBigDecimal("sumamt");
/*
开始根据选择的不同类型的报表格式返回不同的结果集
*/
if(dateSel == null || dateSel.equals("data1")){
if(dataSel == null || dataSel.equals("data1")){
String selSql = "/*dialect*/";
selSql += sql;
//数据表查询
DataSet dataRes = DB.queryDataSet(this.getClass().getSimpleName(), DBRoute.of("fi"), selSql);//财务云
JoinDataSet join1 = dataRes.join(orgDataSet, JoinType.LEFT);//连接二级组织
DataSet dataRes1 = join1.on("shkd_ejgs","id").select(new String[]{"billno","orgname shkd_ejgs","orgid","shkd_zqrzh","textcreditor","shkd_rzpz",
"shkd_rzqd","shkd_blxm","shkd_dybbkmmc","term","startintdate","expiredate","drawamount","SubStr(guaranteeway, 2, LEN(guaranteeway)-2) guaranteeway",
DataSet dataRes1 = join1.on("shkd_ejgs","id").select(new String[]{"shkd_billno","orgname shkd_ejgs","orgid","shkd_zqrzh","textcreditor","shkd_rzpzmx","shkd_rzpz",
"shkd_rzqd","shkd_blxm","shkd_dybbkmmc","term","xcday","xcdate","startintdate","expiredate","drawamount","zhrzcb","zhrzqx","SubStr(guaranteeway, 1, LEN(guaranteeway)-2) guaranteeway",
"dbwkm","dbwname","lilv","remark"}).finish();
JoinDataSet join2 = dataRes1.join(orgDataSet, JoinType.LEFT);//连接融资主体
selData = join2.on("orgid","id").select(new String[]{"billno","shkd_ejgs","orgname orgid","shkd_zqrzh","textcreditor","shkd_rzpz","shkd_rzqd",
"shkd_blxm","shkd_dybbkmmc","term","startintdate","expiredate","drawamount","guaranteeway","dbwkm","dbwname","lilv","remark"}).finish();
}else if(dateSel.equals("datagp1")){
DataSet dataRes2 = join2.on("orgid","id").select(new String[]{"shkd_billno","shkd_ejgs","orgname orgid","shkd_zqrzh","textcreditor","shkd_rzpzmx","shkd_rzpz","shkd_rzqd",
"shkd_blxm","shkd_dybbkmmc","term","xcday","xcdate","startintdate","expiredate","drawamount","zhrzcb","zhrzqx","guaranteeway","dbwkm","dbwname","lilv","remark"}).finish();
//根据结果集重新计算两个日期相差的格式
DynamicObjectCollection srcCollection = ORM.create().toPlainDynamicObjectCollection(dataRes2.copy());
for(int i = 0;i<srcCollection.size();i++){
DynamicObject infoData = srcCollection.get(i);
//期限类型 year/month/day
BigDecimal xcDaty = infoData.getBigDecimal("xcday");
BigDecimal xcdate = BigDecimal.ZERO;
if(dateType == null || dateType.equals("day")){
//
xcdate = xcDaty;
}else if(dateType.equals("month")){
//
xcdate = xcDaty.divide(new BigDecimal("30"),2,RoundingMode.HALF_UP);
}else if(dateType.equals("year")){
//
xcdate = xcDaty.divide(new BigDecimal("30"),2,RoundingMode.HALF_UP).divide(new BigDecimal("12"),2,RoundingMode.HALF_UP);
}
infoData.set("xcdate",xcdate);
BigDecimal amount = infoData.getBigDecimal("drawamount"); //单行金额
String lilvs = infoData.getString("lilv").replace("%","");
BigDecimal lilv = new BigDecimal(lilvs).divide(new BigDecimal(100));
//综合融资成本单行金额*单行利率除以总金额
infoData.set("zhrzcb",amount.multiply(lilv).divide(sumAmt,6,RoundingMode.HALF_UP));
//综合融资期限单行金额/总金额*单行期限
infoData.set("zhrzqx",amount.divide(sumAmt,6,RoundingMode.HALF_UP).multiply(xcdate));
}
if(srcCollection.size() > 0){
selData = buildDataByObjCollection(srcCollection);
}else{
selData = dataRes2;
}
}else if(dataSel.equals("datagp1")){
//融资主体汇总查询
String groupSql = "/*dialect*/ SELECT orgid,sum(drawamount) sumamt,ROUND((sum(drawamount)/"+sumAmt+")*100,2) bili FROM ("+sql+") ss GROUP BY orgid";
String groupSql = "/*dialect*/ SELECT orgid,sum(drawamount) sumamt,concat(ROUND((sum(drawamount)/"+sumAmt+")*100,4) ,'%') bili FROM ("+sql+") ss GROUP BY orgid";
//数据表查询
DataSet dataRes = DB.queryDataSet(this.getClass().getSimpleName(), DBRoute.of("fi"), groupSql);//财务云
JoinDataSet join1 = dataRes.join(orgDataSet, JoinType.LEFT);//连接二级组织
selData = join1.on("orgid","id").select(new String[]{"orgname gpname","sumamt","bili"}).finish();
}else if(dateSel.equals("datagp2")){
}else if(dataSel.equals("datagp2")){
//报表科目汇总查询
String groupSql = "/*dialect*/ SELECT shkd_dybbkmmc gpname,sum(drawamount) sumamt,ROUND((sum(drawamount)/"+sumAmt+")*100,2) bili FROM ("+sql+") ss GROUP BY shkd_dybbkmmc";
String groupSql = "/*dialect*/ SELECT shkd_dybbkmmc gpname,sum(drawamount) sumamt,concat(ROUND((sum(drawamount)/"+sumAmt+")*100,4) ,'%') bili FROM ("+sql+") ss GROUP BY shkd_dybbkmmc";
//数据表查询
selData = DB.queryDataSet(this.getClass().getSimpleName(), DBRoute.of("fi"), groupSql);//财务云
}else if(dateSel.equals("datagp3")){
}else if(dataSel.equals("datagp3")){
//金融机构汇总查询
String groupSql = "/*dialect*/ SELECT shkd_zqrzh gpname,sum(drawamount) sumamt,ROUND((sum(drawamount)/"+sumAmt+")*100,2) bili FROM ("+sql+") ss GROUP BY shkd_zqrzh";
String groupSql = "/*dialect*/ SELECT shkd_zqrzh gpname,sum(drawamount) sumamt,concat(ROUND((sum(drawamount)/"+sumAmt+")*100,4) ,'%') bili FROM ("+sql+") ss GROUP BY shkd_zqrzh";
//数据表查询
selData = DB.queryDataSet(this.getClass().getSimpleName(), DBRoute.of("fi"), groupSql);//财务云
}else if(dateSel.equals("datagp4")){
}else if(dataSel.equals("datagp4")){
//借款期限汇总查询
//一年及一下金额
String termSqlAmt1 = "/*dialect*/ SELECT '1年及以下' gpname,sum(drawamount) sumamt,ROUND((sum(drawamount)/"+sumAmt+")*100,2) bili FROM ("+sql+") ss WHERE SUBSTRING_INDEX(fterm,'y',1) = fterm or fterm = '1y'";
String termSqlAmt1 = "/*dialect*/ SELECT '1年及以下' gpname,sum(drawamount) sumamt,concat(ROUND((sum(drawamount)/"+sumAmt+")*100,4) ,'%') bili FROM ("+sql+") ss WHERE SUBSTRING_INDEX(term,'y',1) = term or term = '1y'";
DataSet termAmtRs1 = DB.queryDataSet(this.getClass().getSimpleName(), DBRoute.of("fi"), termSqlAmt1);//财务云
//一年至五年
String termSqlAmt2 = "/*dialect*/ SELECT '1年不含至5年' gpname,sum(drawamount) sumamt,ROUND((sum(drawamount)/"+sumAmt+")*100,2) bili FROM ("+sql+") ss WHERE SUBSTRING_INDEX(fterm,'y',1) <> fterm AND fterm <> '1y' AND \n" +
" (SUBSTRING_INDEX(fterm,'y',1) >= 1 AND SUBSTRING_INDEX(fterm,'y',1) < 5) or fterm= '5y' ";
String termSqlAmt2 = "/*dialect*/ SELECT '1年不含至5年' gpname,sum(drawamount) sumamt,concat(ROUND((sum(drawamount)/"+sumAmt+")*100,4) ,'%') bili FROM ("+sql+") ss WHERE SUBSTRING_INDEX(term,'y',1) <> term AND term <> '1y' AND \n" +
" (SUBSTRING_INDEX(term,'y',1) >= 1 AND SUBSTRING_INDEX(term,'y',1) < 5) or term= '5y' ";
DataSet termAmtRs2 = DB.queryDataSet(this.getClass().getSimpleName(), DBRoute.of("fi"), termSqlAmt2);//财务云
//五年至十年
String termSqlAmt3 = "/*dialect*/ SELECT '5年不含至10年' gpname,sum(drawamount) sumamt,ROUND((sum(drawamount)/"+sumAmt+")*100,2) bili FROM ("+sql+") ss WHERE SUBSTRING_INDEX(fterm,'y',1) <> fterm AND fterm <> '5y' AND \n" +
" (SUBSTRING_INDEX(fterm,'y',1) >= 5 AND SUBSTRING_INDEX(fterm,'y',1) < 10) or fterm= '10y' ";
String termSqlAmt3 = "/*dialect*/ SELECT '5年不含至10年' gpname,sum(drawamount) sumamt,concat(ROUND((sum(drawamount)/"+sumAmt+")*100,4) ,'%') bili FROM ("+sql+") ss WHERE SUBSTRING_INDEX(term,'y',1) <> term AND term <> '5y' AND \n" +
" (SUBSTRING_INDEX(term,'y',1) >= 5 AND SUBSTRING_INDEX(term,'y',1) < 10) or term= '10y' ";
DataSet termAmtRs3 = DB.queryDataSet(this.getClass().getSimpleName(), DBRoute.of("fi"), termSqlAmt3);//财务云
//十年至十五年
String termSqlAmt4 = "/*dialect*/ SELECT '10年不含至15年' gpname,sum(drawamount) sumamt,ROUND((sum(drawamount)/"+sumAmt+")*100,2) bili FROM ("+sql+") ss WHERE SUBSTRING_INDEX(fterm,'y',1) <> fterm AND fterm <> '10y' AND \n" +
" (SUBSTRING_INDEX(fterm,'y',1) >= 10 AND SUBSTRING_INDEX(fterm,'y',1) < 15) or fterm= '15y'";
String termSqlAmt4 = "/*dialect*/ SELECT '10年不含至15年' gpname,sum(drawamount) sumamt,concat(ROUND((sum(drawamount)/"+sumAmt+")*100,4) ,'%') bili FROM ("+sql+") ss WHERE SUBSTRING_INDEX(term,'y',1) <> term AND term <> '10y' AND \n" +
" (SUBSTRING_INDEX(term,'y',1) >= 10 AND SUBSTRING_INDEX(term,'y',1) < 15) or term= '15y'";
DataSet termAmtRs4 = DB.queryDataSet(this.getClass().getSimpleName(), DBRoute.of("fi"), termSqlAmt4);//财务云
//十五年至二十年
String termSqlAmt5 = "/*dialect*/ SELECT '15年不含至20年' gpname,sum(drawamount) sumamt,ROUND((sum(drawamount)/"+sumAmt+")*100,2) bili FROM ("+sql+") ss WHERE SUBSTRING_INDEX(fterm,'y',1) <> fterm AND fterm <> '15y' AND \n" +
" (SUBSTRING_INDEX(fterm,'y',1) >= 15 AND SUBSTRING_INDEX(fterm,'y',1) < 20) or fterm= '20y' ";
String termSqlAmt5 = "/*dialect*/ SELECT '15年不含至20年' gpname,sum(drawamount) sumamt,concat(ROUND((sum(drawamount)/"+sumAmt+")*100,4) ,'%') bili FROM ("+sql+") ss WHERE SUBSTRING_INDEX(term,'y',1) <> term AND term <> '15y' AND \n" +
" (SUBSTRING_INDEX(term,'y',1) >= 15 AND SUBSTRING_INDEX(term,'y',1) < 20) or term= '20y' ";
DataSet termAmtRs5 = DB.queryDataSet(this.getClass().getSimpleName(), DBRoute.of("fi"), termSqlAmt5);//财务云
//二十年以上
String termSqlAmt6 = "/*dialect*/ SELECT '21年及以上' gpname,sum(drawamount) sumamt,ROUND((sum(drawamount)/"+sumAmt+")*100,2) bili FROM ("+sql+") ss WHERE SUBSTRING_INDEX(fterm,'y',1) <> fterm AND fterm <> '20y' AND \n" +
" (SUBSTRING_INDEX(fterm,'y',1) >= 20)";
String termSqlAmt6 = "/*dialect*/ SELECT '21年及以上' gpname,sum(drawamount) sumamt,concat(ROUND((sum(drawamount)/"+sumAmt+")*100,4) ,'%') bili FROM ("+sql+") ss WHERE SUBSTRING_INDEX(term,'y',1) <> term AND term <> '20y' AND \n" +
" (SUBSTRING_INDEX(term,'y',1) >= 20)";
DataSet termAmtRs6 = DB.queryDataSet(this.getClass().getSimpleName(), DBRoute.of("fi"), termSqlAmt6);//财务云
selData = termAmtRs1.union(termAmtRs2,termAmtRs3,termAmtRs4,termAmtRs5,termAmtRs6); //union all
}else if(dateSel.equals("datagp5")){
}else if(dataSel.equals("datagp5")){
//到期时间汇总查询
String groupSql = "/*dialect*/ SELECT to_char(expiredate,'yyyy') gpname,sum(drawamount) sumamt,ROUND((sum(drawamount)/"+sumAmt+")*100,2) bili FROM ("+sql+") ss GROUP BY to_char(expiredate,'yyyy') order by to_char(expiredate,'yyyy')";
String groupSql = "/*dialect*/ SELECT to_char(expiredate,'yyyy') gpname,sum(drawamount) sumamt,concat(ROUND((sum(drawamount)/"+sumAmt+")*100,4),'%') bili FROM ("+sql+") ss GROUP BY to_char(expiredate,'yyyy') order by to_char(expiredate,'yyyy')";
//数据表查询
selData = DB.queryDataSet(this.getClass().getSimpleName(), DBRoute.of("fi"), groupSql);//财务云
}else if(dateSel.equals("datagp6")){
//融资渠道汇总查询
String groupSql = "/*dialect*/ SELECT shkd_rzqd gpname,sum(drawamount) sumamt,ROUND((sum(drawamount)/"+sumAmt+")*100,2) bili FROM ("+sql+") ss GROUP BY shkd_rzqd";
}else if(dataSel.equals("datagp6")){
//融资渠道汇总查询 融资渠道+融资品种明细
String groupSql = "/*dialect*/ SELECT shkd_rzqd gpname,shkd_rzpzmx gpname1,sum(drawamount) sumamt,ROUND((sum(drawamount)/"+sumAmt+")*100,4) bili FROM ("+sql+") ss GROUP BY shkd_rzqd,shkd_rzpzmx order by shkd_rzqd,shkd_rzpzmx";
//数据表查询
DataSet dataSet = DB.queryDataSet(this.getClass().getSimpleName(), DBRoute.of("fi"), groupSql);//财务云
// 分组后进行合计(金额)
DataSet sumDataSet = dataSet.groupBy(new String[]{"gpname"}).sum("sumamt").sum("bili").finish();
sumDataSet = sumDataSet.select("concat(gpname,'-金额合计') as gpname, sumamt,bili");
// 由于分组计算之后Dataset的字段少了一个需要通过addField加回来为之后union做准备
sumDataSet = sumDataSet.addField("'-'", "gpname1");
// 添加高亮字段高亮字段将在界面规则里面生效
dataSet = dataSet.addField("1", "shkd_light");
sumDataSet = sumDataSet.addField("2", "shkd_light");
// union前需要保证两个dataSet的字段序列一致因此这里对sumDataSet对象重新排列字段序列
sumDataSet = sumDataSet.select("gpname,gpname1,sumamt,concat(bili,'%') bili,shkd_light");
// union此时sumDataSet会续在dataSet的底部
dataSet = dataSet.select("gpname,gpname1,sumamt,concat(bili,'%') bili,shkd_light");
DataSet unionDataSet = dataSet.union(sumDataSet);
// 按组织名称排序这样底部的合计数据就会与上面的组织名称排在一起
selData = unionDataSet.orderBy(new String[]{"gpname"});
}else if(dataSel.equals("datagp7")){
//二级公司汇总查询
String groupSql = "/*dialect*/ SELECT shkd_ejgs,sum(drawamount) sumamt,concat(ROUND((sum(drawamount)/"+sumAmt+")*100,4) ,'%') bili FROM ("+sql+") ss GROUP BY shkd_ejgs";
//数据表查询
selData = DB.queryDataSet(this.getClass().getSimpleName(), DBRoute.of("fi"), groupSql);//财务云
DataSet dataRes = DB.queryDataSet(this.getClass().getSimpleName(), DBRoute.of("fi"), groupSql);//财务云
JoinDataSet join1 = dataRes.join(orgDataSet, JoinType.LEFT);//连接二级组织
selData = join1.on("shkd_ejgs","id").select(new String[]{"orgname gpname","sumamt","bili"}).finish();
}
return selData;
}
/**
* 查询结果实体转换数据结果集
* @param finalTemp
* @return
*/
public DataSet buildDataByObjCollection(DynamicObjectCollection finalTemp) {
DataSet finish = null;
// 创建一个空的DataSet 将DynamicObjectCollection转化为DataSet
Collection<Object[]> coll = new ArrayList<>();//报表展示数据
// 遍历修改后的数据的所有字段
List<String> displayFields = new ArrayList<>();//列标识
DynamicObject object = finalTemp.get(0);
DataEntityPropertyCollection properties = object.getDataEntityType().getProperties();
// 获取所有列标识
properties.forEach(property -> {
if (!"id".equals(property.getName())) {
displayFields.add(property.getName());
}
});
logger.info("displayFields列标识{}", displayFields);
for (DynamicObject dataRow : finalTemp) {
// 将数据放入数组
Object[] objects = new Object[displayFields.size()];
for (int i = 0; i < displayFields.size(); i++) {
objects[i] = dataRow.get(displayFields.get(i));
}
coll.add(objects);
}
//构建列类型列表为dataset构建做准备
DataType stringType = DataType.StringType;
DataType dateType = DataType.DateType;
DataType bigDecimalType = DataType.BigDecimalType;
DataType longType = DataType.LongType;
DataType anyType = DataType.AnyType;
List<DataType> dataTypes = new ArrayList<>();//列类型列表
for (String field : displayFields) {
// if (field.contains("date")) {
// dataTypes.add(dateType);
// } else if (field.contains("amount") || field.contains("gdebtbalance")) {
// dataTypes.add(bigDecimalType);
// } else if (field.contains("gdebtcurrency")) {
// dataTypes.add(anyType);
// } else if (field.equals("shkd_gdebtorg") || field.contains("gsrcbillid")) {
// dataTypes.add(longType);
// } else {
dataTypes.add(stringType);
// }
}
logger.info("dataTypes数据类型{}", dataTypes);
RowMeta rowMeta = RowMetaFactory.createRowMeta(displayFields.toArray(new String[0]), dataTypes.toArray(new DataType[0]));
CollectionInput inputs = new CollectionInput(rowMeta, coll);
try {
finish = Algo.create(this.getClass().getName()).createDataSet(inputs);
} catch (Exception e) {
logger.error("数据集创建失败:{}", e.getMessage());
}
return finish;
}
/**
* 显示列
* @param columns
@ -265,30 +612,46 @@ public class InterestBearingRptListPlugin extends AbstractReportListDataPlugin {
FilterInfo filterInfo = this.getQueryParam().getFilter();
FilterItemInfo amtUnitFilter = filterInfo.getFilterItem("shkd_amtunit"); //金额单位
FilterItemInfo dataSelFilter = filterInfo.getFilterItem("shkd_datasel"); //数据查询维度
FilterItemInfo dateTypeFiler = filterInfo.getFilterItem("shkd_datetype"); //期限类型
//下拉列表值查询不同类型数据
String amtUnit = null; //金额单位 yuan/qyuan/wyuan/bwyuan/yyuan
String dateSel = null; //数据查询维度 数据表data1/融资主体汇总datagp1/报表科目汇总datagp2/金融机构汇总datagp3/借款期限汇总datagp4/到期时间汇总datagp5/融资渠道汇总datagp6
String dateType = null; //期限类型 year/month/day
if(amtUnitFilter != null && amtUnitFilter.getValue() != null){
amtUnit = amtUnitFilter.getValue().toString(); //金额单位 yuan/qyuan/wyuan/bwyuan/yyuan
}
if(dataSelFilter != null && dataSelFilter.getValue() != null){
dateSel = dataSelFilter.getValue().toString(); //数据查询维度 数据表data1/融资主体汇总datagp1/报表科目汇总datagp2/金融机构汇总datagp3/借款期限汇总datagp4/到期时间汇总datagp5/融资渠道汇总datagp6
}
if(dateTypeFiler != null && dateTypeFiler.getValue() != null){
dateType = dateTypeFiler.getValue().toString(); //期限类型 year/month/day
}
/*
开始根据选择的不同类型的报表格式区分不同的显示
*/
if(dateSel == null || dateSel.equals("data1")){
//数据表查询
columns.add(createReportColumn("billno", "text", "单据编号"));
ReportColumn billNo = createReportColumn("shkd_billno", "text", "单据编号");
billNo.setHyperlink(true);
columns.add(billNo);
columns.add(createReportColumn("shkd_ejgs", "text", "二级公司名称"));
columns.add(createReportColumn("orgid", "text", "融资主体名称"));
columns.add(createReportColumn("shkd_zqrzh", "text", "金融机构"));
columns.add(createReportColumn("textcreditor", "text", "金融机构支行"));
columns.add(createReportColumn("shkd_rzpz", "text", "融资品种"));
columns.add(createReportColumn("shkd_rzpzmx", "text", "融资品种明细"));
columns.add(createReportColumn("shkd_rzqd", "text", "融资渠道"));
columns.add(createReportColumn("shkd_blxm", "text", "表列项目"));
columns.add(createReportColumn("shkd_dybbkmmc", "text", "对应报表科目项目"));
columns.add(createReportColumn("term", "text", "借款期限"));
// columns.add(createReportColumn("term", "text", "借款期限"));
//期限类型 year/month/day
if(dateType == null || dateType.equals("day")){
columns.add(createReportColumn("xcdate", "text", "借款期限(天)"));
}else if(dateType.equals("month")){
columns.add(createReportColumn("xcdate", "text", "借款期限(月)"));
}else if(dateType.equals("year")){
columns.add(createReportColumn("xcdate", "text", "借款期限(年)"));
}
columns.add(createReportColumn("startintdate", "text", "借款时间"));
columns.add(createReportColumn("expiredate", "text", "到期时间"));
if(amtUnit == null || amtUnit.equals("yuan")){
@ -307,12 +670,63 @@ public class InterestBearingRptListPlugin extends AbstractReportListDataPlugin {
//亿元
columns.add(createReportColumn("drawamount", "amount", "金额(亿元)"));
}
columns.add(createReportColumn("zhrzcb", "text", "综合融资成本"));
columns.add(createReportColumn("zhrzqx", "text", "综合融资期限"));
columns.add(createReportColumn("guaranteeway", "text", "用信方式"));
columns.add(createReportColumn("dbwkm", "text", "担保物科目"));
columns.add(createReportColumn("dbwname", "text", "担保物名称"));
columns.add(createReportColumn("lilv", "amount", "利率"));
columns.add(createReportColumn("lilv", "text", "利率"));
columns.add(createReportColumn("remark", "text", "备注"));
}else if(dateSel.equals("datagp8")){
//数据汇总表查询
columns.add(createReportColumn("shkd_blxmgp", "text", "融资大类"));
columns.add(createReportColumn("shkd_rzpzmx", "text", "融资种类"));
if(amtUnit == null || amtUnit.equals("yuan")){
//
columns.add(createReportColumn("jdqianamt", "amount", "季度初融资余额(元)"));
columns.add(createReportColumn("jdaddamt", "amount", "本季度新增额(元)"));
columns.add(createReportColumn("jdghamt", "amount", "本季度归还额(元)"));
columns.add(createReportColumn("yearaddamt", "amount", "本年累计新增融资额(元)"));
columns.add(createReportColumn("yearghamt", "amount", "本年累计归还额(元)"));
columns.add(createReportColumn("jdlastamt", "amount", "季度末融资余额(元)"));
}else if(amtUnit.equals("qyuan")){
//千元
columns.add(createReportColumn("jdqianamt", "amount", "季度初融资余额(千元)"));
columns.add(createReportColumn("jdaddamt", "amount", "本季度新增额(千元)"));
columns.add(createReportColumn("jdghamt", "amount", "本季度归还额(千元)"));
columns.add(createReportColumn("yearaddamt", "amount", "本年累计新增融资额(千元)"));
columns.add(createReportColumn("yearghamt", "amount", "本年累计归还额(千元)"));
columns.add(createReportColumn("jdlastamt", "amount", "季度末融资余额(千元)"));
}else if(amtUnit.equals("wyuan")){
//万元
columns.add(createReportColumn("jdqianamt", "amount", "季度初融资余额(万元)"));
columns.add(createReportColumn("jdaddamt", "amount", "本季度新增额(万元)"));
columns.add(createReportColumn("jdghamt", "amount", "本季度归还额(万元)"));
columns.add(createReportColumn("yearaddamt", "amount", "本年累计新增融资额(万元)"));
columns.add(createReportColumn("yearghamt", "amount", "本年累计归还额(万元)"));
columns.add(createReportColumn("jdlastamt", "amount", "季度末融资余额(万元)"));
}else if(amtUnit.equals("bwyuan")){
//百万元
columns.add(createReportColumn("jdqianamt", "amount", "季度初融资余额(百万元)"));
columns.add(createReportColumn("jdaddamt", "amount", "本季度新增额(百万元)"));
columns.add(createReportColumn("jdghamt", "amount", "本季度归还额(百万元)"));
columns.add(createReportColumn("yearaddamt", "amount", "本年累计新增融资额(百万元)"));
columns.add(createReportColumn("yearghamt", "amount", "本年累计归还额(百万元)"));
columns.add(createReportColumn("jdlastamt", "amount", "季度末融资余额(百万元)"));
}else if(amtUnit.equals("yyuan")){
//亿元
columns.add(createReportColumn("jdqianamt", "amount", "季度初融资余额(亿元)"));
columns.add(createReportColumn("jdaddamt", "amount", "本季度新增额(亿元)"));
columns.add(createReportColumn("jdghamt", "amount", "本季度归还额(亿元)"));
columns.add(createReportColumn("yearaddamt", "amount", "本年累计新增融资额(亿元)"));
columns.add(createReportColumn("yearghamt", "amount", "本年累计归还额(亿元)"));
columns.add(createReportColumn("jdlastamt", "amount", "季度末融资余额(亿元)"));
}
ReportColumn light = createReportColumn("shkd_light", "text", "是否高亮");
light.setHide(true); //隐藏是否高亮字段
columns.add(light);
}else {
// columns.remove(0);
if(dateSel.equals("datagp1")){
//融资主体汇总查询
columns.add(createReportColumn("gpname", "text", "融资主体"));
@ -331,6 +745,13 @@ public class InterestBearingRptListPlugin extends AbstractReportListDataPlugin {
}else if(dateSel.equals("datagp6")){
//融资渠道汇总查询
columns.add(createReportColumn("gpname", "text", "融资渠道"));
columns.add(createReportColumn("gpname1", "text", "融资品种"));
ReportColumn light = createReportColumn("shkd_light", "text", "是否高亮");
light.setHide(true); //隐藏是否高亮字段
columns.add(light);
}else if(dateSel.equals("datagp7")){
//二级公司汇总查询
columns.add(createReportColumn("gpname", "text", "二级公司"));
}
//汇总金额字段
if(amtUnit == null || amtUnit.equals("yuan")){
@ -373,4 +794,5 @@ public class InterestBearingRptListPlugin extends AbstractReportListDataPlugin {
column.setCaption(new LocaleString(caption));
return column;
}
}