报表优化
This commit is contained in:
parent
27a5aacbba
commit
949848a021
|
|
@ -38,24 +38,26 @@ public class FinancialFormReport extends AbstractReportFormPlugin implements Plu
|
|||
private static final String[] DYNAMICS_FIELDS = {
|
||||
"shjh_projectrevenueamt","shjh_date","shjh_days","shjh_revenueamt",
|
||||
"shjh_monthrevenueamt","shjh_monthrate","shjh_yearrevenueamt",
|
||||
"shjh_yearrate","shjh_actualearnings","shjh_actualrate","shjh_expire"
|
||||
"shjh_yearrate","shjh_actualearnings","shjh_actualrate","shjh_expire","shjh_nowamount"
|
||||
};
|
||||
|
||||
@Override
|
||||
public void beforeQuery(ReportQueryParam queryParam) {
|
||||
super.beforeQuery(queryParam);
|
||||
ReportList reportList = getControl("reportlistap");
|
||||
reportList.getColumns().add(ReportUtils.createReportColumn(new String [] { DYNAMICS_FIELDS[0], "预计收益(千元)", ReportColumn.TYPE_DECIMAL , String.valueOf(2)}));
|
||||
reportList.getColumns().add(ReportUtils.createReportColumn(new String [] { DYNAMICS_FIELDS[0], "预计收益(千元)", ReportColumn.TYPE_DECIMAL , String.valueOf(8)}));
|
||||
reportList.getColumns().add(ReportUtils.createReportColumn(new String [] { DYNAMICS_FIELDS[1], "计提日", ReportColumn.TYPE_DATE }));
|
||||
reportList.getColumns().add(ReportUtils.createReportColumn(new String [] { DYNAMICS_FIELDS[2], "天数", ReportColumn.TYPE_BIGINT }));
|
||||
reportList.getColumns().add(ReportUtils.createReportColumn(new String [] { DYNAMICS_FIELDS[3], "收益计提(千元)", ReportColumn.TYPE_DECIMAL , String.valueOf(2)}));
|
||||
reportList.getColumns().add(ReportUtils.createReportColumn(new String [] { DYNAMICS_FIELDS[4], "本月收益(千元)", ReportColumn.TYPE_DECIMAL , String.valueOf(2)}));
|
||||
reportList.getColumns().add(ReportUtils.createReportColumn(new String [] { DYNAMICS_FIELDS[5], "当月年化收益率(%)", ReportColumn.TYPE_DECIMAL , String.valueOf(2)}));
|
||||
reportList.getColumns().add(ReportUtils.createReportColumn(new String [] { DYNAMICS_FIELDS[6], "本年累计收益(千元)", ReportColumn.TYPE_DECIMAL , String.valueOf(2)}));
|
||||
reportList.getColumns().add(ReportUtils.createReportColumn(new String [] { DYNAMICS_FIELDS[7], "本年累计年化收益率(%)", ReportColumn.TYPE_DECIMAL , String.valueOf(2)}));
|
||||
reportList.getColumns().add(ReportUtils.createReportColumn(new String [] { DYNAMICS_FIELDS[8], "实际收益", ReportColumn.TYPE_DECIMAL , String.valueOf(2)}));
|
||||
reportList.getColumns().add(ReportUtils.createReportColumn(new String [] { DYNAMICS_FIELDS[9], "实际总收益率(%)", ReportColumn.TYPE_DECIMAL , String.valueOf(2)}));
|
||||
reportList.getColumns().add(ReportUtils.createReportColumn(new String [] { DYNAMICS_FIELDS[3], "收益计提(千元)", ReportColumn.TYPE_DECIMAL , String.valueOf(8)}));
|
||||
reportList.getColumns().add(ReportUtils.createReportColumn(new String [] { DYNAMICS_FIELDS[4], "本月收益(千元)", ReportColumn.TYPE_DECIMAL , String.valueOf(8)}));
|
||||
reportList.getColumns().add(ReportUtils.createReportColumn(new String [] { DYNAMICS_FIELDS[5], "当月年化收益率(%)", ReportColumn.TYPE_DECIMAL , String.valueOf(8)}));
|
||||
reportList.getColumns().add(ReportUtils.createReportColumn(new String [] { DYNAMICS_FIELDS[6], "本年累计收益(千元)", ReportColumn.TYPE_DECIMAL , String.valueOf(8)}));
|
||||
reportList.getColumns().add(ReportUtils.createReportColumn(new String [] { DYNAMICS_FIELDS[7], "本年累计年化收益率(%)", ReportColumn.TYPE_DECIMAL , String.valueOf(8)}));
|
||||
reportList.getColumns().add(ReportUtils.createReportColumn(new String [] { DYNAMICS_FIELDS[8], "实际收益", ReportColumn.TYPE_DECIMAL , String.valueOf(8)}));
|
||||
reportList.getColumns().add(ReportUtils.createReportColumn(new String [] { DYNAMICS_FIELDS[9], "实际总收益率(%)", ReportColumn.TYPE_DECIMAL , String.valueOf(8)}));
|
||||
reportList.getColumns().add(ReportUtils.createReportColumn(new String [] { DYNAMICS_FIELDS[10], "是否已到期", ReportColumn.TYPE_TEXT }));
|
||||
reportList.getColumns().add(ReportUtils.createReportColumn(new String [] { DYNAMICS_FIELDS[11], "金额(千元)", ReportColumn.TYPE_DECIMAL , String.valueOf(8)}));
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -81,7 +83,7 @@ public class FinancialFormReport extends AbstractReportFormPlugin implements Plu
|
|||
DynamicObject row = iterator.next();
|
||||
//1.金额(千元)设置
|
||||
BigDecimal amount = ReportUtils.getBigDecimalValue(row, REPORT_FIELDS[4]); // 原始金额(元)
|
||||
BigDecimal buyAmount = amount.divide(new BigDecimal(1000), 2, RoundingMode.HALF_UP);//购买金额(千元)
|
||||
BigDecimal buyAmount = amount.divide(new BigDecimal(1000), 8, RoundingMode.HALF_UP);//购买金额(千元)
|
||||
row.set(REPORT_FIELDS[4],buyAmount);
|
||||
|
||||
BigDecimal netWorth = ReportUtils.getBigDecimalValue(row, REPORT_FIELDS[6]); // 购买时单位净值
|
||||
|
|
@ -139,7 +141,9 @@ public class FinancialFormReport extends AbstractReportFormPlugin implements Plu
|
|||
|
||||
//实际总收益率=实际收益/金额
|
||||
BigDecimal actualEarnings = ReportUtils.getBigDecimalValue(row, DYNAMICS_FIELDS[8]);
|
||||
row.set(DYNAMICS_FIELDS[9],actualEarnings.divide(buyAmount,2, RoundingMode.HALF_UP));
|
||||
row.set(DYNAMICS_FIELDS[9],actualEarnings
|
||||
.divide(buyAmount,8, RoundingMode.HALF_UP)
|
||||
.multiply(BigDecimal.valueOf(100)));
|
||||
sumActualEarnings=sumActualEarnings.add(actualEarnings);
|
||||
|
||||
//小计行合计
|
||||
|
|
@ -218,6 +222,10 @@ public class FinancialFormReport extends AbstractReportFormPlugin implements Plu
|
|||
DynamicObject lastMonthRecord = null;
|
||||
DynamicObject lastYearRecord = null;
|
||||
DynamicObject yearStartRecord = null;
|
||||
//上月赎回比之积
|
||||
BigDecimal redMonthProduct = BigDecimal.ONE;
|
||||
//上年赎回比之积
|
||||
BigDecimal redYearProduct = BigDecimal.ONE;
|
||||
long minDiff = Long.MAX_VALUE;
|
||||
|
||||
// 获取计提日期相关信息
|
||||
|
|
@ -284,6 +292,8 @@ public class FinancialFormReport extends AbstractReportFormPlugin implements Plu
|
|||
lastMonthRecord = object;
|
||||
}
|
||||
}
|
||||
//上月最后一次估值记录往上赎回比之积
|
||||
redMonthProduct=this.getRedProductAmount(dynamicObjectCollection,lastMonthRecord.getDate("e_valuationdate"));
|
||||
}
|
||||
|
||||
// 4. 寻找上一年最后一次估值记录(相同日期取赎回日期最大的)
|
||||
|
|
@ -297,6 +307,7 @@ public class FinancialFormReport extends AbstractReportFormPlugin implements Plu
|
|||
lastYearRecord = object;
|
||||
}
|
||||
}
|
||||
redYearProduct=this.getRedProductAmount(dynamicObjectCollection,lastYearRecord.getDate("e_valuationdate"));
|
||||
}
|
||||
|
||||
// 5. 寻找本年第一个估值记录(相同日期取赎回日期最大的)
|
||||
|
|
@ -323,6 +334,8 @@ public class FinancialFormReport extends AbstractReportFormPlugin implements Plu
|
|||
|
||||
//计提日最近估值记录获取——(1-赎回份额/赎回日剩余份额)* 所有赎回单
|
||||
allRedProductAmount=this.getRedProductAmount(dynamicObjectCollection,closestRecord.getDate("e_valuationdate"));
|
||||
//计算金额(千元)
|
||||
row.set(DYNAMICS_FIELDS[11],allRedProductAmount.multiply(buyAmount).setScale(8, RoundingMode.HALF_UP));
|
||||
}
|
||||
|
||||
// 设置月末单位净值
|
||||
|
|
@ -363,28 +376,29 @@ public class FinancialFormReport extends AbstractReportFormPlugin implements Plu
|
|||
.multiply(lastMonthRecord.getBigDecimal("e_surpcopies")).add(lastMonthRedAmount);
|
||||
|
||||
monthAmount = currentMarketValue.subtract(lastMonthMarketValue)
|
||||
.divide(new BigDecimal(1000), 2, RoundingMode.HALF_UP);
|
||||
.divide(new BigDecimal(1000), 8, RoundingMode.HALF_UP);
|
||||
|
||||
// 计算当月年化收益率
|
||||
// 本月收益/购买金额*100*12
|
||||
// 本月收益/(购买金额*(赎回比之积))*100*12
|
||||
if (lastMonthMarketValue.compareTo(BigDecimal.ZERO) != 0) {
|
||||
monthAnnualizedRate = monthAmount
|
||||
.divide(buyAmount, 6, RoundingMode.HALF_UP)
|
||||
.divide(buyAmount, 8, RoundingMode.HALF_UP)
|
||||
.multiply(redMonthProduct)
|
||||
.multiply(new BigDecimal(1200))
|
||||
.setScale(2, RoundingMode.HALF_UP);
|
||||
.setScale(8, RoundingMode.HALF_UP);
|
||||
}
|
||||
} else if (accrualYear == buyYear && accrualMonth == buyMonth) {
|
||||
// 特殊处理:计提月与购买月相同时,使用购买金额作为上月市值
|
||||
// ②如果计提日期和购买日同月,"上月最后一次的市值行"取购买金额
|
||||
monthAmount = currentMarketValue.subtract(buyAmount.multiply(new BigDecimal(1000)))
|
||||
.divide(new BigDecimal(1000), 2, RoundingMode.HALF_UP);
|
||||
.divide(new BigDecimal(1000), 8, RoundingMode.HALF_UP);
|
||||
|
||||
if (buyAmount.compareTo(BigDecimal.ZERO) != 0) {
|
||||
//本月收益/购买金额*100*12
|
||||
monthAnnualizedRate = monthAmount
|
||||
.divide(buyAmount, 6, RoundingMode.HALF_UP)
|
||||
.divide(buyAmount, 8, RoundingMode.HALF_UP)
|
||||
.multiply(new BigDecimal(1200))
|
||||
.setScale(2, RoundingMode.HALF_UP);
|
||||
.setScale(8, RoundingMode.HALF_UP);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -404,15 +418,16 @@ public class FinancialFormReport extends AbstractReportFormPlugin implements Plu
|
|||
.multiply(lastYearRecord.getBigDecimal("e_surpcopies")).add(lastYearRedAmount);
|
||||
|
||||
yearAmount = currentMarketValue.subtract(lastYearMarketValue)
|
||||
.divide(new BigDecimal(1000), 2, RoundingMode.HALF_UP);
|
||||
.divide(new BigDecimal(1000), 8, RoundingMode.HALF_UP);
|
||||
|
||||
//本年累计年化收益率=(本年累计总收益额/金额)/(计提日期到-年初日期)*计息基准天数
|
||||
//本年累计年化收益率=(本年累计总收益额/(金额*(赎回比之积)))/(计提日期到-年初日期)*计息基准天数
|
||||
if (buyAmount.compareTo(BigDecimal.ZERO) != 0 && BigDecimal.valueOf(daysFromJan1).compareTo(BigDecimal.ZERO) != 0 ) {
|
||||
yearAnnualizedRate = yearAmount
|
||||
.divide(buyAmount, 6, RoundingMode.HALF_UP)
|
||||
.divide(BigDecimal.valueOf(daysFromJan1), 6, RoundingMode.HALF_UP)
|
||||
.divide(buyAmount.multiply(redYearProduct), 8, RoundingMode.HALF_UP)
|
||||
.divide(BigDecimal.valueOf(daysFromJan1), 8, RoundingMode.HALF_UP)
|
||||
.multiply(basisDays)
|
||||
.setScale(2, RoundingMode.HALF_UP);
|
||||
.multiply(BigDecimal.valueOf(100))
|
||||
.setScale(8, RoundingMode.HALF_UP);
|
||||
}
|
||||
} else if (accrualYear == buyYear) {
|
||||
// 特殊处理:计提年与购买年相同时:本年累计年化收益率=(本年累计总收益额/金额)/天数*计息基准天数
|
||||
|
|
@ -420,14 +435,15 @@ public class FinancialFormReport extends AbstractReportFormPlugin implements Plu
|
|||
|
||||
if (buyAmount.compareTo(BigDecimal.ZERO) != 0 ) {
|
||||
yearAmount = currentMarketValue.subtract(buyAmount.multiply(new BigDecimal(1000)))
|
||||
.divide(new BigDecimal(1000), 2, RoundingMode.HALF_UP);
|
||||
.divide(new BigDecimal(1000), 8, RoundingMode.HALF_UP);
|
||||
|
||||
if (days.compareTo(BigDecimal.ZERO) !=0 ){
|
||||
yearAnnualizedRate = yearAmount
|
||||
.divide(buyAmount, 6, RoundingMode.HALF_UP)
|
||||
.divide(days, 6, RoundingMode.HALF_UP)
|
||||
.divide(buyAmount, 8, RoundingMode.HALF_UP)
|
||||
.divide(days, 8, RoundingMode.HALF_UP)
|
||||
.multiply(basisDays)
|
||||
.setScale(2, RoundingMode.HALF_UP);
|
||||
.multiply(BigDecimal.valueOf(100))
|
||||
.setScale(8, RoundingMode.HALF_UP);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -708,7 +724,7 @@ public class FinancialFormReport extends AbstractReportFormPlugin implements Plu
|
|||
if (expectedRate != null) {
|
||||
projectRevenue = new BigDecimal(day).multiply(amount.divide(new BigDecimal(1000), 10, RoundingMode.HALF_UP))
|
||||
.multiply(expectedRate.divide(new BigDecimal(100), 10, RoundingMode.HALF_UP))
|
||||
.divide(basisDay, 2, RoundingMode.HALF_UP);
|
||||
.divide(basisDay, 8, RoundingMode.HALF_UP);
|
||||
row.set(DYNAMICS_FIELDS[0], projectRevenue);
|
||||
}
|
||||
return projectRevenue;
|
||||
|
|
@ -742,7 +758,7 @@ public class FinancialFormReport extends AbstractReportFormPlugin implements Plu
|
|||
// 计算:(持有份额 * 月末单位净值+(所有赎回单金额+实际收益) - 购买份额 * 购买时单位净值) / 1000
|
||||
revenue = buyCopies.multiply(monthNetWorth)
|
||||
.subtract(startBuyCopies.multiply(netWorth).multiply(allRedProductAmount))
|
||||
.divide(new BigDecimal(1000), 2, RoundingMode.HALF_UP);
|
||||
.divide(new BigDecimal(1000), 8, RoundingMode.HALF_UP);
|
||||
|
||||
// 设置到表格行
|
||||
boolean isValidPeriod = !valueDate.after(accrualDate) && !accrualDate.after(expireDate);
|
||||
|
|
@ -784,7 +800,7 @@ public class FinancialFormReport extends AbstractReportFormPlugin implements Plu
|
|||
revenue = buyCopies.multiply(monthNetWorth)
|
||||
.add(redAmount)
|
||||
.subtract(startBuyCopies.multiply(netWorth))
|
||||
.divide(new BigDecimal(1000), 2, RoundingMode.HALF_UP);
|
||||
.divide(new BigDecimal(1000), 8, RoundingMode.HALF_UP);
|
||||
row.set(DYNAMICS_FIELDS[8], revenue); // 实际收益
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue