银行头寸表
This commit is contained in:
		
							parent
							
								
									c9a99e8613
								
							
						
					
					
						commit
						8e95710c66
					
				|  | @ -0,0 +1,68 @@ | |||
| package shjh.jhzj7.fi.fi.plugin.report; | ||||
| 
 | ||||
| import kd.bos.dataentity.entity.DynamicObject; | ||||
| import kd.bos.dataentity.entity.DynamicObjectCollection; | ||||
| import kd.bos.entity.report.ReportQueryParam; | ||||
| import kd.bos.report.plugin.AbstractReportFormPlugin; | ||||
| import kd.sdk.plugin.Plugin; | ||||
| 
 | ||||
| import java.math.BigDecimal; | ||||
| import java.util.Iterator; | ||||
| 
 | ||||
| /** | ||||
|  * 报表界面插件 | ||||
|  * 银行头寸表 | ||||
|  */ | ||||
| public class BankInfoFormReport extends AbstractReportFormPlugin implements Plugin { | ||||
| 
 | ||||
|     private static final String[] NEED_FIELDS = { | ||||
|             "shjh_accountname", "shjh_accountnumber", "shjh_currencynumber", "shjh_bankname", | ||||
|             "shjh_openbankname", "shjh_hostbankname", "shjh_hostbankbra", "shjh_accttype", | ||||
|             "shjh_acctstatus", "shjh_orgname", "shjh_acctstyle", "shjh_fixedfield1", | ||||
|             "shjh_fixedfield2", "shjh_fixedfield3", "shjh_monthamt", "shjh_yearamt", | ||||
|             "shjh_daymat", "shjh_availablebalance", "shjh_accountblance", "shjh_finalposition", | ||||
|             "shjh_exchangerate", "shjh_monthamt1", "shjh_yearamt1", "shjh_daymat1", | ||||
|             "shjh_availablebalance1", "shjh_accountblance1", "shjh_finalposition1", "shjh_textfield", | ||||
|             "shjh_fixedfield4", "shjh_sfzl", "shjh_province", "shjh_city", "shjh_fixedfield5", | ||||
|             "shjh_acctoutin", "shjh_fixedfield6", "shjh_fixedfield7", "shjh_fixedfield8", | ||||
|             "shjh_fixedfield9", "shjh_fixedfield10", "shjh_datetimefield", "shjh_datetimefield1"}; | ||||
| 
 | ||||
|     @Override | ||||
|     public void processRowData(String gridPK, DynamicObjectCollection rowData, ReportQueryParam queryParam) { | ||||
|         super.processRowData(gridPK, rowData, queryParam); | ||||
|         Iterator<DynamicObject> iterator = rowData.iterator(); | ||||
|         while (iterator.hasNext()) { | ||||
|             DynamicObject row = iterator.next(); | ||||
|             BigDecimal amount = row.getBigDecimal(NEED_FIELDS[14]); | ||||
|             if (amount != null && amount.compareTo(BigDecimal.ZERO) != 0) { | ||||
|                 row.set(NEED_FIELDS[15], amount); | ||||
|                 row.set(NEED_FIELDS[16], amount); | ||||
|                 row.set(NEED_FIELDS[17], amount); | ||||
|                 row.set(NEED_FIELDS[18], amount); | ||||
|                 row.set(NEED_FIELDS[19], amount); | ||||
|                 BigDecimal rate = row.getBigDecimal(NEED_FIELDS[20]); | ||||
|                 if (rate != null && rate.compareTo(BigDecimal.ZERO) != 0) { | ||||
|                     //按照最新头寸取值时间获取银行账户最后一笔交易明细中的余额*汇率 | ||||
|                     BigDecimal multiply = rate.multiply(amount); | ||||
|                     row.set(NEED_FIELDS[21], multiply); | ||||
|                     row.set(NEED_FIELDS[22], multiply); | ||||
|                     row.set(NEED_FIELDS[23], multiply); | ||||
|                     row.set(NEED_FIELDS[24], multiply); | ||||
|                     row.set(NEED_FIELDS[25], multiply); | ||||
|                     row.set(NEED_FIELDS[26], multiply); | ||||
|                 } | ||||
|             } | ||||
|             //【城市】:银行账户的开户行中城市名称,需要去掉“市”字 | ||||
|             String cityName = row.getString(NEED_FIELDS[32]); | ||||
|             if (cityName != null && cityName.endsWith("市")) { | ||||
|                 cityName = cityName.substring(0, cityName.length() - 1); | ||||
|                 row.set(NEED_FIELDS[32],cityName); | ||||
|             } | ||||
|             //【币种】:CNY需要转换为RMB | ||||
|             String currencyNumber= row.getString(NEED_FIELDS[2]); | ||||
|             if (currencyNumber!=null && currencyNumber.contains("CNY")){ | ||||
|                 row.set(NEED_FIELDS[2], currencyNumber.replace("CNY", "RMB")); | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | @ -0,0 +1,220 @@ | |||
| package shjh.jhzj7.fi.fi.plugin.report; | ||||
| 
 | ||||
| import kd.bos.algo.DataSet; | ||||
| import kd.bos.algo.GroupbyDataSet; | ||||
| import kd.bos.dataentity.entity.DynamicObject; | ||||
| import kd.bos.entity.report.AbstractReportListDataPlugin; | ||||
| import kd.bos.entity.report.FilterItemInfo; | ||||
| import kd.bos.entity.report.ReportQueryParam; | ||||
| import kd.bos.orm.query.QCP; | ||||
| import kd.bos.orm.query.QFilter; | ||||
| import kd.bos.servicehelper.QueryServiceHelper; | ||||
| import kd.sdk.plugin.Plugin; | ||||
| 
 | ||||
| import java.text.SimpleDateFormat; | ||||
| import java.util.ArrayList; | ||||
| import java.util.Date; | ||||
| import java.util.List; | ||||
| import java.util.concurrent.TimeUnit; | ||||
| 
 | ||||
| /** | ||||
|  * 报表取数插件 | ||||
|  * 银行头寸表 | ||||
|  */ | ||||
| public class BankInfoListReport extends AbstractReportListDataPlugin implements Plugin { | ||||
| 
 | ||||
|     private static final String[] BANK_FIELDS = { | ||||
|             "company.name","bankaccountnumber","currency.fbasedataid","bank.shjh_extname","name","bank.shjh_hostname", | ||||
|             "accttype","acctstatus","openorg.name","acctstyle","issetbankinterface","bank.province.name","bank.city.name", | ||||
|             "shjh_acctoutin","id" | ||||
|     }; | ||||
| 
 | ||||
|     private static final String[] DETAIL_FIELDS = { | ||||
|             "accountbank","transbalance","bizdate" | ||||
|     }; | ||||
| 
 | ||||
|     private static final String[] CURRENCY_FIELDS = { | ||||
|             "id","number" | ||||
|     }; | ||||
| 
 | ||||
|     private static final String[] NEED_FIELDS = { | ||||
|             "shjh_accountname","shjh_accountnumber","shjh_currencynumber","shjh_bankname", | ||||
|             "shjh_openbankname","shjh_hostbankname","shjh_hostbankbra","shjh_accttype", | ||||
|             "shjh_acctstatus","shjh_orgname","shjh_acctstyle","shjh_fixedfield1", | ||||
|             "shjh_fixedfield2","shjh_fixedfield3","shjh_monthamt","shjh_yearamt", | ||||
|             "shjh_daymat","shjh_availablebalance","shjh_accountblance","shjh_finalposition", | ||||
|             "shjh_exchangerate","shjh_monthamt1","shjh_yearamt1","shjh_daymat1", | ||||
|             "shjh_availablebalance1","shjh_accountblance1","shjh_finalposition1","shjh_textfield", | ||||
|             "shjh_fixedfield4","shjh_sfzl","shjh_province","shjh_city","shjh_fixedfield5", | ||||
|             "shjh_acctoutin","shjh_fixedfield6","shjh_fixedfield7","shjh_fixedfield8", | ||||
|             "shjh_fixedfield9","shjh_fixedfield10","shjh_datetimefield","shjh_datetimefield1"}; | ||||
| 
 | ||||
|     @Override | ||||
|     public DataSet query(ReportQueryParam reportQueryParam, Object o) throws Throwable { | ||||
| 
 | ||||
|         StringBuilder selectFields = new StringBuilder(); | ||||
|         selectFields.append(BANK_FIELDS[0]).append(" AS ").append(NEED_FIELDS[0]).append(",") | ||||
|                 .append(BANK_FIELDS[1]).append(" AS ").append(NEED_FIELDS[1]).append(",") | ||||
|                 .append(BANK_FIELDS[3]).append(" AS ").append(NEED_FIELDS[3]).append(",") | ||||
|                 .append(BANK_FIELDS[4]).append(" AS ").append(NEED_FIELDS[4]).append(",") | ||||
|                 .append(BANK_FIELDS[5]).append(" AS ").append(NEED_FIELDS[5]).append(",") | ||||
|                 .append("'其他'").append(" ").append(NEED_FIELDS[6]).append(",") | ||||
|                 .append(BANK_FIELDS[6]).append(" AS ").append(NEED_FIELDS[7]).append(",") | ||||
|                 .append(BANK_FIELDS[7]).append(" AS ").append(NEED_FIELDS[8]).append(",") | ||||
|                 .append(BANK_FIELDS[8]).append(" AS ").append(NEED_FIELDS[9]).append(",") | ||||
|                 .append(BANK_FIELDS[9]).append(" AS ").append(NEED_FIELDS[10]).append(",") | ||||
|                 .append("'上海家化'").append(" ").append(NEED_FIELDS[11]).append(",") | ||||
|                 .append("'上海家化'").append(" ").append(NEED_FIELDS[12]).append(",") | ||||
|                 .append("'上海家化'").append(" ").append(NEED_FIELDS[13]).append(",") | ||||
|                 .append("1").append(" ").append(NEED_FIELDS[20]).append(",") | ||||
|                 .append("'是'").append(" ").append(NEED_FIELDS[28]).append(",") | ||||
|                 .append(BANK_FIELDS[10]).append(" AS ").append(NEED_FIELDS[29]).append(",") | ||||
|                 .append(BANK_FIELDS[11]).append(" AS ").append(NEED_FIELDS[30]).append(",") | ||||
|                 .append(BANK_FIELDS[12]).append(" AS ").append(NEED_FIELDS[31]).append(",") | ||||
|                 .append("'否'").append(" ").append(NEED_FIELDS[32]).append(",") | ||||
|                 .append(BANK_FIELDS[13]).append(" AS ").append(NEED_FIELDS[33]).append(",") | ||||
|                 .append("'上海家化'").append(" ").append(NEED_FIELDS[34]).append(",") | ||||
|                 .append("'上海家化'").append(" ").append(NEED_FIELDS[35]).append(",") | ||||
|                 .append("'非金板块'").append(" ").append(NEED_FIELDS[36]).append(",") | ||||
|                 .append("'是'").append(" ").append(NEED_FIELDS[37]).append(",") | ||||
|                 .append("'EX-ZENGWEI257'").append(" ").append(NEED_FIELDS[38]).append(","); | ||||
| 
 | ||||
| 
 | ||||
|         List<FilterItemInfo> filterItems = reportQueryParam.getFilter().getFilterItems(); | ||||
|         List<QFilter> qFilters1=new ArrayList<>(); | ||||
|         List<QFilter> qFilters2=new ArrayList<>(); | ||||
|         List<String> typeList =new ArrayList<>(); | ||||
|         List<String> statusList =new ArrayList<>(); | ||||
|         List<String> styleList =new ArrayList<>(); | ||||
|         String accrualDate=null; | ||||
|         Long bankId=null; | ||||
|         for (FilterItemInfo filterItem : filterItems) { | ||||
|             switch (filterItem.getPropName()){ | ||||
|                 case "shjh_date": | ||||
|                     accrualDate=(filterItem.getDate()==null) ? null:new SimpleDateFormat("yyyy-MM-dd").format(filterItem.getDate()); | ||||
|                     selectFields.append("'").append(accrualDate).append("'").append(" ").append(NEED_FIELDS[27]); | ||||
|                     // 计算当前日期的下一天(用于 less_than 条件) | ||||
|                     Date nextDay = new Date(filterItem.getDate().getTime() + TimeUnit.DAYS.toMillis(1)); | ||||
|                     qFilters2.add(new QFilter("bizdate", QCP.large_equals,filterItem.getDate())); | ||||
|                     qFilters2.add(new QFilter("bizdate",QCP.less_than,nextDay)); | ||||
|                     break; | ||||
|                 case "shjh_filteraccttype": | ||||
|                     String type = (String) filterItem.getValue(); | ||||
|                     if (type!=null){ | ||||
|                         // 1. 按逗号拆分 | ||||
|                         String[] parts = type.split(","); | ||||
|                         // 2. 遍历数组,跳过空字符串 | ||||
|                         for (String part : parts) { | ||||
|                             if (!part.isEmpty()) {  // 过滤掉空字符串(如开头和结尾的逗号) | ||||
|                                 typeList.add(part); | ||||
|                             } | ||||
|                         } | ||||
|                         qFilters1.add(new QFilter("accttype", QCP.in,typeList)); | ||||
|                     } | ||||
|                     break; | ||||
|                 case "shjh_filteracctstatus": | ||||
|                     String status = (String) filterItem.getValue(); | ||||
|                     if (status!=null){ | ||||
|                         String[] parts = status.split(","); | ||||
|                         for (String part : parts) { | ||||
|                             if (!part.isEmpty()) { | ||||
|                                 statusList.add(part); | ||||
|                             } | ||||
|                         } | ||||
|                         qFilters1.add(new QFilter("acctstatus", QCP.in,statusList)); | ||||
|                     } | ||||
|                     break; | ||||
|                 case "shjh_filteracctstyle": | ||||
|                     String style = (String) filterItem.getValue(); | ||||
|                     if (style!=null){ | ||||
|                         String[] parts = style.split(","); | ||||
|                         for (String part : parts) { | ||||
|                             if (!part.isEmpty()) { | ||||
|                                 styleList.add(part); | ||||
|                             } | ||||
|                         } | ||||
|                         qFilters1.add(new QFilter("acctstyle", QCP.in,styleList)); | ||||
|                     } | ||||
|                     break; | ||||
|                 case "shjh_bank": | ||||
|                     bankId=(filterItem.getValue()==null) ? null: (Long) ((DynamicObject)filterItem.getValue()).getPkValue(); | ||||
|                     break; | ||||
|                 default: | ||||
|                     break; | ||||
|             } | ||||
|         } | ||||
|         if (bankId!=null){ | ||||
|             qFilters1.add(new QFilter("id",QCP.equals,bankId)); | ||||
|         } | ||||
|         selectFields.append(",").append(BANK_FIELDS[14]) | ||||
|                 .append(",").append(BANK_FIELDS[2]).append(" AS currid"); | ||||
|         //银行账户 | ||||
|         DataSet mainDataSet = QueryServiceHelper.queryDataSet( | ||||
|                 this.getClass().getName(), | ||||
|                 "am_accountbank", | ||||
|                 String.valueOf(selectFields), | ||||
|                 qFilters1.toArray(new QFilter[]{}), | ||||
|                 null | ||||
|         ); | ||||
| 
 | ||||
|         //查询币别 | ||||
|         DataSet regionDataSet = QueryServiceHelper.queryDataSet(this.getClass().getName()+"currency", "bd_currency", | ||||
|                 "id, number as shjh_currencynumber", null, null); | ||||
|         // join连接2个数据 | ||||
|         DataSet resultDataSet = mainDataSet.copy().leftJoin(regionDataSet).on("currid", "id") | ||||
|                 .select(new String[]{ | ||||
|                         "shjh_accountname","shjh_accountnumber", | ||||
|                         "shjh_bankname", "shjh_openbankname","shjh_hostbankname","shjh_hostbankbra", | ||||
|                         "shjh_accttype", "shjh_acctstatus","shjh_orgname","shjh_acctstyle","shjh_fixedfield1", | ||||
|                         "shjh_fixedfield2","shjh_fixedfield3", "shjh_exchangerate", | ||||
|                         "shjh_textfield", "shjh_fixedfield4","shjh_sfzl","shjh_province","shjh_city", | ||||
|                         "shjh_fixedfield5", "shjh_acctoutin","shjh_fixedfield6","shjh_fixedfield7", | ||||
|                         "shjh_fixedfield8", "shjh_fixedfield9","shjh_fixedfield10","id"}, new String[]{"shjh_currencynumber"}).finish(); | ||||
| 
 | ||||
|         // 将币别名称做分组合并 | ||||
|         GroupbyDataSet groupbyDataSet = resultDataSet.groupBy(new String[]{ | ||||
|                 "shjh_accountname","shjh_accountnumber", | ||||
|                 "shjh_bankname", "shjh_openbankname","shjh_hostbankname","shjh_hostbankbra", | ||||
|                 "shjh_accttype", "shjh_acctstatus","shjh_orgname","shjh_acctstyle","shjh_fixedfield1", | ||||
|                 "shjh_fixedfield2","shjh_fixedfield3", "shjh_exchangerate", | ||||
|                 "shjh_textfield", "shjh_fixedfield4","shjh_sfzl","shjh_province","shjh_city", | ||||
|                 "shjh_fixedfield5", "shjh_acctoutin","shjh_fixedfield6","shjh_fixedfield7", | ||||
|                 "shjh_fixedfield8", "shjh_fixedfield9","shjh_fixedfield10","id"}); | ||||
| 
 | ||||
|         //然后以;隔开 | ||||
|         resultDataSet = groupbyDataSet.groupConcat("shjh_currencynumber",null,";").finish(); | ||||
| 
 | ||||
|         //收款入账中心-流水 | ||||
|         DataSet detailsDataSet = QueryServiceHelper.queryDataSet( | ||||
|                 this.getClass().getName() + "details", | ||||
|                 "bei_intelrec","accountbank,biztime,transbalance AS shjh_monthamt", | ||||
|                 qFilters2.toArray(new QFilter[]{}), | ||||
|                 null); | ||||
| 
 | ||||
| 
 | ||||
|         //取最大日期 | ||||
|         DataSet maxDataSet=detailsDataSet.groupBy(new String[]{"accountbank"}).max("biztime").finish(); | ||||
|         //重新排序 | ||||
|         maxDataSet=maxDataSet.join(detailsDataSet) | ||||
|                 .on("accountbank","accountbank") | ||||
|                 .select(new String[]{"accountbank","shjh_monthamt","biztime"}) | ||||
|                 .finish(); | ||||
|         //过滤金额=null的数据 | ||||
|         maxDataSet=maxDataSet.filter("shjh_monthamt <> null"); | ||||
| 
 | ||||
|         //合并 | ||||
|         DataSet dataSet = resultDataSet.join(maxDataSet) | ||||
|                 .on("id", "accountbank") | ||||
|                 .select(new String[]{ | ||||
|                         "shjh_accountname","shjh_accountnumber","shjh_currencynumber", | ||||
|                         "shjh_bankname", "shjh_openbankname","shjh_hostbankname","shjh_hostbankbra", | ||||
|                         "shjh_accttype", "shjh_acctstatus","shjh_orgname","shjh_acctstyle","shjh_fixedfield1", | ||||
|                         "shjh_fixedfield2","shjh_fixedfield3","shjh_monthamt", "shjh_exchangerate", | ||||
|                         "shjh_textfield", "shjh_fixedfield4","shjh_sfzl","shjh_province","shjh_city", | ||||
|                         "shjh_fixedfield5", "shjh_acctoutin","shjh_fixedfield6","shjh_fixedfield7", | ||||
|                         "shjh_fixedfield8", "shjh_fixedfield9","shjh_fixedfield10"}) | ||||
|                 .finish(); | ||||
| 
 | ||||
|         return dataSet; | ||||
|     } | ||||
| } | ||||
|  | @ -52,7 +52,7 @@ public class FinancialFormReport extends AbstractReportFormPlugin implements Plu | |||
|     @Override | ||||
|     public void processRowData(String gridPK, DynamicObjectCollection rowData, ReportQueryParam queryParam) { | ||||
|         super.processRowData(gridPK, rowData, queryParam); | ||||
| 
 | ||||
|          | ||||
|         // 获取筛选条件中的计提日 | ||||
|         Date accrualDate = queryParam.getFilter().getDate(FILTER_DATE); | ||||
|         Calendar calendar = Calendar.getInstance(); | ||||
|  |  | |||
|  | @ -177,4 +177,6 @@ public class ReportUtils { | |||
|         return cal1.get(Calendar.YEAR) == cal2.get(Calendar.YEAR); | ||||
|     } | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| } | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue