|
|
@@ -759,6 +759,9 @@ public class OpsDailyServiceImpl implements OpsDailyService {
|
|
|
head.add(new ArrayList<>(Arrays.asList("团队情况", "境内")));
|
|
|
head.add(new ArrayList<>(Arrays.asList("团队情况", "境外")));
|
|
|
head.add(new ArrayList<>(Arrays.asList("团队情况", "境内外比")));
|
|
|
+ // 28-29. 礼遇与折扣
|
|
|
+ head.add(new ArrayList<>(Collections.singletonList("升楼层礼遇数量")));
|
|
|
+ head.add(new ArrayList<>(Collections.singletonList("套房95折数量")));
|
|
|
|
|
|
return head;
|
|
|
}
|
|
|
@@ -769,47 +772,62 @@ public class OpsDailyServiceImpl implements OpsDailyService {
|
|
|
private List<List<Object>> transformExportData2(List<YangtzePassengerSummaryRespVO> dataList) {
|
|
|
List<List<Object>> result = new ArrayList<>(dataList.size());
|
|
|
for (YangtzePassengerSummaryRespVO row : dataList) {
|
|
|
- List<Object> rowData = new ArrayList<>(28);
|
|
|
- rowData.add(row.getIndex() != null ? String.valueOf(row.getIndex()) : "");
|
|
|
+ List<Object> rowData = new ArrayList<>(30);
|
|
|
+ // 序号 - 文本
|
|
|
+ rowData.add(row.getIndex() != null ? row.getIndex() : "");
|
|
|
+ // 船舶 - 文本
|
|
|
rowData.add(row.getShipName() != null ? row.getShipName() : "");
|
|
|
+ // 航次 - 文本
|
|
|
rowData.add(row.getVoyageInfo() != null ? row.getVoyageInfo() : "");
|
|
|
- rowData.add(row.getCountdown() != null ? String.valueOf(row.getCountdown()) : "");
|
|
|
- rowData.add(formatNumber2(row.getTotalRooms()));
|
|
|
- rowData.add(formatNumber2(row.getPaidRooms()));
|
|
|
- rowData.add(formatNumber2(row.getReservedRooms()));
|
|
|
- rowData.add(formatNumber2(row.getTotalPassengers()));
|
|
|
- rowData.add(formatNumber2(row.getTicketedPassengers()));
|
|
|
- rowData.add(formatNumber2(row.getFreePassengers()));
|
|
|
- rowData.add(formatNumber2(row.getEstimatedPassengers()));
|
|
|
+ // 倒计时(天) - 数字
|
|
|
+ rowData.add(row.getCountdown() != null ? row.getCountdown() : 0);
|
|
|
+ // 预订间数 - 数字
|
|
|
+ rowData.add(row.getTotalRooms() != null ? row.getTotalRooms() : BigDecimal.ZERO);
|
|
|
+ rowData.add(row.getPaidRooms() != null ? row.getPaidRooms() : BigDecimal.ZERO);
|
|
|
+ rowData.add(row.getReservedRooms() != null ? row.getReservedRooms() : BigDecimal.ZERO);
|
|
|
+ // 实收人数 - 数字
|
|
|
+ rowData.add(row.getTotalPassengers() != null ? row.getTotalPassengers() : 0);
|
|
|
+ rowData.add(row.getTicketedPassengers() != null ? row.getTicketedPassengers() : 0);
|
|
|
+ rowData.add(row.getFreePassengers() != null ? row.getFreePassengers() : 0);
|
|
|
+ // 预计收客人数 - 数字
|
|
|
+ rowData.add(row.getEstimatedPassengers() != null ? row.getEstimatedPassengers() : 0);
|
|
|
+ // 备注 - 文本
|
|
|
rowData.add(row.getRemark() != null ? row.getRemark() : "");
|
|
|
+ // 财务情况 - 数字
|
|
|
rowData.add(formatMoney(row.getReceivableAmount()));
|
|
|
rowData.add(formatMoney(row.getReceivedAmount()));
|
|
|
rowData.add(formatMoney(row.getUnreceivedAmount()));
|
|
|
rowData.add(formatMoney(row.getAvgPrice()));
|
|
|
- rowData.add(formatNumber2(row.getCapacity()));
|
|
|
+ // 床位载客率 - 数字
|
|
|
+ rowData.add(row.getCapacity() != null ? row.getCapacity() : 0);
|
|
|
rowData.add(row.getBedOccupancyRate() != null ? row.getBedOccupancyRate() : "");
|
|
|
- rowData.add(formatNumber2(row.getAdultCount()));
|
|
|
- rowData.add(formatNumber2(row.getChildCount()));
|
|
|
- rowData.add(formatNumber2(row.getInfantCount()));
|
|
|
- rowData.add(formatNumber2(row.getCompanionLeaderCount()));
|
|
|
- rowData.add(formatNumber2(row.getGroupCount()));
|
|
|
- rowData.add(formatNumber2(row.getIndividualCount()));
|
|
|
+ // 实收详情 - 数字
|
|
|
+ rowData.add(row.getAdultCount() != null ? row.getAdultCount() : 0);
|
|
|
+ rowData.add(row.getChildCount() != null ? row.getChildCount() : 0);
|
|
|
+ rowData.add(row.getInfantCount() != null ? row.getInfantCount() : 0);
|
|
|
+ rowData.add(row.getCompanionLeaderCount() != null ? row.getCompanionLeaderCount() : 0);
|
|
|
+ // 团队情况 - 数字
|
|
|
+ rowData.add(row.getGroupCount() != null ? row.getGroupCount() : 0);
|
|
|
+ rowData.add(row.getIndividualCount() != null ? row.getIndividualCount() : 0);
|
|
|
rowData.add(row.getGroupIndividualRatio() != null ? row.getGroupIndividualRatio() : "");
|
|
|
- rowData.add(formatNumber2(row.getDomesticCount()));
|
|
|
- rowData.add(formatNumber2(row.getOverseasCount()));
|
|
|
+ rowData.add(row.getDomesticCount() != null ? row.getDomesticCount() : 0);
|
|
|
+ rowData.add(row.getOverseasCount() != null ? row.getOverseasCount() : 0);
|
|
|
rowData.add(row.getDomesticOverseasRatio() != null ? row.getDomesticOverseasRatio() : "");
|
|
|
+ // 升楼层礼遇数量 - 数字
|
|
|
+ rowData.add(row.getUpgradeFloorCount() != null ? row.getUpgradeFloorCount() : 0);
|
|
|
+ // 套房95折数量 - 数字
|
|
|
+ rowData.add(row.getSuiteDiscountCount() != null ? row.getSuiteDiscountCount() : 0);
|
|
|
result.add(rowData);
|
|
|
}
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
- private String formatNumber2(Integer val) {
|
|
|
- return val != null ? String.valueOf(val) : "0";
|
|
|
- }
|
|
|
-
|
|
|
- private String formatMoney(BigDecimal amount) {
|
|
|
- if (amount == null) return "0.00";
|
|
|
- return amount.setScale(2, RoundingMode.HALF_UP).toPlainString();
|
|
|
+ /**
|
|
|
+ * 格式化金额为 BigDecimal(保留2位小数),直接输出数字类型避免 Excel 文本格式
|
|
|
+ */
|
|
|
+ private BigDecimal formatMoney(BigDecimal amount) {
|
|
|
+ if (amount == null) return BigDecimal.ZERO;
|
|
|
+ return amount.setScale(2, RoundingMode.HALF_UP);
|
|
|
}
|
|
|
|
|
|
@Override
|