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