jincheng 3 недель назад
Родитель
Сommit
a916734599

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

@@ -151,16 +151,28 @@ public class YangtzePassengerSummaryRespVO {
     @ExcelProperty("境内外比")
     private String domesticOverseasRatio;
 
-    // ========== 升楼层礼遇 ==========
+    // ========== 升楼层礼遇(增值服务:基于 trade_detail 产品) ==========
 
-    @Schema(description = "升楼层礼遇数量(锁位+审核中+留位订单含升楼层产品)", example = "5")
-    @ExcelProperty("升楼层礼遇数量")
+    @Schema(description = "升楼层礼遇数量(增值服务:锁位+审核中+留位订单含升楼层产品)", example = "5")
+    @ExcelProperty("增值服务-升楼层礼遇数量")
     private Integer upgradeFloorCount;
 
-    // ========== 套房95折 ==========
+    // ========== 套房95折(增值服务:基于 trade_detail 产品) ==========
 
-    @Schema(description = "套房95折数量(锁位+审核中+留位订单含套房95折产品)", example = "3")
-    @ExcelProperty("套房95折数量")
+    @Schema(description = "套房95折数量(增值服务:锁位+审核中+留位订单含套房95折产品)", example = "3")
+    @ExcelProperty("增值服务-套房95折数量")
     private Integer suiteDiscountCount;
 
+    // ========== 升楼层礼遇(营销政策:基于 marketing_policy / marketing_policy_detail) ==========
+
+    @Schema(description = "升楼层礼遇数量(营销政策:政策名称含'升楼层')", example = "5")
+    @ExcelProperty("营销政策-升楼层礼遇数量")
+    private Integer marketingUpgradeFloorCount;
+
+    // ========== 套房95折(营销政策:基于 marketing_policy / marketing_policy_detail) ==========
+
+    @Schema(description = "套房95折数量(营销政策:政策名称含'套房'且含'95')", example = "3")
+    @ExcelProperty("营销政策-套房95折数量")
+    private Integer marketingSuiteDiscountCount;
+
 }

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

@@ -763,9 +763,12 @@ 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折数量")));
+        // 28-29. 增值服务
+        head.add(new ArrayList<>(Arrays.asList("增值服务", "升楼层礼遇数量")));
+        head.add(new ArrayList<>(Arrays.asList("增值服务", "套房95折数量")));
+        // 30-31. 营销政策
+        head.add(new ArrayList<>(Arrays.asList("营销政策", "升楼层礼遇数量")));
+        head.add(new ArrayList<>(Arrays.asList("营销政策", "套房95折数量")));
 
         return head;
     }
@@ -817,10 +820,14 @@ public class OpsDailyServiceImpl implements OpsDailyService {
             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折数量 - 数字
+            // 套房95折数量(增值服务) - 数字
             rowData.add(row.getSuiteDiscountCount() != null ? row.getSuiteDiscountCount() : 0);
+            // 升楼层礼遇数量(营销政策) - 数字
+            rowData.add(row.getMarketingUpgradeFloorCount() != null ? row.getMarketingUpgradeFloorCount() : 0);
+            // 套房95折数量(营销政策) - 数字
+            rowData.add(row.getMarketingSuiteDiscountCount() != null ? row.getMarketingSuiteDiscountCount() : 0);
             result.add(rowData);
         }
         return result;
@@ -888,9 +895,12 @@ public class OpsDailyServiceImpl implements OpsDailyService {
         row.add(totalDomestic);
         row.add(totalOverseas);
         row.add(calcRatio(totalDomestic, totalOverseas));
-        // 升楼层礼遇、套房95折 - 汇总
+        // 升楼层礼遇、套房95折(增值服务) - 汇总
         row.add(sumInt(dataList, YangtzePassengerSummaryRespVO::getUpgradeFloorCount));
         row.add(sumInt(dataList, YangtzePassengerSummaryRespVO::getSuiteDiscountCount));
+        // 升楼层礼遇、套房95折(营销政策) - 汇总
+        row.add(sumInt(dataList, YangtzePassengerSummaryRespVO::getMarketingUpgradeFloorCount));
+        row.add(sumInt(dataList, YangtzePassengerSummaryRespVO::getMarketingSuiteDiscountCount));
         return row;
     }
 

+ 18 - 1
ship-module-trade/ship-module-trade-biz/src/main/resources/mapper/report/YangtzePassengerSummaryMapper.xml

@@ -41,7 +41,9 @@
         COALESCE(nationality_stats.domesticCount, 0) AS domesticCount,
         COALESCE(nationality_stats.overseasCount, 0) AS overseasCount,
         COALESCE(product_stats.upgradeFloorCount, 0) AS upgradeFloorCount,
-        COALESCE(product_stats.suiteDiscountCount, 0) AS suiteDiscountCount
+        COALESCE(product_stats.suiteDiscountCount, 0) AS suiteDiscountCount,
+        COALESCE(marketing_policy_stats.upgradeFloorCount, 0) AS marketingUpgradeFloorCount,
+        COALESCE(marketing_policy_stats.suiteDiscountCount, 0) AS marketingSuiteDiscountCount
         FROM product_voyage v
         INNER JOIN resource_ship s ON v.ship_id = s.id AND s.deleted = 0
         INNER JOIN resource_route r ON v.route_id = r.id AND r.deleted = 0
@@ -157,6 +159,21 @@
         GROUP BY o.voyage_id
         ) product_stats ON v.id = product_stats.voyage_id
 
+        LEFT JOIN (
+        SELECT
+        o.voyage_id,
+
+        SUM(CASE WHEN top.policy_name LIKE '升楼层%' THEN COALESCE(top.use_num, 0) * 2 ELSE 0 END) AS upgradeFloorCount,
+
+        SUM(CASE WHEN top.policy_name LIKE '套房95%' THEN COALESCE(top.use_num, 0) * 2 ELSE 0 END) AS suiteDiscountCount
+        FROM trade_order_policy top
+        INNER JOIN trade_order o ON o.id = top.order_id AND o.deleted = 0
+        WHERE top.deleted = 0
+        AND o.order_status IN (14, 13, 6, 1)
+        AND (top.policy_name LIKE '升楼层%' OR top.policy_name LIKE '套房95%')
+        GROUP BY o.voyage_id
+        ) marketing_policy_stats ON v.id = marketing_policy_stats.voyage_id
+
         WHERE v.deleted = 0
         <if test="vo.voyageIds != null and vo.voyageIds.size() > 0">
             AND v.id IN