diff --git a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/report/transbilldetailreportnewFormPlugin.java b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/report/transbilldetailreportnewFormPlugin.java index c37661c..5a67555 100644 --- a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/report/transbilldetailreportnewFormPlugin.java +++ b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/report/transbilldetailreportnewFormPlugin.java @@ -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 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 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); + } } diff --git a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/report/transbilldetailreportnewPlugin.java b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/report/transbilldetailreportnewPlugin.java new file mode 100644 index 0000000..31b389d --- /dev/null +++ b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/report/transbilldetailreportnewPlugin.java @@ -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 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 groupFields() { + List groupFieldList = new ArrayList(2); + groupFieldList.add("bank"); + groupFieldList.add("parentorg"); + return groupFieldList; + } + + public List sumAmountFields() { + List sumFieldList = new ArrayList(2); + sumFieldList.add("upamount_report"); + sumFieldList.add("downamount_report"); + return sumFieldList; + } + + public String sumNameField() { + return "sonorg"; + } + + public List orinalAmountField() { + List sumFieldList = new ArrayList(2); + sumFieldList.add("upamount"); + sumFieldList.add("downamount"); + return sumFieldList; + } + + private QFilter initFilter(Map 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; + } +} diff --git a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/report/transbillreportnewFormPlugin.java b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/report/transbillreportnewFormPlugin.java index 4d637f0..921f97e 100644 --- a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/report/transbillreportnewFormPlugin.java +++ b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/report/transbillreportnewFormPlugin.java @@ -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); + } } diff --git a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/report/transbillreportnewPlugin.java b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/report/transbillreportnewPlugin.java index ece9585..c88d1d9 100644 --- a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/report/transbillreportnewPlugin.java +++ b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/report/transbillreportnewPlugin.java @@ -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 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 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 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 paramMap) { - //获取截止日期 - List nests = filter.getNests(true);//过滤条件 - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); - String enddate=""; - for (int i = 0; i groupFields() { List groupFieldList = new ArrayList(2); @@ -271,49 +238,112 @@ public class transbillreportnewPlugin extends AbstractTmcTreeReportDataPlugin { return this.isCompute; } - public DataSet getqc(QFilter filter,Map paramMap){ + public DataSet getqc(QFilter filter,Map paramMap) throws ParseException { //组装期初的过滤条件 List 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 ")){//开始日期 - 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 paramMap) { @@ -401,6 +435,41 @@ public class transbillreportnewPlugin extends AbstractTmcTreeReportDataPlugin { return (String[])fieldList.toArray(new String[0]); } + @Override + protected DataSet addSubRowDataSet(DataSet bizDs, Map paramMap) { + Boolean isShowSubTotal = (Boolean)paramMap.get("filter_isshowsubtotal"); + if (isShowSubTotal) { + String subNameField = this.subNameField(); + List groupFields = this.groupFields(); + List 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 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 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 gruopFields, List 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 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 gruopFields, List 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 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)); + } }