提交人:陈绍鑫

日期:2025/4/23 16:30
内容:上划下拨(new)插件
This commit is contained in:
陈绍鑫 2025-04-25 12:27:31 +08:00
parent 0c671f638f
commit 001f64c6a0
4 changed files with 616 additions and 96 deletions

View File

@ -6,23 +6,41 @@
package shkd.sys.sys.plugin.report;
import com.alibaba.fastjson.JSONArray;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
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.report.FilterInfo;
import kd.bos.entity.report.ReportQueryParam;
import kd.bos.form.control.events.FilterContainerInitEvent;
import kd.bos.form.events.FilterContainerSearchClickArgs;
import kd.bos.form.field.BasedataEdit;
import kd.bos.form.field.events.BeforeFilterF7SelectEvent;
import kd.bos.orm.query.QFilter;
import kd.bos.report.ReportShowParameter;
import kd.bos.report.events.ColHeadFilterClickEvent;
import kd.bos.report.events.CreateFilterInfoEvent;
import kd.bos.report.events.SortAndFilterEvent;
import kd.bos.report.filter.ReportFilter;
import kd.bos.report.plugin.AbstractReportFormPlugin;
import kd.bos.servicehelper.QueryServiceHelper;
import kd.tmc.fbp.common.helper.TmcOrgDataHelper;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class transbilldetailreportnewFormPlugin extends AbstractReportFormPlugin {
@Override
public void beforeCreateFilterInfo(CreateFilterInfoEvent event) {
super.beforeCreateFilterInfo(event);
}
public void initDefaultQueryParam(ReportQueryParam queryParam) {
List<Long> authOrgList = TmcOrgDataHelper.getAuthorizedBankOrgId(RequestContext.get().getCurrUserId(), this.getView().getFormShowParameter().getAppId(), this.getModel().getDataEntityType().getName(), "47150e89000000ac");
BasedataEdit org = (BasedataEdit)this.getControl("filter_org");
@ -61,6 +79,11 @@ public class transbilldetailreportnewFormPlugin extends AbstractReportFormPlugin
this.getModel().setValue("filter_currency", accountGroupIds.toArray());
}
if (customParams.get("filter_accountbank") != null) {
accountGroupIds = (JSONArray)customParams.get("filter_accountbank");
this.getModel().setValue("filter_accountbank", accountGroupIds.toArray());
}
if (customParams.get("filter_accountgroup") != null) {
accountGroupIds = (JSONArray)customParams.get("filter_accountgroup");
this.getModel().setValue("filter_accountgroup", accountGroupIds.toArray());
@ -76,6 +99,7 @@ public class transbilldetailreportnewFormPlugin extends AbstractReportFormPlugin
this.getModel().setValue("filter_statcurrency", customParams.get("filter_statcurrency"));
this.getModel().setValue("filter_currencyunit", customParams.get("filter_currencyunit"));
ReportFilter rptFilter = (ReportFilter)this.getControl("reportfilterap");
this.getModel().setValue("accountbank", "666");
rptFilter.search();
}
}
@ -121,4 +145,38 @@ public class transbilldetailreportnewFormPlugin extends AbstractReportFormPlugin
}).collect(Collectors.toList());
}
@Override
public void setSortAndFilter(List<SortAndFilterEvent> list) {
super.setSortAndFilter(list);
}
@Override
protected void filterContainerInit(FilterContainerInitEvent contInitEvent, ReportQueryParam queryParam) {
super.filterContainerInit(contInitEvent, queryParam);
}
@Override
public void loadOtherEntryFilter(DynamicObject scheme) {
super.loadOtherEntryFilter(scheme);
}
@Override
public void colHeadFilterClick(ColHeadFilterClickEvent event) {
super.colHeadFilterClick(event);
}
@Override
public void filterContainerBeforeF7Select(BeforeFilterF7SelectEvent args) {
super.filterContainerBeforeF7Select(args);
}
@Override
public void filterContainerSearchClick(FilterContainerSearchClickArgs args) {
super.filterContainerSearchClick(args);
}
@Override
public void setOtherEntryFilter(FilterInfo filterInfo) {
super.setOtherEntryFilter(filterInfo);
}
}

View File

