Explorar o código

获客情况表修改

jincheng hai 2 días
pai
achega
73128bbd5f

+ 15 - 3
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/controller/admin/report/vo/YangtzePassengerSummaryRespVO.java

@@ -43,15 +43,15 @@ public class YangtzePassengerSummaryRespVO {
 
     @Schema(description = "预订间数-总数", example = "200")
     @ExcelProperty("预订间数-总数")
-    private Integer totalRooms;
+    private BigDecimal totalRooms;
 
     @Schema(description = "预订间数-实收房间数(锁位订单)", example = "180")
     @ExcelProperty("预订间数-实收房间数")
-    private Integer paidRooms;
+    private BigDecimal paidRooms;
 
     @Schema(description = "预订间数-占位房间数(留位订单)", example = "190")
     @ExcelProperty("预订间数-占位房间数")
-    private Integer reservedRooms;
+    private BigDecimal reservedRooms;
 
     // ========== 实收人数 ==========
 
@@ -151,4 +151,16 @@ public class YangtzePassengerSummaryRespVO {
     @ExcelProperty("境内外比")
     private String domesticOverseasRatio;
 
+    // ========== 升楼层礼遇 ==========
+
+    @Schema(description = "升楼层礼遇数量(锁位+审核中+留位订单含升楼层产品)", example = "5")
+    @ExcelProperty("升楼层礼遇数量")
+    private Integer upgradeFloorCount;
+
+    // ========== 套房95折 ==========
+
+    @Schema(description = "套房95折数量(锁位+审核中+留位订单含套房95折产品)", example = "3")
+    @ExcelProperty("套房95折数量")
+    private Integer suiteDiscountCount;
+
 }

+ 44 - 26
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/report/impl/OpsDailyServiceImpl.java

@@ -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