diff --git a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/report/FinanceReportFormPlugin.java b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/report/FinanceReportFormPlugin.java index 833e177..498037c 100644 --- a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/report/FinanceReportFormPlugin.java +++ b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/report/FinanceReportFormPlugin.java @@ -382,9 +382,9 @@ public class FinanceReportFormPlugin extends AbstractReportFormPlugin implement BigDecimal shkd_jtnbjkrzcb=new BigDecimal(0);//⑩集团内部借款融资成本(%) BigDecimal shkd_jtnbjkqx=new BigDecimal(0);//⑩集团内部借款期限 for (DynamicObject rowDatum : rowData) { - shkd_jtnbjkamount.subtract(rowDatum.getBigDecimal("shkd_jtnbjkamount")); - shkd_jtnbjkrzcb.subtract(rowDatum.getBigDecimal("shkd_jtnbjkrzcb")); - shkd_jtnbjkqx.subtract(rowDatum.getBigDecimal("shkd_jtnbjkqx")); + shkd_jtnbjkamount=shkd_jtnbjkamount.subtract(rowDatum.getBigDecimal("shkd_jtnbjkamount")); + shkd_jtnbjkrzcb=shkd_jtnbjkrzcb.subtract(rowDatum.getBigDecimal("shkd_jtnbjkrzcb")); + shkd_jtnbjkqx=shkd_jtnbjkqx.subtract(rowDatum.getBigDecimal("shkd_jtnbjkqx")); } DynamicObject dynamicObject = new DynamicObject(rowData.getDynamicObjectType()); dynamicObject.set("shkd_org","合并抵消"); diff --git a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/report/FinanceReportfordateFormPlugin.java b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/report/FinanceReportfordateFormPlugin.java new file mode 100644 index 0000000..e3f31f7 --- /dev/null +++ b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/report/FinanceReportfordateFormPlugin.java @@ -0,0 +1,334 @@ +package shkd.sys.sys.plugin.report; + +import kd.bos.context.RequestContext; +import kd.bos.dataentity.entity.DynamicObject; +import kd.bos.dataentity.entity.DynamicObjectCollection; +import kd.bos.dataentity.entity.LocaleString; +import kd.bos.entity.datamodel.events.PackageDataEvent; +import kd.bos.entity.report.*; +import kd.bos.form.events.HyperLinkClickEvent; +import kd.bos.form.events.HyperLinkClickListener; +import kd.bos.orm.query.QCP; +import kd.bos.orm.query.QFilter; +import kd.bos.permission.api.HasPermOrgResult; +import kd.bos.report.ReportList; +import kd.bos.report.ReportShowParameter; +import kd.bos.report.events.CreateColumnEvent; +import kd.bos.report.filter.ReportFilter; +import kd.bos.report.plugin.AbstractReportFormPlugin; +import kd.bos.servicehelper.BusinessDataServiceHelper; +import kd.bos.servicehelper.QueryServiceHelper; +import kd.bos.servicehelper.org.OrgUnitServiceHelper; +import kd.bos.servicehelper.org.OrgViewType; +import kd.bos.servicehelper.permission.PermissionServiceHelper; +import shkd.sys.sys.plugin.report.domain.FinanceVarietyEnum; + +import java.math.BigDecimal; +import java.util.*; + +public class FinanceReportfordateFormPlugin extends AbstractReportFormPlugin implements HyperLinkClickListener { + @Override + public void hyperLinkClick(HyperLinkClickEvent hyperLinkClickEvent) { + + } + + @Override + public void packageData(PackageDataEvent evt) { + + if ("shkd_org".equals(((ReportColumn)evt.getSource()).getFieldKey())){ + String formatValue = (String)evt.getFormatValue(); + DynamicObject selorg = QueryServiceHelper.queryOne("bos_org", "id,name,number", (new QFilter("name", QCP.equals, formatValue)).toArray()); + if (selorg==null){ + evt.getNoLinkKey().add(((ReportColumn)evt.getSource()).getFieldKey()); + return; + } + Long pkValue = selorg.getLong("id"); + List orgIds = new ArrayList<>(1); + orgIds.add(pkValue); + List allSubordinateOrgs = OrgUnitServiceHelper.getAllSubordinateOrgs(OrgViewType.OrgUnit, orgIds, false);//不包括自己 + if (allSubordinateOrgs.size()==0){ + evt.getNoLinkKey().add(((ReportColumn)evt.getSource()).getFieldKey()); + } + } + } + + @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 initDefaultQueryParam(ReportQueryParam queryParam) { + super.initDefaultQueryParam(queryParam); + Boolean shkd_isone = (Boolean) this.getModel().getValue("shkd_isone");//是否在第一层 + if (!shkd_isone){ + ReportFilter filter = this.getView().getControl("reportfilterap");//调用页面的自动查询 + queryParam.setFilter(filter.getReportQueryParam().getFilter()); + } + HasPermOrgResult userHasPermOrgs = PermissionServiceHelper.getUserHasPermOrgs(Long.parseLong(RequestContext.get().getUserId())); + //有权的组织 + List hasPermOrgs = userHasPermOrgs.getHasPermOrgs(); + + + if (hasPermOrgs.size()==0){ + this.getModel().setValue("shkd_seluserpower", null); + }else if (hasPermOrgs.size()!=0&&shkd_isone){//有组织权限隔离且在首层 + //获取有权组织里级别高的根节点组织 + List res=getSuperOrg(hasPermOrgs); + Object[] longs = res.toArray(new Long[0]); + this.getModel().setValue("shkd_seluserpower", longs); + }else if (hasPermOrgs.size()!=0&&!shkd_isone){//有组织权限隔离但不在首层 + this.getModel().setValue("shkd_seluserpower", null); + } + //是否全部组织有权 + boolean hasallOrg = userHasPermOrgs.hasAllOrgPerm(); + } + + @Override + public void afterBindData(EventObject e) { + super.afterBindData(e); + ReportShowParameter formShowParameter = (ReportShowParameter) this.getView().getFormShowParameter(); + Object shkd_selorg = formShowParameter.getCustomParam("shkd_selorg"); + Object shkd_seldate = formShowParameter.getCustomParam("shkd_seldate"); + Object shkd_selmoney = formShowParameter.getCustomParam("shkd_selmoney"); + if (shkd_selorg != null) { + DynamicObject dynamicObject = BusinessDataServiceHelper.loadSingle((Long) shkd_selorg, "bos_org"); + this.getView().getModel().setValue("shkd_selorg", dynamicObject); + this.getView().getModel().setValue("shkd_seldate", shkd_seldate); + this.getView().getModel().setValue("shkd_selmoney", shkd_selmoney); + this.getView().getModel().setValue("shkd_isone", false); + this.getView().getModel().setValue("shkd_seluserpower", null); + ReportFilter filter = this.getView().getControl("reportfilterap");//调用页面的自动查询 + filter.search(); + } + } + + @Override + public void afterCreateColumn(CreateColumnEvent event) { + super.afterCreateColumn(event); + ReportQueryParam queryParam = event.getQueryParam(); + FilterInfo filter = queryParam.getFilter(); + String shkd_money = filter.getString("shkd_selmoney"); + List columns = event.getColumns(); + getColumns( columns,shkd_money); + } + + public List getColumns(List columns,String shkd_money) { + //集团外债务融资 + List jtwzwrz = ((ReportColumnGroup) columns.get(3)).getChildren(); + for (AbstractReportColumn child : jtwzwrz) { + ReportColumnGroup reportColumnGroup= null; + try { + reportColumnGroup = (ReportColumnGroup) child; + } catch (Exception e) { + String localeValue_zh_cn = child.getCaption().getLocaleValue_zh_CN(); + if (localeValue_zh_cn.contains("金额")){ + LocaleString l = new LocaleString(); + l.put("zh_CN",localeValue_zh_cn+"("+ FinanceVarietyEnum.getshkd_selmoney(shkd_money)+")"); + child.setCaption(l); + } + continue; + } + List children = reportColumnGroup.getChildren(); + for (AbstractReportColumn abstractReportColumn : children) { + String localeValue_zh_cn = abstractReportColumn.getCaption().getLocaleValue_zh_CN(); + if ("金额".contains(localeValue_zh_cn)){ + LocaleString l = new LocaleString(); + l.put("zh_CN",localeValue_zh_cn+"("+ FinanceVarietyEnum.getshkd_selmoney(shkd_money)+")"); + abstractReportColumn.setCaption(l); + } + } + } + + //集团内债务融资 + List jtnzwrz = ((ReportColumnGroup) columns.get(4)).getChildren(); + for (AbstractReportColumn child : jtnzwrz) { + ReportColumnGroup reportColumnGroup= null; + try { + reportColumnGroup = (ReportColumnGroup) child; + } catch (Exception e) { + String localeValue_zh_cn = child.getCaption().getLocaleValue_zh_CN(); + if (localeValue_zh_cn.contains("金额")){ + LocaleString l = new LocaleString(); + l.put("zh_CN",localeValue_zh_cn+"("+ FinanceVarietyEnum.getshkd_selmoney(shkd_money)+")"); + child.setCaption(l); + } + continue; + } + List children = reportColumnGroup.getChildren(); + for (AbstractReportColumn abstractReportColumn : children) { + String localeValue_zh_cn = abstractReportColumn.getCaption().getLocaleValue_zh_CN(); + if ("金额".contains(localeValue_zh_cn)){ + LocaleString l = new LocaleString(); + l.put("zh_CN",localeValue_zh_cn+"("+ FinanceVarietyEnum.getshkd_selmoney(shkd_money)+")"); + abstractReportColumn.setCaption(l); + } + } + } + + //债务融资 + List zwrz = ((ReportColumnGroup) columns.get(5)).getChildren(); + for (AbstractReportColumn child : zwrz) { + ReportColumnGroup reportColumnGroup= null; + try { + reportColumnGroup = (ReportColumnGroup) child; + } catch (Exception e) { + String localeValue_zh_cn = child.getCaption().getLocaleValue_zh_CN(); + if (localeValue_zh_cn.contains("金额")){ + LocaleString l = new LocaleString(); + l.put("zh_CN",localeValue_zh_cn+"("+ FinanceVarietyEnum.getshkd_selmoney(shkd_money)+")"); + child.setCaption(l); + } + continue; + } + List children = reportColumnGroup.getChildren(); + for (AbstractReportColumn abstractReportColumn : children) { + String localeValue_zh_cn = abstractReportColumn.getCaption().getLocaleValue_zh_CN(); + if ("金额".contains(localeValue_zh_cn)){ + LocaleString l = new LocaleString(); + l.put("zh_CN",localeValue_zh_cn+"("+ FinanceVarietyEnum.getshkd_selmoney(shkd_money)+")"); + abstractReportColumn.setCaption(l); + } + } + } + + //权益融资 + List qyrz = ((ReportColumnGroup) columns.get(6)).getChildren(); + for (AbstractReportColumn child : qyrz) { + ReportColumnGroup reportColumnGroup= null; + try { + reportColumnGroup = (ReportColumnGroup) child; + } catch (Exception e) { + String localeValue_zh_cn = child.getCaption().getLocaleValue_zh_CN(); + if (localeValue_zh_cn.contains("金额")){ + LocaleString l = new LocaleString(); + l.put("zh_CN",localeValue_zh_cn+"("+ FinanceVarietyEnum.getshkd_selmoney(shkd_money)+")"); + child.setCaption(l); + } + continue; + } + List children = reportColumnGroup.getChildren(); + for (AbstractReportColumn abstractReportColumn : children) { + String localeValue_zh_cn = abstractReportColumn.getCaption().getLocaleValue_zh_CN(); + if ("金额".contains(localeValue_zh_cn)){ + LocaleString l = new LocaleString(); + l.put("zh_CN",localeValue_zh_cn+"("+ FinanceVarietyEnum.getshkd_selmoney(shkd_money)+")"); + abstractReportColumn.setCaption(l); + } + } + } + + //融资(含权益) + List rz = ((ReportColumnGroup) columns.get(7)).getChildren(); + for (AbstractReportColumn child : rz) { + ReportColumnGroup reportColumnGroup= null; + try { + reportColumnGroup = (ReportColumnGroup) child; + } catch (Exception e) { + String localeValue_zh_cn = child.getCaption().getLocaleValue_zh_CN(); + if (localeValue_zh_cn.contains("金额")){ + LocaleString l = new LocaleString(); + l.put("zh_CN",localeValue_zh_cn+"("+ FinanceVarietyEnum.getshkd_selmoney(shkd_money)+")"); + child.setCaption(l); + } + continue; + } + List children = reportColumnGroup.getChildren(); + for (AbstractReportColumn abstractReportColumn : children) { + String localeValue_zh_cn = abstractReportColumn.getCaption().getLocaleValue_zh_CN(); + if ("金额".contains(localeValue_zh_cn)){ + LocaleString l = new LocaleString(); + l.put("zh_CN",localeValue_zh_cn+"("+ FinanceVarietyEnum.getshkd_selmoney(shkd_money)+")"); + abstractReportColumn.setCaption(l); + } + } + } + + return columns; + } + + @Override + public void processRowData(String gridPK, DynamicObjectCollection rowData, ReportQueryParam queryParam) { + super.processRowData(gridPK, rowData, queryParam); + + if (rowData.size()==0){ + return; + } + //获取排序配置 + DynamicObject shkd_selorg = (DynamicObject) this.getModel().getValue("shkd_selorg"); + long id = shkd_selorg.getLong("id"); + QFilter filter = new QFilter("shkd_org", QCP.equals, id); + DynamicObject paixu = BusinessDataServiceHelper.loadSingle("shkd_orgorderby", filter.toArray()); + if (paixu==null){ + //添加“集团内债务融资未抵消“合计行 + addheji(rowData); + }else { + DynamicObjectCollection shkd_entryentity = paixu.getDynamicObjectCollection("shkd_entryentity"); + // 创建一个HashMap来存储转换后的结果 + Map map = new HashMap<>(); + int s=0; + // 假设你可以通过遍历DynamicObjectCollection,来获取其中的元素 + for (DynamicObject obj : shkd_entryentity) { + DynamicObject key = obj.getDynamicObject("shkd_ywdy"); + int value = s++; + map.put(key.getString("number"), value); // 将键值对放入HashMap + } + + //按字段 组织配置 排序 + + Collections.sort(rowData , new Comparator(){ + @Override + public int compare(DynamicObject dynamicObject1, DynamicObject dynamicObject2) { + return (map.get(dynamicObject1.getString("shkd_orgnumber"))==null?100:map.get(dynamicObject1.getString("shkd_orgnumber")))-(map.get(dynamicObject2.getString("shkd_orgnumber"))==null?100:map.get(dynamicObject2.getString("shkd_orgnumber"))); + } + + }); + //添加“集团内债务融资未抵消“合计行 + addheji(rowData); + } + + + + } + + private void addheji(DynamicObjectCollection rowData){ + BigDecimal shkd_jtnbjkamount=new BigDecimal(0);//⑩集团内部借款金额 + BigDecimal shkd_jtnbjkrzcb=new BigDecimal(0);//⑩集团内部借款融资成本(%) + BigDecimal shkd_jtnbjkqx=new BigDecimal(0);//⑩集团内部借款期限 + for (DynamicObject rowDatum : rowData) { + shkd_jtnbjkamount.subtract(rowDatum.getBigDecimal("shkd_jtnbjkamount")); + shkd_jtnbjkrzcb.subtract(rowDatum.getBigDecimal("shkd_jtnbjkrzcb")); + shkd_jtnbjkqx.subtract(rowDatum.getBigDecimal("shkd_jtnbjkqx")); + } + DynamicObject dynamicObject = new DynamicObject(rowData.getDynamicObjectType()); + dynamicObject.set("shkd_org","合并抵消"); + dynamicObject.set("shkd_jtnbjkamount",shkd_jtnbjkamount); + dynamicObject.set("shkd_jtnbjkrzcb",shkd_jtnbjkrzcb); + dynamicObject.set("shkd_jtnbjkqx",shkd_jtnbjkqx); + rowData.add(dynamicObject); + } + + private List getSuperOrg(List org){ + //组织和其对应直接上级 + Map map = new HashMap(); + map=OrgUnitServiceHelper.getDirectSuperiorOrg(OrgViewType.OrgUnit, org); + + Set existingOrgs = new HashSet<>(map.keySet()); + + // 2. 遍历 map,检查每个组织 a 的上级是否存在于 existingOrgs 中 + List result = new ArrayList<>(); + for (Long orgId : map.keySet()) { + Long superior = map.get(orgId); // 获取当前组织的上级 + if (superior == null || !existingOrgs.contains(superior)) { + // 如果上级不存在(或为 null),则保留当前组织 + result.add(orgId); + } + // 否则(上级存在),不加入 result(相当于删除) + } + List longs = new ArrayList<>(result); + return longs; + } +} diff --git a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/report/FinanceReportfordatePlugin.java b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/report/FinanceReportfordatePlugin.java new file mode 100644 index 0000000..0a71f15 --- /dev/null +++ b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/report/FinanceReportfordatePlugin.java @@ -0,0 +1,280 @@ +package shkd.sys.sys.plugin.report; + +import kd.bos.algo.DataSet; +import kd.bos.algo.JoinDataSet; +import kd.bos.algo.JoinType; +import kd.bos.dataentity.entity.DynamicObject; +import kd.bos.dataentity.entity.DynamicObjectCollection; +import kd.bos.db.DB; +import kd.bos.db.DBRoute; +import kd.bos.entity.report.AbstractReportListDataPlugin; +import kd.bos.entity.report.FastFilter; +import kd.bos.entity.report.FilterItemInfo; +import kd.bos.entity.report.ReportQueryParam; +import kd.bos.entity.tree.TreeNode; +import kd.bos.logging.Log; +import kd.bos.logging.LogFactory; +import kd.bos.org.model.OrgTreeBuildType; +import kd.bos.org.model.OrgTreeParam; +import kd.bos.orm.query.QCP; +import kd.bos.orm.query.QFilter; +import kd.bos.servicehelper.BusinessDataServiceHelper; +import kd.bos.servicehelper.QueryServiceHelper; +import kd.bos.servicehelper.org.OrgUnitServiceHelper; +import kd.bos.servicehelper.org.OrgViewType; +import kd.bos.util.CollectionUtils; +import shkd.sys.sys.plugin.report.domain.FinanceVarietyEnum; + +import java.text.SimpleDateFormat; +import java.util.*; +import java.util.stream.Collectors; + +public class FinanceReportfordatePlugin extends AbstractReportListDataPlugin { + + private static final Log logger = LogFactory.getLog(FinanceReportfordatePlugin.class); + + public List getListQFilter(ReportQueryParam reportQueryParam) { + //过滤条件数组 + ArrayList filters = new ArrayList<>(); + //初始化过滤数据 + List initFilter = reportQueryParam.getFilter().getFilterItems(); + if (CollectionUtils.isNotEmpty(initFilter)) { + for (FilterItemInfo filterItemInfo : initFilter) { +// QFilter filter = new QFilter(filterItemInfo.getPropName(), filterItemInfo.getCompareType(), filterItemInfo.getValue()); + QFilter filter = new QFilter(filterItemInfo.getPropName(), QCP.equals, filterItemInfo.getValue()); + filters.add(filter); + } + } + //快速过滤 + FastFilter fastFilter = reportQueryParam.getFilter().getFastFilter(); + if (fastFilter != null) { + List fastFilterList = reportQueryParam.getFilter().getFastFilter().getQFilters(); + //添加过滤条件 + if (CollectionUtils.isNotEmpty(fastFilterList)) { + filters.addAll(fastFilterList); + } + } + return filters; + } + @Override + public DataSet query(ReportQueryParam reportQueryParam, Object o) throws Throwable { + //获取筛选器的值 + List listQFilter = getListQFilter(reportQueryParam); + String shkd_selstartdate=""; + String shkd_selenddate=""; + List dateList = new ArrayList<>(); + DynamicObject selorgDy = null; + Double shkd_selmoney=0.0; + DynamicObjectCollection shkd_seluserpower=null; + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + for (QFilter filter : listQFilter) { + if (filter.getProperty().contains("shkd_selorg")) { + selorgDy= (DynamicObject) filter.getValue(); + } else if (filter.getProperty().contains("shkd_selstartdate")) { + shkd_selstartdate=sdf.format(filter.getValue()); + } else if (filter.getProperty().contains("shkd_selenddate")) { + shkd_selenddate=sdf.format(filter.getValue()); + }else if (filter.getProperty().contains("shkd_selmoney")) { + shkd_selmoney= Double.parseDouble((String) filter.getValue()); + }else if (filter.getProperty().contains("shkd_seluserpower")){ + shkd_seluserpower=(DynamicObjectCollection) filter.getValue(); + } + } + + HashMap> map = new HashMap<>();//组织层级关系 + //如果有组织则单独处理,没有则走getOrgrelate方法 + if (shkd_seluserpower==null){ + getOrgrelate(map, selorgDy); + }else { + for (DynamicObject dynamicObject : shkd_seluserpower) { + Long id = dynamicObject.getLong("id");//业务单元id + List orgIds = new ArrayList<>(1); + orgIds.add(id); + //获取该组织的全部下级业务单元 + List allSubordinateOrgs = OrgUnitServiceHelper.getAllSubordinateOrgs(OrgViewType.OrgUnit, orgIds, true);//包括自己 + map.put(id,allSubordinateOrgs); + } + + } + + //根据组织关系配置sql + StringBuilder sqlBuilder = new StringBuilder("/*dialect*/ "); + getSQlBuilder(shkd_selstartdate,shkd_selenddate,map,sqlBuilder); + + logger.info("sqlBuilder信息:{}", sqlBuilder); + DataSet res = DB.queryDataSet(this.getClass().getSimpleName(), DBRoute.of("fi"), sqlBuilder.toString());//财务云 + + + + //业务单元数据集 + DataSet balanceDataSet = QueryServiceHelper.queryDataSet(this.getClass().getSimpleName(),"bos_org","id,number as shkd_orgnumber,name as shkd_org", null, null); + + JoinDataSet join = res.join(balanceDataSet, JoinType.INNER);//连接组织 + + + return null; + } + + public StringBuilder getSQlBuilder(String shkd_selstartdate,String shkd_selenddate,HashMap> map,StringBuilder sqlBuilder){ + //组装组织分类 + StringBuilder orgclass=new StringBuilder(" case \n"); + StringBuilder orgclass1=new StringBuilder(" case \n"); + for (Map.Entry> entry : map.entrySet()) { + Long key = entry.getKey(); + List valueList = entry.getValue(); + String result = valueList.toString(); + result = result.substring(1, result.length() - 1); + orgclass.append(" WHEN e.forgid IN ( "+result+" ) THEN "+key+" \n"); + orgclass1.append(" WHEN t5.fcompanyid IN ( "+result+" ) THEN "+key+" \n"); + } + orgclass.append(" ELSE NULL \n"); + orgclass.append(" END AS zz \n"); + orgclass1.append(" ELSE NULL \n"); + orgclass1.append(" END AS zz \n"); + + String zqrz = getrzpzId(FinanceVarietyEnum.zqrz, "cfm_financingvarieties");//获取债券融资的融资品种 + String dqjk = getrzpzId(FinanceVarietyEnum.dqjk, "cfm_financingvarieties");//获取短期借款的融资品种 + String zcqld = getrzpzId(FinanceVarietyEnum.zcqld, "cfm_financingvarieties");//获取中长期流贷的融资品种 + String xmdk = getrzpzId(FinanceVarietyEnum.xmdk, "cfm_financingvarieties");//获取项目贷款的融资品种 + String bxzjrz = getrzpzId(FinanceVarietyEnum.bxzjrz, "cfm_financingvarieties");//获取保险资金融资的融资品种 + String fjrqyjk = getrzpzId(FinanceVarietyEnum.fjrqyjk, "cfm_financingvarieties");//获取非金融企业借款的融资品种 + Map qtzwrz = getrzpzIdmap(FinanceVarietyEnum.qtzwrz, "cfm_financingvarieties");//获取其他债务融资的融资品种 + String jtnbjk = getrzpzId(FinanceVarietyEnum.jtnbjk, "cfm_financingvarieties");//获取集团内部借款的融资品种 + String yxd = getrzpzId(FinanceVarietyEnum.yxd, "cfm_financingvarieties");//获取永续债的融资品种 + String yxxt = getrzpzId(FinanceVarietyEnum.yxxt, "cfm_financingvarieties");//获取永续信托的融资品种 + Map qtqyrz = getrzpzIdmap(FinanceVarietyEnum.qtqyrz, "cfm_financingvarieties");//获取其他权益融资的融资品种 + + //开始拼接 + sqlBuilder.append("SELECT \n"); + sqlBuilder.append("SUM(CASE WHEN djlx='债券发行' AND rzpz in ("+zqrz+") AND starttime <= '"+shkd_selstartdate+"' AND endtime > '"+shkd_selstartdate+"' THEN je ELSE 0 END ) AS shkd_zqrzqcye,\n" + + " SUM(CASE WHEN djlx='债券发行' AND rzpz in ("+zqrz+") AND starttime > '"+shkd_selstartdate+"' AND starttime <= '"+shkd_selenddate+"' THEN je ELSE 0 END ) AS shkd_zqrzxzrze,\n" + + " SUM(CASE WHEN djlx='债券发行' AND rzpz in ("+zqrz+") AND endtime > '"+shkd_selstartdate+"' AND endtime <= '"+shkd_selenddate+"' THEN je ELSE 0 END ) AS shkd_zqrzxzhke,\n" + + " SUM(CASE WHEN djlx='债券发行' AND rzpz in ("+zqrz+") AND starttime <= '"+shkd_selenddate+"' AND endtime > '"+shkd_selenddate+"' THEN je ELSE 0 END ) AS shkd_zqrzqmye, \n");//①债券融资 + + sqlBuilder.append("SUM(CASE WHEN djlx='银行借款合同' AND rzpz in ("+dqjk+") AND starttime <= '"+shkd_selstartdate+" AND endtime > '"+shkd_selstartdate+"' THEN je ELSE 0 END ) AS ②短期借款期初余额,\n" + + " SUM(CASE WHEN djlx='银行借款合同' AND rzpz in ("+dqjk+") AND starttime > '"+shkd_selstartdate+"' AND starttime <= '"+shkd_selenddate+"' THEN je ELSE 0 END ) AS ②短期借款新增融资额,\n" + + " SUM(CASE WHEN djlx='银行借款合同' AND rzpz in ("+dqjk+") AND endtime > '"+shkd_selstartdate+"' AND endtime <= '"+shkd_selenddate+"' THEN je ELSE 0 END ) AS ②短期借款新增还款额,\n" + + " SUM(CASE WHEN djlx='银行借款合同' AND rzpz in ("+dqjk+") AND starttime <= '"+shkd_selenddate+"' AND endtime > '"+shkd_selenddate+"' THEN je ELSE 0 END ) AS ②短期借款期末余额,");//②短期借款 + + sqlBuilder.append("zz \n"); + + sqlBuilder.append("FROM\n" + + "(\n" + + "SELECT\n" + + "t1.fbillno,t1.ffinproductid as rzpz,rpentry.fexdrawamount as je,'债券发行' AS djlx,'' AS zqrlx,\n" + + "t1.fbizdate AS starttime,\n" + + "rpentry.fexrepaymentdate AS endtime,\n" + + orgclass + + "FROM\n" + + " t_cfm_loanbill t1 -- 债券发行\n" + + " INNER JOIN t_cfm_loanbill_e e ON e.fid = t1.fid -- 内连接组织拆分表\n" + + " INNER JOIN t_cfm_loanbill_rp_entry rpentry ON rpentry.fid = t1.fid -- 债券发行明细表\n" + + "WHERE\n" + + " t1.fbillstatus='C'\n" + + " UNION ALL\n" + + "SELECT \n" + + " t2.fbillno as fbillno,COALESCE( NULLIF ( t2.fk_shkd_basedatafield, 0 ), t2.ffinproductid ) AS rzpz,rpentry.fexdrawamount as je,'银行借款合同' AS djlx,'' AS zqrlx,\n" + + " t3.fbizdate AS starttime,\n" + + " rpentry.fexrepaymentdate AS endtime,\n" + + orgclass+ + "FROM\n" + + " t_cfm_loancontractbill t2 --银行借款合同\n" + + " INNER JOIN t_cfm_loancontractbill_e e ON e.fid = t2.fid -- 内连接组织拆分表\n" + + " INNER JOIN t_cfm_loanbill_e e1 ON e1.floancontractbillid = t2.fid -- 内连接合同拆分表\n" + + " INNER JOIN t_cfm_loanbill t3 ON t3.fid = e1.fid -- 银行提款处理表\n" + + " INNER JOIN t_cfm_loanbill_rp_entry rpentry ON rpentry.fid = t3.fid -- 银行提款处理明细表\n" + + "WHERE\n" + + " t2.fbillstatus='C' AND e.floantype IN ('loan','sl')\n" + + " AND t3.fbillstatus='C'\n" + + " UNION ALL\n" + + "SELECT\n" + + "t4.fbillno,t4.ffinproductid as rzpz,planmx.frentamt as je,'融资租赁合同' AS djlx,'' AS zqrlx,\n" + + "t4.fstartdate AS starttime,\n" + + "planmx.fpaydate AS endtime,\n" + + orgclass+ + "FROM\n" + + "t_cfm_loancontractbill t4 -- 融资租赁合同\n" + + "INNER JOIN t_cfm_loancontractbill_e e ON e.fid = t4.fid -- 内连接组织拆分表\n" + + "INNER JOIN t_cfm_contractbill_plan planmx ON planmx.fid = t4.fid -- 融资租赁合同明细表\n" + + "WHERE\n" + + " t4.fbillstatus='C' AND e.floantype='finlease'\n" + + " UNION ALL\n" + + " SELECT\n" + + "t5.fbillno, 6666666666666666666 as rzpz,t5.famount as je,'开票登记' AS djlx,'' AS zqrlx,\n" + + "t5.fissuedate AS starttime,\n" + + "t5.fdraftbillexpiredate AS endtime,\n" + + orgclass1+ + "FROM\n" + + "t_cdm_draftbill t5 -- 开票登记\n" + + "WHERE\n" + + " t5.fbillstatus='C'\n" + + " UNION ALL\n" + + " SELECT \n" + + " t2.fbillno as fbillno,COALESCE( NULLIF ( t2.fk_shkd_basedatafield, 0 ), t2.ffinproductid ) AS rzpz,rpentry.fexdrawamount as je,'企业借款合同' AS djlx,e.fcreditortype AS zqrlx,\n" + + " t3.fbizdate AS starttime,\n" + + "rpentry.fexrepaymentdate AS endtime,\n" + + orgclass+ + "FROM\n" + + " t_cfm_loancontractbill t2 --企业借款合同\n" + + " INNER JOIN t_cfm_loancontractbill_e e ON e.fid = t2.fid -- 内连接组织拆分表\n" + + " INNER JOIN t_cfm_loanbill_e e1 ON e1.floancontractbillid = t2.fid -- 内连接合同拆分表\n" + + " INNER JOIN t_cfm_loanbill t3 ON t3.fid = e1.fid -- 银行提款处理表\n" + + " INNER JOIN t_cfm_loanbill_rp_entry rpentry ON rpentry.fid = t3.fid -- 银行提款处理明细表\n" + + "WHERE\n" + + " t2.fbillstatus='C' AND e.floantype IN ('ec','entrust')\n" + + " AND t3.fbillstatus='C'\n" + + " ) AS hbb\n" + + " GROUP BY zz"); + + return sqlBuilder; + + } + + public HashMap> getOrgrelate(HashMap> map,DynamicObject selorgDy){ + // 查询该组织的直接下级业务单元 + OrgTreeParam orgTreeParam=new OrgTreeParam(); + orgTreeParam.setId(selorgDy.getLong("id")); + orgTreeParam.setOrgViewType(OrgViewType.OrgUnit);//设置视图方案为业务单元的 + orgTreeParam.setTreeBuildType(OrgTreeBuildType.FILL_HIDDEN_PARENT_DIRECT); + List treeNodes=OrgUnitServiceHelper.getTreeChildren(orgTreeParam); + + for (TreeNode treeNode : treeNodes) { + Long id = Long.valueOf(treeNode.getId());//业务单元id + List orgIds = new ArrayList<>(1); + orgIds.add(id); + //获取该组织的全部下级业务单元 + List allSubordinateOrgs = OrgUnitServiceHelper.getAllSubordinateOrgs(OrgViewType.OrgUnit, orgIds, true);//包括自己 + map.put(id,allSubordinateOrgs); + } + return map; + } + + public String getrzpzId(List rzpz,String entity){ + QFilter qFilter = new QFilter("name", QCP.in, rzpz); + DynamicObject[] ids = BusinessDataServiceHelper.load(entity, "id", qFilter.toArray()); + // 使用 Stream 来将 ids 数组转为逗号分隔的字符串 + String result = Arrays.stream(ids) + .map(id -> id.getString("id")) // 假设 getId() 返回 id 的值 + .collect(Collectors.joining(",")); + return result; + } + + + public Map getrzpzIdmap(Map> map , String entity){ + Map resmap = new HashMap<>(); + for (Map.Entry> entry : map.entrySet()){ + String key = entry.getKey(); + List values = entry.getValue(); + QFilter qFilter = new QFilter("name", QCP.in, values); + DynamicObject[] ids = BusinessDataServiceHelper.load(entity, "id", qFilter.toArray()); + // 使用 Stream 来将 ids 数组转为逗号分隔的字符串 + String result = Arrays.stream(ids) + .map(id -> id.getString("id")) // 假设 getId() 返回 id 的值 + .collect(Collectors.joining(",")); + resmap.put(key,result); + } + + return resmap; + } + +}