@ -0,0 +1,157 @@
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//
package shkd.sys.sys.plugin.report;
import kd.bos.algo.DataSet;
import kd.bos.dataentity.entity.DataEntityBase;
import kd.bos.dataentity.entity.DynamicObjectCollection;
import kd.bos.dataentity.utils.StringUtils;
import kd.bos.entity.report.ReportQueryParam;
import kd.bos.orm.query.QFilter;
import kd.bos.servicehelper.QueryServiceHelper;
import kd.tmc.fbp.common.util.DateUtils;
import kd.tmc.fbp.report.data.AbstractTmcTreeReportDataPlugin;
import kd.tmc.fca.common.enums.FcaTransDetailStatusEnum;
import kd.tmc.fca.common.enums.FcaTransPayStatusEnum;
import kd.tmc.fca.common.enums.StatisCycleEnum;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class transbilldetailreportnewPlugin extends AbstractTmcTreeReportDataPlugin {
private static final String UP_SELECT = "bank.name as bank, company.name as parentorg, entrys.subacct_company.name as sonorg, entrys.inneracctbank.number as inneraccount, entrys.subacct.number as accountbank, entrys.paydate as paydate, currency, 'fca_transupbill' as biztype, entrys.transamt as upamount, null as downamount, billno, id";
private static final String DOWN_SELECT = "bank.name as bank, company.name as parentorg, entrys.subacct_company.name as sonorg, entrys.inneracctbank.number as inneraccount, entrys.subacct.number as accountbank, entrys.paydate as paydate, currency, 'fca_transdownbill' as biztype, null as upamount, entrys.transamt as downamount, billno, id";
private static final String ORDER_SELECT = "bank , company, entrys.paydate, id";
public transbilldetailreportnewPlugin() {
}
public DataSet queryDataSet(ReportQueryParam reportQueryParam) {
Map<String, Object> paramMap = this.transQueryParam(reportQueryParam);
String bizType = String.valueOf(paramMap.get("filter_biztype"));
QFilter filter = this.initFilter(paramMap);
DataSet dataSet = null;
if (bizType.contains("fca_transupbill")) {
dataSet = QueryServiceHelper.queryDataSet("fca_transupbill", "fca_transupbill", "bank.name as bank, company.name as parentorg, entrys.subacct_company.name as sonorg, entrys.inneracctbank.number as inneraccount, entrys.subacct.number as accountbank, entrys.paydate as paydate, currency, 'fca_transupbill' as biztype, entrys.transamt as upamount, null as downamount, billno, id", filter.toArray(), "bank , company, entrys.paydate, id");
}
if (bizType.contains("fca_transdownbill")) {
DataSet downDataSet = QueryServiceHelper.queryDataSet("fca_transdownbill", "fca_transdownbill", "bank.name as bank, company.name as parentorg, entrys.subacct_company.name as sonorg, entrys.inneracctbank.number as inneraccount, entrys.subacct.number as accountbank, entrys.paydate as paydate, currency, 'fca_transdownbill' as biztype, null as upamount, entrys.transamt as downamount, billno, id", filter.toArray(), "bank , company, entrys.paydate, id");
if (dataSet != null) {
dataSet = dataSet.union(downDataSet);
} else {
dataSet = downDataSet;
}
}
return dataSet;
}
public List<String> groupFields() {
List<String> groupFieldList = new ArrayList(2);
groupFieldList.add("bank");
groupFieldList.add("parentorg");
return groupFieldList;
}
public List<String> sumAmountFields() {
List<String> sumFieldList = new ArrayList(2);
sumFieldList.add("upamount_report");
sumFieldList.add("downamount_report");
return sumFieldList;
}
public String sumNameField() {
return "sonorg";
}
public List<String> orinalAmountField() {
List<String> sumFieldList = new ArrayList(2);
sumFieldList.add("upamount");
sumFieldList.add("downamount");
return sumFieldList;
}
private QFilter initFilter(Map<String, Object> paramMap) {
QFilter filter = new QFilter("entrys.state", "=", FcaTransDetailStatusEnum.NORMAL.getValue());
filter.and(new QFilter("entrys.paystatus", "=", FcaTransPayStatusEnum.PAYSUCCESS.getValue()));
DynamicObjectCollection currencies;
List currencyIdList;
if (paramMap.get("filter_bank") != null) {
currencies = (DynamicObjectCollection)paramMap.get("filter_bank");
currencyIdList = (List)currencies.stream().map(DataEntityBase::getPkValue).collect(Collectors.toList());
filter.and("bank", "in", currencyIdList);
}
if (paramMap.get("filter_org") != null) {
filter.and("company", "in", paramMap.get("filter_org"));
}
if (paramMap.get("filter_sonorg") != null) {
filter.and("entrys.subacct_company", "in", paramMap.get("filter_sonorg"));
}
//添加银行账号过滤
if (paramMap.get("filter_accountbank") != null) {
if (!paramMap.get("filter_accountbank").toString().trim().isEmpty()){
filter.and("entrys.subacct.number", "in", paramMap.get("filter_accountbank"));
}
}
if (paramMap.get("filter_accountgroup") != null) {
filter.and("acctgrpid", "in", paramMap.get("filter_accountgroup"));
}
if (paramMap.get("filter_currency") != null) {
currencies = (DynamicObjectCollection)paramMap.get("filter_currency");
currencyIdList = (List)currencies.stream().map(DataEntityBase::getPkValue).collect(Collectors.toList());
filter.and("currency", "in", currencyIdList);
}
String filterPeriod = (String)paramMap.get("filter_period");
Date currDate = DateUtils.getCurrentDate();
Date endDate;
Date startDate;
if (StringUtils.equals(StatisCycleEnum.THISMONTH.getCode(), filterPeriod)) {
startDate = DateUtils.getFirstDayOfCurMonth();
endDate = DateUtils.getFirstDayOfMonth(DateUtils.getNextMonth(currDate, 1));
} else if (StringUtils.equals(StatisCycleEnum.LASTYEAR.getCode(), filterPeriod)) {
startDate = DateUtils.getFirstYearDate(DateUtils.getLastYear(currDate, 1));
endDate = DateUtils.getFirstDayOfCurYear();
} else if (StringUtils.equals(StatisCycleEnum.THISYEAR.getCode(), filterPeriod)) {
startDate = DateUtils.getFirstDayOfCurYear();
endDate = DateUtils.getFirstYearDate(DateUtils.getNextYear(currDate, 1));
} else if (StringUtils.equals(StatisCycleEnum.LASTMONTH.getCode(), filterPeriod)) {
startDate = DateUtils.getFirstDayOfMonth(DateUtils.getLastMonth(currDate, 1));
endDate = DateUtils.getFirstDayOfCurMonth();
} else if (StringUtils.equals(StatisCycleEnum.TODAY.getCode(), filterPeriod)) {
startDate = currDate;
endDate = DateUtils.getNextDay(currDate, 1);
} else if (StringUtils.equals(StatisCycleEnum.CONSTOM.getCode(), filterPeriod)) {
startDate = (Date)paramMap.get("filter_startdate");
endDate = (Date)paramMap.get("filter_enddate");
endDate = DateUtils.getNextDay(endDate, 1);
} else {
startDate = DateUtils.getFirstDayOfCurMonth();
endDate = DateUtils.getFirstDayOfMonth(DateUtils.getNextMonth(currDate, 1));
}
filter.and("entrys.paydate", ">=", startDate);
filter.and("entrys.paydate", "<", endDate);
String queryAuth = (String)paramMap.get("filter_queryauth");
if ("parentorg".equals(queryAuth)) {
filter.and("company", "in", paramMap.get("orgIdList"));
} else {
filter.and("entrys.subacct_company", "in", paramMap.get("orgIdList"));
}
return filter;
}
}

