报表优化
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