提交人:陈绍鑫

日期:2025/7/10 17:00
内容:银行账户报表开发
This commit is contained in:
陈绍鑫 2025-07-10 16:15:26 +08:00
parent cd43de0e67
commit 0a093752ad
1 changed files with 123 additions and 0 deletions

View File

@ -0,0 +1,123 @@
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.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.logging.Log;
import kd.bos.logging.LogFactory;
import kd.bos.orm.ORM;
import kd.bos.orm.query.QCP;
import kd.bos.orm.query.QFilter;
import kd.bos.servicehelper.QueryServiceHelper;
import kd.bos.util.CollectionUtils;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
public class AccountbankReportPlugin extends AbstractReportListDataPlugin {
private static final Log logger = LogFactory.getLog(AccountbankReportPlugin.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);
List<String> dateList = new ArrayList<>();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
for (QFilter filter : listQFilter) {
if (filter.getProperty().contains("shkd_datefield")) {
dateList.add(sdf.format(filter.getValue()));
}
}
String selectFields="id,openorg.shkd_comcode as shkd_ssjtbm,openorg.shkd_comname as shkd_ssjtmc," +
"openorg.number as shkd_khdwbm,openorg.name as shkd_khdwmc," +
"openorg.shkd_comlevel as shkd_khdwqyjc,acctname as shkd_zhmc,bankaccountnumber as shkd_yhzh," +
"shkd_subcompany as shkd_sfwnbdwzh,bank.name as shkd_khhmc,bank.number as shkd_khhbm," +
"bank.country.name as shkd_khhszgj,shkd_bank_head_office as shkd_khhzh,currency," +
// "123 as shkd_zhyeyb,123 as shkd_zhyebb,"+"'2025-07-09 11:31:12'"+" as shkd_zhyesj," +
"shkd_accounttype as shkd_zhytbm,case when issetbankinterface=1 then '是' else '否' end as shkd_ktyqjk,shkd_direct_time1 as shkd_ktyqsj," +
"shkd_accounttype as shkd_zhytmc,fundaccflag as shkd_jzjzzhbs,case when closedate IS NULL then acctstatus else (case when closedate>'"+dateList.get(0)+"' then 'normal' else 'closed' end) end as shkd_zhzt,closedate as shkd_xhrq," +
"opendate as shkd_khrq,'"+dateList.get(0)+"' as shkd_sjrq,case when ismoneypool=1 then '是' else '否' end as shkd_sfzjczh";
//银行账户数据集
DataSet accountbankDataSet = QueryServiceHelper.queryDataSet(this.getClass().getSimpleName(),"am_accountbank",
selectFields
, null, null);
String[] fieldNames = accountbankDataSet.getRowMeta().getFieldNames();
// 创建一个新的数组长度是原数组长度 + 2因为要添加两个字段
String[] newFieldNames = new String[fieldNames.length + 2];
// 将原来的字段名数组复制到新数组
System.arraycopy(fieldNames, 0, newFieldNames, 0, fieldNames.length);
// 添加两个新的字段到新数组的末尾
newFieldNames[fieldNames.length] = "fid"; // 第一个新字段
newFieldNames[fieldNames.length + 1] = "fbasedataid as shkd_bz"; // 第二个新字段
// 查询多选币别
DataSet currencydata = DB.queryDataSet(this.getClass().getSimpleName(), DBRoute.of("sys"),
"select fid,fbasedataid from t_bd_accountbanks_cur");//系统云
JoinDataSet join = accountbankDataSet.join(currencydata, JoinType.INNER);//内连接
DataSet finish = join.on("id", "fid").select(newFieldNames).finish();
String[] fieldNames1 = finish.getRowMeta().getFieldNames();
// 创建一个新的数组长度是原数组长度 + 2因为要添加两个字段
String[] newFieldNames1 = new String[fieldNames1.length + 2];
// 将原来的字段名数组复制到新数组
System.arraycopy(fieldNames1, 0, newFieldNames1, 0, fieldNames1.length);
// 添加两个新的字段到新数组的末尾
newFieldNames1[fieldNames1.length] = "shkd_zhyeyb"; // 第一个新字段
newFieldNames1[fieldNames1.length + 1] = "shkd_zhyebb"; // 第二个新字段
newFieldNames1[fieldNames1.length + 2] = "shkd_zhyesj"; // 第三个新字段
// DynamicObjectCollection srcCollection = ORM.create().toPlainDynamicObjectCollection(finish.copy());
//查询余额
StringBuilder sqlBuilder = new StringBuilder("/*dialect*/ \n");
sqlBuilder.append("SELECT fbankacctid ,SUM(FDebitAmount-FCreditAmount) as shkd_zhyeyb,SUM(FDebitAmount*fexchangerate-FCreditAmount*fexchangerate) as shkd_zhyebb,fcurrencyid,MAX(FBizDate) as shkd_zhyesj\n" +
"FROM t_cas_bankjournal \n" +
"GROUP BY fbankacctid, fcurrencyid");
DataSet res = DB.queryDataSet(this.getClass().getSimpleName(), DBRoute.of("fi"), sqlBuilder.toString());//财务云
JoinDataSet join1 = finish.join(res, JoinType.LEFT);//左连接
DataSet finish1 = join1.on("id", "fbankacctid").on("shkd_bz", "fcurrencyid").select(newFieldNames1).finish();
DynamicObjectCollection srcCollection = ORM.create().toPlainDynamicObjectCollection(finish1.copy());
return finish1;
}
}