提交人:陈绍鑫

日期:2025/4/16 11:30
内容:金融统计报表优化
This commit is contained in:
陈绍鑫 2025-04-16 10:43:05 +08:00
parent da1cff7235
commit 191ecc255f
3 changed files with 617 additions and 3 deletions

View File

@ -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","合并抵消");

View File

@ -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<Long> orgIds = new ArrayList<>(1);
orgIds.add(pkValue);
List<Long> 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<Long> hasPermOrgs = userHasPermOrgs.getHasPermOrgs();
if (hasPermOrgs.size()==0){
this.getModel().setValue("shkd_seluserpower", null);
}else if (hasPermOrgs.size()!=0&&shkd_isone){//有组织权限隔离且在首层
//获取有权组织里级别高的根节点组织
List<Long> 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<AbstractReportColumn> columns = event.getColumns();
getColumns( columns,shkd_money);
}
public List getColumns(List columns,String shkd_money) {
//集团外债务融资
List<AbstractReportColumn> 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<AbstractReportColumn> 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<AbstractReportColumn> 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<AbstractReportColumn> 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<AbstractReportColumn> 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<AbstractReportColumn> 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<AbstractReportColumn> 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<AbstractReportColumn> 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<AbstractReportColumn> 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<AbstractReportColumn> 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<String, Integer> 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<DynamicObject>(){
@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<Long> getSuperOrg(List<Long> org){
//组织和其对应直接上级
Map<Long, Long> map = new HashMap();
map=OrgUnitServiceHelper.getDirectSuperiorOrg(OrgViewType.OrgUnit, org);
Set<Long> existingOrgs = new HashSet<>(map.keySet());
// 2. 遍历 map检查每个组织 a 的上级是否存在于 existingOrgs
List<Long> 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<Long> longs = new ArrayList<>(result);
return longs;
}
}

View File

@ -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<QFilter> getListQFilter(ReportQueryParam reportQueryParam) {
//过滤条件数组
ArrayList<QFilter> filters = new ArrayList<>();
//初始化过滤数据
List<FilterItemInfo> 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<QFilter> 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<QFilter> listQFilter = getListQFilter(reportQueryParam);
String shkd_selstartdate="";
String shkd_selenddate="";
List<String> 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<Long, List<Long>> map = new HashMap<>();//组织层级关系
//如果有组织则单独处理没有则走getOrgrelate方法
if (shkd_seluserpower==null){
getOrgrelate(map, selorgDy);
}else {
for (DynamicObject dynamicObject : shkd_seluserpower) {
Long id = dynamicObject.getLong("id");//业务单元id
List<Long> orgIds = new ArrayList<>(1);
orgIds.add(id);
//获取该组织的全部下级业务单元
List<Long> 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<Long, List<Long>> map,StringBuilder sqlBuilder){
//组装组织分类
StringBuilder orgclass=new StringBuilder(" case \n");
StringBuilder orgclass1=new StringBuilder(" case \n");
for (Map.Entry<Long, List<Long>> entry : map.entrySet()) {
Long key = entry.getKey();
List<Long> 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<String, String> 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<String, String> 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<Long, List<Long>> getOrgrelate(HashMap<Long, List<Long>> map,DynamicObject selorgDy){
// 查询该组织的直接下级业务单元
OrgTreeParam orgTreeParam=new OrgTreeParam();
orgTreeParam.setId(selorgDy.getLong("id"));
orgTreeParam.setOrgViewType(OrgViewType.OrgUnit);//设置视图方案为业务单元的
orgTreeParam.setTreeBuildType(OrgTreeBuildType.FILL_HIDDEN_PARENT_DIRECT);
List<TreeNode> treeNodes=OrgUnitServiceHelper.getTreeChildren(orgTreeParam);
for (TreeNode treeNode : treeNodes) {
Long id = Long.valueOf(treeNode.getId());//业务单元id
List<Long> orgIds = new ArrayList<>(1);
orgIds.add(id);
//获取该组织的全部下级业务单元
List<Long> allSubordinateOrgs = OrgUnitServiceHelper.getAllSubordinateOrgs(OrgViewType.OrgUnit, orgIds, true);//包括自己
map.put(id,allSubordinateOrgs);
}
return map;
}
public String getrzpzId(List<String> 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<String, String> getrzpzIdmap(Map<String, List<String>> map , String entity){
Map<String, String> resmap = new HashMap<>();
for (Map.Entry<String, List<String>> entry : map.entrySet()){
String key = entry.getKey();
List<String> 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;
}
}