diff --git a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/report/InterestBearingFromListPlugin.java b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/report/InterestBearingFromListPlugin.java index 223b4c0..2e5289e 100644 --- a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/report/InterestBearingFromListPlugin.java +++ b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/report/InterestBearingFromListPlugin.java @@ -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 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()); + } + } + } } diff --git a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/report/InterestBearingRptListPlugin.java b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/report/InterestBearingRptListPlugin.java index 5b1ed1a..0014624 100644 --- a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/report/InterestBearingRptListPlugin.java +++ b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/report/InterestBearingRptListPlugin.java @@ -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 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 coll = new ArrayList<>();//报表展示数据 + // 遍历修改后的数据的所有字段 + List 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 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; } + }