View File

@ -2,17 +2,14 @@
package shkd.sys.sys.plugin.report;
import java.util.ArrayList;
import java.util.EventObject;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collectors;
import kd.bos.context.RequestContext;
import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.dataentity.entity.DynamicObjectCollection;
import kd.bos.dataentity.resource.ResManager;
import kd.bos.dataentity.utils.StringUtils;
import kd.bos.entity.EntityMetadataCache;
import kd.bos.entity.datamodel.events.PropertyChangedArgs;
import kd.bos.entity.report.AbstractReportColumn;
@ -32,13 +29,14 @@ import kd.bos.servicehelper.BusinessDataServiceHelper;
import kd.bos.servicehelper.QueryServiceHelper;
import kd.tmc.fbp.common.helper.SnapDataHelper;
import kd.tmc.fbp.common.helper.TmcOrgDataHelper;
import kd.tmc.fbp.common.util.DateUtils;
import kd.tmc.fbp.common.util.EmptyUtil;
import kd.tmc.fca.common.enums.StatisCycleEnum;
public class transbillreportnewFormPlugin extends AbstractReportFormPlugin implements HyperLinkClickListener {
private static final String[] BANK_DIMENSION = new String[]{"sumlevel", "parentorg", "parentorgid", "bank", "bankid", "sonorg", "sonorgid", "shkd_subacct", "shkd_subacctnumber","statcurrency", "shkd_qcye","shkd_qckyye", "upamount", "downamount", "differenceamount","shkd_qmye","shkd_qmkyye"};
private static final String[] SON_ORG_DIMENSION = new String[]{"sumlevel", "parentorg", "parentorgid", "sonorg", "sonorgid", "statcurrency", "upamount", "downamount", "differenceamount","shkd_qcamount","shkd_qmamount"};
private static final String[] BANK_DIMENSION = new String[]{"sumlevel", "parentorg", "parentorgid", "bank", "bankid", "sonorg", "sonorgid", "shkd_subacct", "shkd_subacctnumber","statcurrency", "shkd_nckyye","shkd_bnupamount","shkd_bndownamount","shkd_bndifferenceamount","shkd_qckyye", "upamount", "downamount", "differenceamount","shkd_qmkyye"};
private static final String[] SON_ORG_DIMENSION = new String[]{"sumlevel", "parentorg", "parentorgid", "sonorg", "sonorgid", "bank", "bankid", "shkd_subacct", "shkd_subacctnumber","statcurrency", "shkd_nckyye","shkd_bnupamount","shkd_bndownamount","shkd_bndifferenceamount","shkd_qckyye", "upamount", "downamount", "differenceamount","shkd_qmkyye"};
@Override
public void hyperLinkClick(HyperLinkClickEvent evt) {
String field = evt.getFieldName();
@ -87,6 +85,11 @@ public class transbillreportnewFormPlugin extends AbstractReportFormPlugin imple
}
}
if (EmptyUtil.isNoEmpty(rowData.get("shkd_subacct"))) {
param.getCustomParams().put("filter_accountbank", new Object[]{rowData.getDynamicObject("shkd_subacct").getString("number")});
}
currency = (DynamicObjectCollection)this.getModel().getValue("filter_currency");
if (currency != null && !currency.isEmpty()) {
currencyIds = currency.stream().map((v) -> {
@ -118,6 +121,165 @@ public class transbillreportnewFormPlugin extends AbstractReportFormPlugin imple
param.getOpenStyle().setShowType(ShowType.MainNewTabPage);
this.getView().showForm(param);
}
if ("shkd_bnupamount".equals(field) || "shkd_bndownamount".equals(field) || "shkd_bndifferenceamount".equals(field)) {
int rowIndex = evt.getRowIndex();
ReportList reportList = (ReportList)evt.getSource();
IReportListModel reportModel = reportList.getReportModel();
DynamicObject rowData = reportModel.getRowData(rowIndex);
ReportShowParameter param = new ReportShowParameter();
DynamicObjectCollection currency;
Object[] currencyIds;
if (EmptyUtil.isNoEmpty(rowData.get("parentorgid"))) {
param.getCustomParams().put("filter_org", new Object[]{rowData.get("parentorgid")});
} else {
currency = (DynamicObjectCollection)this.getModel().getValue("filter_org");
if (currency != null && !currency.isEmpty()) {
currencyIds = currency.stream().map((v) -> {
return v.getDynamicObject("fbasedataid").getPkValue();
}).toArray();
param.getCustomParams().put("filter_org", currencyIds);
}
}
if (EmptyUtil.isNoEmpty(rowData.get("bankid"))) {
param.getCustomParams().put("filter_bank", new Object[]{rowData.get("bankid")});
} else {
currency = (DynamicObjectCollection)this.getModel().getValue("filter_bank");
if (currency != null && !currency.isEmpty()) {
currencyIds = currency.stream().map((v) -> {
return v.getDynamicObject("fbasedataid").getPkValue();
}).toArray();
param.getCustomParams().put("filter_bank", currencyIds);
}
}
if (EmptyUtil.isNoEmpty(rowData.get("sonorgid"))) {
param.getCustomParams().put("filter_sonorg", new Object[]{rowData.get("sonorgid")});
} else {
currency = (DynamicObjectCollection)this.getModel().getValue("filter_sonorg");
if (currency != null && !currency.isEmpty()) {
currencyIds = currency.stream().map((v) -> {
return v.getDynamicObject("fbasedataid").getPkValue();
}).toArray();
param.getCustomParams().put("filter_sonorg", currencyIds);
}
}
if (EmptyUtil.isNoEmpty(rowData.get("shkd_subacct"))) {
param.getCustomParams().put("filter_accountbank", new Object[]{rowData.getDynamicObject("shkd_subacct").getString("number")});
}
currency = (DynamicObjectCollection)this.getModel().getValue("filter_currency");
if (currency != null && !currency.isEmpty()) {
currencyIds = currency.stream().map((v) -> {
return v.getDynamicObject("fbasedataid").getPkValue();
}).toArray();
param.getCustomParams().put("filter_currency", currencyIds);
}
DynamicObjectCollection accountGroup = (DynamicObjectCollection)this.getModel().getValue("filter_accountgroup");
if (accountGroup != null && !accountGroup.isEmpty()) {
Object[] accountGroupIds = accountGroup.stream().map((v) -> {
return v.getDynamicObject("fbasedataid").getPkValue();
}).toArray();
param.getCustomParams().put("filter_accountgroup", accountGroupIds);
}
if ("shkd_bnupamount".equals(field)) {
param.getCustomParams().put("filter_biztype", "fca_transupbill");
} else if ("shkd_bndownamount".equals(field)) {
param.getCustomParams().put("filter_biztype", "fca_transdownbill");
}
// param.getCustomParams().put("filter_period", this.getModel().getValue("filter_period"));
param.getCustomParams().put("filter_period", "99");
String filter_period = (String) this.getModel().getValue("filter_period");
Date currDate = DateUtils.getCurrentDate();
Date startDate;
Date endDate;
Date startOfYear;
if (StringUtils.equals(StatisCycleEnum.THISMONTH.getCode(), filter_period)) {
startDate = DateUtils.getFirstDayOfCurMonth();
Calendar calendar = Calendar.getInstance();
calendar.setTime(startDate);
// 设置为年份的第一天
calendar.set(Calendar.MONTH, Calendar.JANUARY);
calendar.set(Calendar.DAY_OF_MONTH, 1);
// 获取年初日期
startOfYear = calendar.getTime();
endDate = currDate;
} else if (StringUtils.equals(StatisCycleEnum.LASTYEAR.getCode(), filter_period)) {
startDate = DateUtils.getFirstYearDate(DateUtils.getLastYear(currDate, 1));
Calendar calendar = Calendar.getInstance();
calendar.setTime(startDate);
// 设置为年份的第一天
calendar.set(Calendar.MONTH, Calendar.JANUARY);
calendar.set(Calendar.DAY_OF_MONTH, 1);
// 获取年初日期
startOfYear = calendar.getTime();
endDate = currDate;
} else if (StringUtils.equals(StatisCycleEnum.THISYEAR.getCode(), filter_period)) {
startDate = DateUtils.getFirstDayOfCurYear();
Calendar calendar = Calendar.getInstance();
calendar.setTime(startDate);
// 设置为年份的第一天
calendar.set(Calendar.MONTH, Calendar.JANUARY);
calendar.set(Calendar.DAY_OF_MONTH, 1);
// 获取年初日期
startOfYear = calendar.getTime();
endDate = currDate;
} else if (StringUtils.equals(StatisCycleEnum.LASTMONTH.getCode(), filter_period)) {
startDate = DateUtils.getFirstDayOfMonth(DateUtils.getLastMonth(currDate, 1));
Calendar calendar = Calendar.getInstance();
calendar.setTime(startDate);
// 设置为年份的第一天
calendar.set(Calendar.MONTH, Calendar.JANUARY);
calendar.set(Calendar.DAY_OF_MONTH, 1);
// 获取年初日期
startOfYear = calendar.getTime();
endDate = currDate;
} else if (StringUtils.equals(StatisCycleEnum.TODAY.getCode(), filter_period)) {
startDate = currDate;
Calendar calendar = Calendar.getInstance();
calendar.setTime(startDate);
// 设置为年份的第一天
calendar.set(Calendar.MONTH, Calendar.JANUARY);
calendar.set(Calendar.DAY_OF_MONTH, 1);
// 获取年初日期
startOfYear = calendar.getTime();
endDate = currDate;
} else if (StringUtils.equals(StatisCycleEnum.CONSTOM.getCode(), filter_period)) {
startDate = (Date) this.getModel().getValue("filter_startdate");
Calendar calendar = Calendar.getInstance();
calendar.setTime(startDate);
// 设置为年份的第一天
calendar.set(Calendar.MONTH, Calendar.JANUARY);
calendar.set(Calendar.DAY_OF_MONTH, 1);
// 获取年初日期
startOfYear = calendar.getTime();
endDate = (Date) this.getModel().getValue("filter_enddate");
} else {
startDate = DateUtils.getFirstDayOfCurMonth();
Calendar calendar = Calendar.getInstance();
calendar.setTime(startDate);
// 设置为年份的第一天
calendar.set(Calendar.MONTH, Calendar.JANUARY);
calendar.set(Calendar.DAY_OF_MONTH, 1);
// 获取年初日期
startOfYear = calendar.getTime();
endDate = currDate;
}
// param.getCustomParams().put("filter_startdate", this.getModel().getValue("filter_startdate"));
param.getCustomParams().put("filter_startdate", startOfYear);
param.getCustomParams().put("filter_enddate", endDate);
param.getCustomParams().put("filter_statcurrency", ((DynamicObject)rowData.get("statcurrency")).getPkValue());
param.getCustomParams().put("filter_currencyunit", this.getModel().getValue("filter_currencyunit"));
param.setFormId("transbill_detail_report");
param.getOpenStyle().setShowType(ShowType.MainNewTabPage);
this.getView().showForm(param);
}
}

View File

@ -6,6 +6,7 @@
package shkd.sys.sys.plugin.report;
import java.math.BigDecimal;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
@ -58,7 +59,7 @@ public class transbillreportnewPlugin extends AbstractTmcTreeReportDataPlugin {
private static final String BANK_SELECT = "parentorg, parentorgid, bank, bankid, upamount_report as upamount, downamount_report as downamount";
private static final String SON_ORG_SELECT = "parentorg, parentorgid, sonorg, sonorgid, upamount_report as upamount, downamount_report as downamount";
private static final String[] BANK_GROUP_SELECT = new String[]{"parentorg", "parentorgid", "bank", "bankid","sonorg","sonorgid","shkd_subacct"};
private static final String[] SON_ORG_GROUP_SELECT = new String[]{"parentorg", "parentorgid", "sonorg", "sonorgid"};
private static final String[] SON_ORG_GROUP_SELECT = new String[]{"parentorg", "parentorgid", "sonorg","sonorgid","bank", "bankid","shkd_subacct"};
private List<String> sumAmountFieldList;
private String sumNameField;
private boolean isCompute = true;
@ -84,15 +85,15 @@ public class transbillreportnewPlugin extends AbstractTmcTreeReportDataPlugin {
groupSelect = BANK_GROUP_SELECT;
this.setSumNameField("bank");
} else {//不走
upSelect = "company.name as parentorg, company.id as parentorgid, entrys.e_useorg.name as sonorg, entrys.e_useorg.id as sonorgid, currency, entrys.transamt as upamount, 0 as downamount";
downSelect = "company.name as parentorg, company.id as parentorgid, entrys.e_useorg.name as sonorg, entrys.e_useorg.id as sonorgid, currency, 0 as upamount, entrys.transamt as downamount";
select = "parentorg, parentorgid, sonorg, sonorgid, upamount_report as upamount, downamount_report as downamount";
upSelect = "company.name as parentorg, company.id as parentorgid, entrys.e_useorg.name as sonorg, entrys.e_useorg.id as sonorgid, bank.name as bank, bank.id as bankid, currency, entrys.transamt as upamount, 0 as downamount,entrys.subacct as shkd_subacct";
downSelect = "company.name as parentorg, company.id as parentorgid, entrys.e_useorg.name as sonorg, entrys.e_useorg.id as sonorgid, bank.name as bank, bank.id as bankid, currency, 0 as upamount, entrys.transamt as downamount,entrys.subacct as shkd_subacct";
select = "parentorg, parentorgid,sonorg, sonorgid, bank, bankid, upamount_report as upamount, downamount_report as downamount,shkd_subacct";
groupSelect = SON_ORG_GROUP_SELECT;
this.setSumNameField("sonorg");
}
DataSet upDataSet = QueryServiceHelper.queryDataSet("fca_transupbill", "fca_transupbill", upSelect, filter.toArray(), "company");
DataSet downDataSet = QueryServiceHelper.queryDataSet("fca_transdownbill", "fca_transdownbill", downSelect, filter.toArray(), "company");
DataSet upDataSet = QueryServiceHelper.queryDataSet("fca_transupbill", "fca_transupbill", upSelect, filter.toArray(), "company,entrys.e_useorg");
DataSet downDataSet = QueryServiceHelper.queryDataSet("fca_transdownbill", "fca_transdownbill", downSelect, filter.toArray(), "company,entrys.e_useorg");
DataSet dataSet = upDataSet.union(downDataSet);
dataSet = this.addExchangeRateAndCurrencyUnit(dataSet, paramMap);
// DynamicObjectCollection srcCollection = ORM.create().toPlainDynamicObjectCollection(dataSet.copy());
@ -101,67 +102,33 @@ public class transbillreportnewPlugin extends AbstractTmcTreeReportDataPlugin {
GroupbyDataSet group = dataSet.groupBy(groupSelect);
dataSet = group.sum("upamount").sum("downamount").finish();
//链接期初期初余额表
DataSet getqc = getqc(filter, paramMap);
DataSet getqc = null;
try {
getqc = getqc(filter, paramMap);
} catch (ParseException e) {
throw new RuntimeException(e);
}
List<String> sumAmountFieldList = new ArrayList(2);
sumAmountFieldList.add("upamount");
sumAmountFieldList.add("downamount");
sumAmountFieldList.add("differenceamount");
sumAmountFieldList.add("shkd_bnupamount");
sumAmountFieldList.add("shkd_bndownamount");
sumAmountFieldList.add("shkd_bndifferenceamount");
this.setSumAmountFieldList(sumAmountFieldList);
dataSet = dataSet.addField("upamount - downamount", "differenceamount");
JoinDataSet join = dataSet.join(getqc, JoinType.LEFT);//连接
dataSet = join.on("shkd_subacct","shkd_subacct")
.select(new String[]{"parentorg", "parentorgid", "bank", "bankid", "sonorg", "sonorgid", "upamount", "downamount","shkd_subacct","differenceamount","shkd_qcye","shkd_qckyye"}).finish();
//组装查询银企sql
// DataSet getyq = getyqsql(filter, paramMap);
//期末
List<String> sumAmountFieldList1 = new ArrayList(6);
sumAmountFieldList1.add("shkd_qcye");
sumAmountFieldList1.add("shkd_qckyye");
sumAmountFieldList1.add("upamount");
sumAmountFieldList1.add("downamount");
sumAmountFieldList1.add("shkd_qmye");
sumAmountFieldList1.add("shkd_qmkyye");
sumAmountFieldList1.add("differenceamount");
this.setSumAmountFieldList(sumAmountFieldList1);
//期末余额
dataSet = dataSet.addField("shkd_qcye+upamount- downamount", "shkd_qmye");
dataSet = dataSet.addField("shkd_qckyye+upamount- downamount", "shkd_qmkyye");
.select(new String[]{"parentorg", "parentorgid", "bank", "bankid", "sonorg", "sonorgid","shkd_nckyye","shkd_qckyye","shkd_bnupamount","shkd_bndownamount", "upamount", "downamount","shkd_subacct","differenceamount","shkd_qmkyye"}).finish();
dataSet = dataSet.addField("shkd_bnupamount - shkd_bndownamount", "shkd_bndifferenceamount");
Object statCurrency = ((DynamicObject)paramMap.get("filter_statcurrency")).getPkValue();
dataSet = dataSet.addField(String.valueOf(statCurrency), "currency");
return dataSet;
}
private DataSet getyqsql(QFilter filter, Map<String, Object> paramMap) {
//获取截止日期
List<QFilter.QFilterNest> nests = filter.getNests(true);//过滤条件
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String enddate="";
for (int i = 0; i <nests.size() ; i++) {
QFilter filter1 = nests.get(i).getFilter();
if ("entrys.paydate".equals(filter1.getProperty())){
String cp = filter1.getCP();
if (cp.contains("<")){//结束日期
enddate=sdf.format(filter.getValue());
}
}
}
StringBuilder sqlBuilder = new StringBuilder("/*dialect*/ ");
sqlBuilder.append("SELECT faccountbankid, fmodifytime, fvalibalance as upamount,fcurrencyid as currency \n" +
"FROM t_bei_bankbalance\n" +
"WHERE (faccountbankid, fmodifytime) IN (\n" +
" SELECT faccountbankid, MAX(fmodifytime)\n" +
" FROM t_bei_bankbalance\n" +
" WHERE fmodifytime <= '"+enddate+"'\n" +
" GROUP BY faccountbankid\n" +
")");
DataSet res = DB.queryDataSet(this.getClass().getSimpleName(), DBRoute.of("fi"), sqlBuilder.toString());//财务云
return res;
}
public List<String> groupFields() {
List<String> groupFieldList = new ArrayList(2);
@ -271,49 +238,112 @@ public class transbillreportnewPlugin extends AbstractTmcTreeReportDataPlugin {
return this.isCompute;
}
public DataSet getqc(QFilter filter,Map<String, Object> paramMap){
public DataSet getqc(QFilter filter,Map<String, Object> paramMap) throws ParseException {
//组装期初的过滤条件
List<QFilter.QFilterNest> nests = filter.getNests(true);//过滤条件
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
QFilter qFilter=null;
QFilter endqFilter=null;
String endQCP="";
String startdate="";
String enddate="";
for (int i = 0; i <nests.size() ; i++) {
QFilter filter1 = nests.get(i).getFilter();
if ("entrys.paydate".equals(filter1.getProperty())){
String cp = filter1.getCP();
if (cp.contains(">")){//开始日期
qFilter=new QFilter("entrys.paydate", "<", filter1.getValue());
// qFilter=new QFilter("entrys.paydate", "<", filter1.getValue());
startdate=sdf.format(filter1.getValue());
}
if (cp.contains("<")){//结束日期
endQCP= filter1.getCP();
endqFilter=new QFilter("entrys.paydate", filter1.getCP(), filter1.getValue());
enddate=sdf.format(filter1.getValue());
}
}
// for (QFilter.QFilterNest nest : nests) {
// String op = nest.getOp();
// QFilter filter1 = nest.getFilter();
// if (!"entrys.paydate".equals(filter1.getProperty())){
// if ("AND".equals(op)){
// qFilter.and(filter1);
// }else {
// qFilter.or(filter1);
// }
//
// }
// }
//
//
// //查询期初数据
// DataSet upDataSet = QueryServiceHelper.queryDataSet("fca_transupbill", "fca_transupbill",
// "company.name as parentorg, company.id as parentorgid, bank.name as bank, bank.id as bankid, entrys.e_useorg.name as sonorg, entrys.e_useorg.id as sonorgid, currency, entrys.transamt as upamount,entrys.subacct as shkd_subacct",
// qFilter.toArray(), "company");//上划期初
// DataSet downDataSet = QueryServiceHelper.queryDataSet("fca_transdownbill", "fca_transdownbill",
// "company.name as parentorg, company.id as parentorgid, bank.name as bank, bank.id as bankid, entrys.e_useorg.name as sonorg, entrys.e_useorg.id as sonorgid, currency, -1*entrys.transamt as upamount,entrys.subacct as shkd_subacct",
// qFilter.toArray(), "company");//下拨期初
// DataSet dataSet = upDataSet.union(downDataSet);
//
// dataSet = addExchangeRateAndCurrencyUnit1(dataSet, paramMap);
// dataSet = dataSet.select(new String[]{"parentorg", "parentorgid", "bank", "bankid", "sonorg", "sonorgid", "upamount_report as shkd_qcamount","shkd_subacct","currency"});
// GroupbyDataSet group = dataSet.groupBy(new String[]{"parentorg", "parentorgid", "bank", "bankid","sonorg","sonorgid","shkd_subacct"});
// dataSet = group.sum("shkd_qcamount").finish();
}
//获取开始就日期年初
Date date = sdf.parse(startdate);
// 创建日历对象并设置为给定日期
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
// 设置为年份的第一天
calendar.set(Calendar.MONTH, Calendar.JANUARY);
calendar.set(Calendar.DAY_OF_MONTH, 1);
// 获取年初日期
Date startOfYear = calendar.getTime();
// 将年初日期格式化为字符串
//业务单元数据集
DataSet balanceDataSet = QueryServiceHelper.queryDataSet(this.getClass().getSimpleName(),"bd_accountbanks","id,number as shkd_orgnumber,name as shkd_org", null, null);
String startOfYearStr = sdf.format(startOfYear);
StringBuilder sqlBuilder1 = new StringBuilder("/*dialect*/ ");
sqlBuilder1.append("SELECT faccountbankid as shkd_subacct, fcreatetime,famount as downamount, fvalibalance as upamount,fcurrencyid as currency \n" +
"FROM t_bei_bankbalance\n" +
"WHERE (faccountbankid, fcreatetime) IN (\n" +
" SELECT faccountbankid, MAX(fcreatetime)\n" +
" FROM t_bei_bankbalance\n" +
" WHERE fcreatetime < '"+startOfYearStr+"'\n" +
" GROUP BY faccountbankid\n" +
")");
//年初余额
DataSet ncres = DB.queryDataSet(this.getClass().getSimpleName(), DBRoute.of("fi"), sqlBuilder1.toString());//财务云
ncres = addExchangeRateAndCurrencyUnit1(ncres, paramMap);
ncres = ncres.select(new String[]{"shkd_subacct","upamount_report as shkd_nckyye"});
//设置本年上划下拨条件
QFilter qFilterbn=new QFilter("entrys.paydate", ">=", startOfYear);//年初
qFilterbn.and(endqFilter);//截止日期
for (QFilter.QFilterNest nest : nests) {
String op = nest.getOp();
QFilter filter1 = nest.getFilter();
if (!"entrys.paydate".equals(filter1.getProperty())){
if ("AND".equals(op)){
qFilterbn.and(filter1);
}else {
qFilterbn.or(filter1);
}
}
}
//查询本年上划下拨
DataSet upDataSet = QueryServiceHelper.queryDataSet("fca_transupbill", "fca_transupbill",
"company.name as parentorg, company.id as parentorgid, bank.name as bank, bank.id as bankid, entrys.e_useorg.name as sonorg, entrys.e_useorg.id as sonorgid, currency, entrys.transamt as upamount,0 as downamount,entrys.subacct as shkd_subacct",
qFilterbn.toArray(), "company");//上划
DataSet downDataSet = QueryServiceHelper.queryDataSet("fca_transdownbill", "fca_transdownbill",
"company.name as parentorg, company.id as parentorgid, bank.name as bank, bank.id as bankid, entrys.e_useorg.name as sonorg, entrys.e_useorg.id as sonorgid, currency, 0 as upamount,entrys.transamt as downamount,entrys.subacct as shkd_subacct",
qFilterbn.toArray(), "company");//下拨
DataSet dataSet = upDataSet.union(downDataSet);
dataSet = addExchangeRateAndCurrencyUnit1(dataSet, paramMap);
dataSet = dataSet.select(new String[]{"parentorg", "parentorgid", "bank", "bankid", "sonorg", "sonorgid", "upamount_report as shkd_bnupamount","downamount_report as shkd_bndownamount","shkd_subacct","currency"});
GroupbyDataSet group = dataSet.groupBy(new String[]{"parentorg", "parentorgid", "bank", "bankid", "sonorg", "sonorgid","shkd_subacct","currency"});
dataSet = group.sum("shkd_bnupamount").sum("shkd_bndownamount").finish();
JoinDataSet join = dataSet.join(ncres, JoinType.FULL);//连接
dataSet = join.on("shkd_subacct","shkd_subacct")
.select(new String[]{"parentorg", "parentorgid", "bank", "bankid", "sonorg", "sonorgid", "shkd_bnupamount", "shkd_bndownamount","shkd_subacct","currency","shkd_nckyye"}).finish();
//期末余额
StringBuilder sqlBuilder2 = new StringBuilder("/*dialect*/ ");
sqlBuilder2.append("SELECT faccountbankid as shkd_subacct, fcreatetime,famount as downamount, fvalibalance as upamount,fcurrencyid as currency \n" +
"FROM t_bei_bankbalance\n" +
"WHERE (faccountbankid, fcreatetime) IN (\n" +
" SELECT faccountbankid, MAX(fcreatetime)\n" +
" FROM t_bei_bankbalance\n" +
" WHERE fcreatetime "+endQCP+" '"+enddate+"'\n" +
" GROUP BY faccountbankid\n" +
")");
DataSet qmres = DB.queryDataSet(this.getClass().getSimpleName(), DBRoute.of("fi"), sqlBuilder2.toString());//财务云
qmres = addExchangeRateAndCurrencyUnit1(qmres, paramMap);
qmres = qmres.select(new String[]{"shkd_subacct","upamount_report as shkd_qmkyye"});
JoinDataSet join1 = dataSet.join(qmres, JoinType.FULL);//连接
dataSet = join1.on("shkd_subacct","shkd_subacct")
.select(new String[]{"parentorg", "parentorgid", "bank", "bankid", "sonorg", "sonorgid", "shkd_bnupamount", "shkd_bndownamount","shkd_subacct","currency","shkd_nckyye","shkd_qmkyye"}).finish();
//期初可用余额
StringBuilder sqlBuilder = new StringBuilder("/*dialect*/ ");
sqlBuilder.append("SELECT faccountbankid as shkd_subacct, fcreatetime,famount as downamount, fvalibalance as upamount,fcurrencyid as currency \n" +
"FROM t_bei_bankbalance\n" +
@ -325,8 +355,12 @@ public class transbillreportnewPlugin extends AbstractTmcTreeReportDataPlugin {
")");
DataSet res = DB.queryDataSet(this.getClass().getSimpleName(), DBRoute.of("fi"), sqlBuilder.toString());//财务云
res = addExchangeRateAndCurrencyUnit1(res, paramMap);
DataSet select = res.select(new String[]{"shkd_subacct","downamount_report as shkd_qcye","upamount_report as shkd_qckyye"});
return select;
DataSet select = res.select(new String[]{"shkd_subacct","upamount_report as shkd_qckyye"});
JoinDataSet join2 = dataSet.join(select, JoinType.FULL);//连接
dataSet = join2.on("shkd_subacct","shkd_subacct")
.select(new String[]{"parentorg", "parentorgid", "bank", "bankid", "sonorg", "sonorgid", "shkd_bnupamount", "shkd_bndownamount","shkd_subacct","currency","shkd_nckyye","shkd_qmkyye","shkd_qckyye"}).finish();
return dataSet;
}
protected DataSet addExchangeRateAndCurrencyUnit1(DataSet bizDataSet, Map<String, Object> paramMap) {
@ -401,6 +435,41 @@ public class transbillreportnewPlugin extends AbstractTmcTreeReportDataPlugin {
return (String[])fieldList.toArray(new String[0]);
}
@Override
protected DataSet addSubRowDataSet(DataSet bizDs, Map<String, Object> paramMap) {
Boolean isShowSubTotal = (Boolean)paramMap.get("filter_isshowsubtotal");
if (isShowSubTotal) {
String subNameField = this.subNameField();
List<String> groupFields = this.groupFields();
List<String> groupFields1;
if ("bank".equals(paramMap.get("filter_dimension"))) {
groupFields1 =Arrays.asList("parentorg","parentorgid","bank","bankid");
}else {
groupFields1 =Arrays.asList("parentorg","parentorgid","sonorg","sonorgid");
}
bizDs=bizDs.addField("0L","shkd_px");//用于再加一层排序
//母组织小计
DataSet subDs = this.addSubTotalDataSet2(bizDs.copy().filter("pid = '0'"), groupFields, this.subAmountFields(), subNameField, this.subDisplayName()).updateFields(new String[]{"rowid", "pid"}, new String[]{"cast(rowid as String)", "cast(pid as String)"}).updateFields(new String[]{"rowid", "pid", "isgroupnode"}, new String[]{this.uniqueRow, "'0'", "'0'"});
//母组织下的开户行或者子公司小计
DataSet subDs1 = this.addSubTotalDataSet1(bizDs.copy().filter("pid = '0'"), groupFields1, this.subAmountFields(), subNameField, this.subDisplayName()).updateFields(new String[]{"rowid", "pid"}, new String[]{"cast(rowid as String)", "cast(pid as String)"}).updateFields(new String[]{"rowid", "pid", "isgroupnode"}, new String[]{this.uniqueRow, "'0'", "'0'"});
bizDs = bizDs.union(subDs).orderBy((String[])this.orderByFields().toArray(new String[0]));
List<String> orderByFields1 ;
if ("bank".equals(paramMap.get("filter_dimension"))) {
orderByFields1 =Arrays.asList("parentorg","parentorgid","shkd_px","bank","bankid","sumlevel");
}else {
orderByFields1 =Arrays.asList("parentorg","parentorgid","shkd_px","sonorg","sonorgid","sumlevel");
}
bizDs = bizDs.union(subDs1).orderBy((String[])orderByFields1.toArray(new String[0]));
if (groupFields.contains(subNameField)) {
bizDs = bizDs.updateField(subNameField, "case when sumlevel = 1 then '" + this.subDisplayName() + "' else " + subNameField + " end");
}
}
return bizDs;
}
protected DataSet getExChangeRateDs1(DataSet dataSet, Map<String, Object> paramMap) {
Long tarCurrencyId = (Long)((DynamicObject)paramMap.get("filter_statcurrency")).getPkValue();
DataSet currencySet = dataSet.copy().groupBy(new String[]{"currency"}).finish();
@ -427,6 +496,80 @@ public class transbillreportnewPlugin extends AbstractTmcTreeReportDataPlugin {
DataType[] dataTypes = new DataType[]{DataType.LongType, DataType.BigDecimalType};
return createEmptyDataSet(fieldNames, dataTypes);
}
}
protected DataSet addSubTotalDataSet1(DataSet rowSet, List<String> gruopFields, List<String> sumFields, String sumNameField, String totalDesc) {
DataSet dsTemp = rowSet.copy();
GroupbyDataSet gdsTemp = dsTemp.groupBy((String[])gruopFields.toArray(new String[0]));
Iterator var8 = sumFields.iterator();
while(var8.hasNext()) {
String sumField = (String)var8.next();
gdsTemp.sum(sumField);
}
DataSet ds = gdsTemp.finish();
List<String> selectField = new LinkedList();
Field[] fields = rowSet.getRowMeta().getFields();
Field[] var11 = fields;
int var12 = fields.length;
for(int var13 = 0; var13 < var12; ++var13) {
Field field = var11[var13];
if (!gruopFields.contains(field.getName()) && !sumFields.contains(field.getName())) {
if (field.getName().equals(sumNameField)) {
selectField.add("'" + totalDesc + "' as " + field.getName());
} else if (field.getName().equals(this.sumField)) {
selectField.add("0.5 as " + this.sumField);
} else if (field.getName().equals("shkd_px")) {
selectField.add("0 as shkd_px");
}else {
selectField.add("NULL as " + field.getName());
}
} else {
selectField.add(field.getName());
}
}
return ds.select(String.join(",", selectField));
}
protected DataSet addSubTotalDataSet2(DataSet rowSet, List<String> gruopFields, List<String> sumFields, String sumNameField, String totalDesc) {
DataSet dsTemp = rowSet.copy();
GroupbyDataSet gdsTemp = dsTemp.groupBy((String[])gruopFields.toArray(new String[0]));
Iterator var8 = sumFields.iterator();
while(var8.hasNext()) {
String sumField = (String)var8.next();
gdsTemp.sum(sumField);
}
DataSet ds = gdsTemp.finish();
List<String> selectField = new LinkedList();
Field[] fields = rowSet.getRowMeta().getFields();
Field[] var11 = fields;
int var12 = fields.length;
for(int var13 = 0; var13 < var12; ++var13) {
Field field = var11[var13];
if (!gruopFields.contains(field.getName()) && !sumFields.contains(field.getName())) {
if (field.getName().equals(sumNameField)) {
selectField.add("'" + totalDesc + "' as " + field.getName());
} else if (field.getName().equals(this.sumField)) {
selectField.add("1 as " + this.sumField);
} else if (field.getName().equals("shkd_px")) {
selectField.add("1 as shkd_px");
}else {
selectField.add("NULL as " + field.getName());
}
} else {
selectField.add(field.getName());
}
}
return ds.select(String.join(",", selectField));
}
}