diff --git a/shkd-cosmic-debug/src/main/java/shkd/fi/cas/report/data/CapitalDayListDataPlugin.java b/shkd-cosmic-debug/src/main/java/shkd/fi/cas/report/data/CapitalDayListDataPlugin.java index a7e8143..8b4839d 100644 --- a/shkd-cosmic-debug/src/main/java/shkd/fi/cas/report/data/CapitalDayListDataPlugin.java +++ b/shkd-cosmic-debug/src/main/java/shkd/fi/cas/report/data/CapitalDayListDataPlugin.java @@ -17,6 +17,7 @@ import kd.bos.servicehelper.org.OrgUnitServiceHelper; import kd.sdk.plugin.Plugin; import java.math.BigDecimal; +import java.math.RoundingMode; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.LocalTime; @@ -35,9 +36,9 @@ public class CapitalDayListDataPlugin extends AbstractReportListDataPlugin imple public DataSet query(ReportQueryParam reportQueryParam, Object o) throws Throwable { String[] fileNames = {"shkd_ordinal","shkd_company","shkd_init_original","shkd_income_original","shkd_expend_original", - "shkd_period_original","shkd_currencyfield"};//字段标识数组 + "shkd_period_original","shkd_currencyfield","shkd_datatype"};//字段标识数组 DataType[] dataTypes = {DataType.StringType,DataType.StringType,DataType.BigDecimalType,DataType.BigDecimalType,DataType.BigDecimalType, - DataType.BigDecimalType,DataType.LongType};//字段类型数组 + DataType.BigDecimalType,DataType.LongType,DataType.StringType};//字段类型数组 //获取过滤条件集合 Map paramMap = this.transQueryParam(reportQueryParam); @@ -49,6 +50,8 @@ public class CapitalDayListDataPlugin extends AbstractReportListDataPlugin imple Date endDate = (Date)paramMap.get("shkd_enddate");//结束时间 DynamicObject orgcurrency = (DynamicObject) paramMap.get("shkd_orgcurrency"); DynamicObject exratetable = (DynamicObject) paramMap.get("shkd_exratetable"); + String shkd_unit = paramMap.get("shkd_unit").toString();//单位 + String groupName = null; HashMap> groupMap = new HashMap<>();//集团id集合 @@ -76,9 +79,35 @@ public class CapitalDayListDataPlugin extends AbstractReportListDataPlugin imple } int i = 0; if(firmParams != null && firmParams.size() > 0){ - for (Object[] firmParam : firmParams) { - firmParam[0] = i+1; - i++; + if ("0".equals(shkd_unit)) {//当单位为万元时需进行单位换算 + for (Object[] firmParam : firmParams) { + firmParam[0] = i+1; + if ("2".equals(firmParam[7]) || "3".equals(firmParam[7])){//当行数据为公司资金数据或合计资金数据时,根据单位判断是否计算 + BigDecimal value1 = (BigDecimal) firmParam[2]; + BigDecimal value2 = (BigDecimal) firmParam[3]; + BigDecimal value3 = (BigDecimal) firmParam[4]; + BigDecimal value4 = (BigDecimal) firmParam[5]; + BigDecimal divisor = new BigDecimal("10000.00"); + if (value1 != null){ + firmParam[2] = value1.divide(divisor ,2, RoundingMode.HALF_UP); + } + if (value2 != null){ + firmParam[3] = value2.divide(divisor ,2, RoundingMode.HALF_UP); + } + if (value3 != null){ + firmParam[4] = value3.divide(divisor ,2, RoundingMode.HALF_UP); + } + if (value4 != null){ + firmParam[5] = value4.divide(divisor ,2, RoundingMode.HALF_UP); + } + } + i++; + } + }else { + for (Object[] firmParam : firmParams) { + firmParam[0] = i+1; + i++; + } } } RowMeta row = RowMetaFactory.createRowMeta(fileNames, dataTypes); @@ -196,14 +225,17 @@ public class CapitalDayListDataPlugin extends AbstractReportListDataPlugin imple firmParams = new ArrayList(cas_cashmgtinits.length);//多公司数据集合 BigDecimal payTotal = BigDecimal.ZERO; //总计 期间支出合计 BigDecimal recTotal = BigDecimal.ZERO; //总计 期间收入合计 + BigDecimal startBalance = BigDecimal.ZERO;//总计 期初余额合计 + BigDecimal endBalance = BigDecimal.ZERO;//总计 期间余额合计 BigDecimal payLB = BigDecimal.ZERO; //内部往来,支出合计 BigDecimal recLB = BigDecimal.ZERO; //内部往来 期间收入合计 BigDecimal payNet = BigDecimal.ZERO;//支出净额 BigDecimal recNet = BigDecimal.ZERO;//收入净额 //若是集团,需要在第一行拼接第一行的数据 if("group".equals(shkd_queryorgtype)&& cas_cashmgtinits.length > 0){ - Object[] firmParam = new Object[7];//存放公司数据 + Object[] firmParam = new Object[8];//存放公司数据 firmParam[1] = groupName;//存放集团名称,先优先考虑单集团的凭借 + firmParam[7] = "1"; firmParams.add(firmParam); } @@ -215,7 +247,7 @@ public class CapitalDayListDataPlugin extends AbstractReportListDataPlugin imple Date begindate = bd_period.getDate("begindate");//获取期初时间 DynamicObject org = cas_cashmgtinits[i].getDynamicObject("org"); if (org != null){//当前组织不为空时,查询对应付款单和收款单,计算收入 - Object[] firmParam = new Object[7];//存放公司数据 + Object[] firmParam = new Object[8];//存放公司数据 String name = org.getString("name"); Object orgPkValue = org.getPkValue(); firmParam[1] = name;//存放公司名称 @@ -273,6 +305,7 @@ public class CapitalDayListDataPlugin extends AbstractReportListDataPlugin imple //期初余额 = 初始余额 + 期初前收入 - 期初前支出 BigDecimal startAmount = journalbalance_total.add(recAmountTotal).subtract(payAmountTotal); + startBalance = startBalance.add(startAmount); firmParam[2] = startAmount; if (endDate == null){ @@ -292,7 +325,7 @@ public class CapitalDayListDataPlugin extends AbstractReportListDataPlugin imple } per_recQF.and("payeedate",QCP.large_equals,startDate);//收款日期payeedate 业务日期bizdate per_recQF.and("payeedate",QCP.less_equals,overDate); - DynamicObject[] per_cas_recbills = BusinessDataServiceHelper.load("cas_recbill", "id,billno,org,org.id,org.number,actrecamt,currency,payertype,customerf7,customerf7,payer,receivingtype", per_recQF.toArray()); + DynamicObject[] per_cas_recbills = BusinessDataServiceHelper.load("cas_recbill", "id,billno,org,org.id,org.number,actrecamt,currency,payertype,payer,receivingtype", per_recQF.toArray()); BigDecimal transactions = this.getTransactions(per_cas_recbills); recLB =recLB.add(transactions); //内部往来收入合计 @@ -330,7 +363,9 @@ public class CapitalDayListDataPlugin extends AbstractReportListDataPlugin imple //期间余额 = 期初余额 +期间收入 -期间支出 BigDecimal endAmount = startAmount.add(perRecAmountTotal).subtract(perPayAmountTotal); + endBalance = endBalance.add(endAmount); firmParam[5] = endAmount; + firmParam[7] = "2"; firmParams.add(firmParam); payTotal = payTotal.add(perPayAmountTotal); recTotal = recTotal.add(perRecAmountTotal); @@ -341,24 +376,29 @@ public class CapitalDayListDataPlugin extends AbstractReportListDataPlugin imple } if ("group".equals(shkd_queryorgtype)&& cas_cashmgtinits.length > 0){ //总计行的组装 - Object[] firmParam = new Object[7];//存放公司数据 + Object[] firmParam = new Object[8];//存放公司数据 firmParam[1] = "总计"; + firmParam[2] = startBalance; // 期初余额总计 firmParam[3] = recTotal; //今日收入合计 firmParam[4] = payTotal; //今日收入合计 + firmParam[5] = endBalance;// 期间余额总计 + firmParam[7] = "3"; firmParams.add(firmParam); - Object[] firmParam2 = new Object[7];//存放内部往来数据 + Object[] firmParam2 = new Object[8];//存放内部往来数据 firmParam2[1] = "内部往来"; firmParam2[3] = recLB; //收入(内部往来)合计 firmParam2[4] = payLB; //支出(内部往来)合计 + firmParam2[7] = "3"; firmParams.add(firmParam2); //内部收支净额的组装 - Object[] firmParam3 = new Object[7];//存放内部往来数据 + Object[] firmParam3 = new Object[8];//存放内部往来数据 firmParam3[1] = "收支净额"; recNet = recTotal.subtract(recLB);//收入净额 payNet = payTotal.subtract(payLB);//支出净额 firmParam3[3] = recNet; //收入(内部往来)合计 firmParam3[4] = payNet; //支出(内部往来)合计 + firmParam3[7] = "3"; firmParams.add(firmParam3); } return firmParams;