Browse Source

修复订单台报表人数显示问题

jinch 2 weeks ago
parent
commit
c984032ef7

+ 4 - 0
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/controller/admin/report/vo/IncomeOrderLedgerRespVO.java

@@ -77,6 +77,10 @@ public class IncomeOrderLedgerRespVO {
     @ExcelProperty("陪同数")
     private Integer companionCount;
 
+    @Schema(description = "领队数", example = "2")
+    @ExcelProperty("领队数")
+    private Integer leaderCount;
+
     @Schema(description = "免票数", example = "1")
     @ExcelProperty("免票")
     private Integer freeCount;

+ 25 - 21
ship-module-trade/ship-module-trade-biz/src/main/resources/mapper/report/IncomeOrderLedgerMapper.xml

@@ -16,20 +16,21 @@
             r.name AS routeName,
             rm.room_model_name AS roomTypeName,
             IFNULL(tot.use_room_total_num, 0) AS roomCount,
-            IFNULL(tot.adult_total_num, 0) AS adultCount,
-            IFNULL(tot.child_total_num, 0) AS childCount,
-            IFNULL(tot.baby_total_num, 0) AS infantCount,
-            IFNULL(tot.with_total_num, 0) AS companionCount,
-            IFNULL(tot.free_num, 0) AS freeCount,
-            (IFNULL(tot.adult_total_num, 0) + IFNULL(tot.child_total_num, 0) +
-             IFNULL(tot.baby_total_num, 0) + IFNULL(tot.with_total_num, 0) + IFNULL(tot.free_num, 0)) AS totalCount,
-            IFNULL(p.pay_amount, 0) - COALESCE(refund_fee_sum.refund_amount, 0) AS marketingPrice,
+            SUM(CASE WHEN tv.type IN ('adultPlus', 'adultTake') THEN 1 ELSE 0 END) AS adultCount,
+            SUM(CASE WHEN tv.type IN ('childTake','childPlus','childNonTake') THEN 1 ELSE 0 END) AS childCount,
+            SUM(CASE WHEN tv.type = 'with' THEN 1 ELSE 0 END) AS companionCount,
+            SUM(CASE WHEN tv.type = 'leader' THEN 1 ELSE 0 END) AS leaderCount,
+            SUM(CASE WHEN tv.type IN ('babyTake','babyPlus','babyNonTake') THEN 1 ELSE 0 END) AS infantCount,
+            SUM(CASE WHEN tv.type IN ('babyTake','babyPlus','babyNonTake','leader','with','childTake','childPlus','childNonTake','adultPlus', 'adultTake') THEN 1 ELSE 0 END) AS totalCount,
+             IFNULL(tot.free_num, 0) AS freeCount,
+            IFNULL(CASE WHEN o.pay_status = 1 THEN p.pay_amount else o.real_pay_amount END , 0) - COALESCE(refund_fee_sum.refund_amount, 0) AS marketingPrice,
             o.free_amount AS discountAmount,
-            COALESCE(refund_fee_sum.refundFee, 0) AS refundFee,
-           (IFNULL(p.pay_amount, 0) - IFNULL(o.free_amount, 0) - COALESCE(refund_fee_sum.refundFee, 0) - COALESCE(refund_fee_sum.refund_amount, 0)) AS actualSettlementPrice
+            COALESCE(refund_fee_sum.refund_amount, 0) AS refundFee,
+           (IFNULL(CASE WHEN o.pay_status = 1 THEN p.pay_amount else o.real_pay_amount END , 0) - IFNULL(o.free_amount, 0) - COALESCE(refund_fee_sum.refund_amount, 0)) AS actualSettlementPrice
         FROM trade_order o
         INNER JOIN product_voyage v ON o.voyage_id = v.id AND v.deleted = 0
         INNER JOIN resource_route r ON v.route_id = r.id AND r.deleted = 0
+        LEFT JOIN trade_visitor tv ON o.id = tv.order_id AND tv.deleted = 0
         LEFT JOIN trade_order_total tot ON o.id = tot.old_order_id AND tot.deleted = 0
         LEFT JOIN trade_order_pay p ON o.pay_status = 1 AND p.order_id = o.id AND p.deleted = 0 AND p.pay_status = 1
         LEFT JOIN (
@@ -42,7 +43,7 @@
         LEFT JOIN (
             SELECT order_id, SUM(fee) AS refundFee, SUM(refund_amount) AS refund_amount
             FROM trade_refund
-            WHERE deleted = 0 AND refund_status IN (6)
+            WHERE deleted = 0 AND refund_status IN (3,6)
             GROUP BY order_id
         ) refund_fee_sum ON o.id = refund_fee_sum.order_id
         WHERE o.deleted = 0
@@ -90,6 +91,7 @@
                 AND orm2.room_model_name LIKE CONCAT('%', #{vo.roomTypeName}, '%')
             )
         </if>
+        GROUP BY o.id
         ORDER BY o.create_time DESC
     </select>
 
@@ -107,20 +109,21 @@
             r.name AS routeName,
             rm.room_model_name AS roomTypeName,
             IFNULL(tot.use_room_total_num, 0) AS roomCount,
-            IFNULL(tot.adult_total_num, 0) AS adultCount,
-            IFNULL(tot.child_total_num, 0) AS childCount,
-            IFNULL(tot.baby_total_num, 0) AS infantCount,
-            IFNULL(tot.with_total_num, 0) AS companionCount,
+            SUM(CASE WHEN tv.type IN ('adultPlus', 'adultTake') THEN 1 ELSE 0 END) AS adultCount,
+            SUM(CASE WHEN tv.type IN ('childTake','childPlus','childNonTake') THEN 1 ELSE 0 END) AS childCount,
+            SUM(CASE WHEN tv.type = 'with' THEN 1 ELSE 0 END) AS companionCount,
+            SUM(CASE WHEN tv.type = 'leader' THEN 1 ELSE 0 END) AS leaderCount,
+            SUM(CASE WHEN tv.type IN ('babyTake','babyPlus','babyNonTake') THEN 1 ELSE 0 END) AS infantCount,
+            SUM(CASE WHEN tv.type IN ('babyTake','babyPlus','babyNonTake','leader','with','childTake','childPlus','childNonTake','adultPlus', 'adultTake') THEN 1 ELSE 0 END) AS totalCount,
             IFNULL(tot.free_num, 0) AS freeCount,
-            (IFNULL(tot.adult_total_num, 0) + IFNULL(tot.child_total_num, 0) +
-             IFNULL(tot.baby_total_num, 0) + IFNULL(tot.with_total_num, 0) + IFNULL(tot.free_num, 0)) AS totalCount,
-            IFNULL(p.pay_amount, 0) - COALESCE(refund_fee_sum.refund_amount, 0) AS marketingPrice,
+            IFNULL(CASE WHEN o.pay_status = 1 THEN p.pay_amount else o.real_pay_amount END , 0) - COALESCE(refund_fee_sum.refund_amount, 0) AS marketingPrice,
             o.free_amount AS discountAmount,
-            COALESCE(refund_fee_sum.refundFee, 0) AS refundFee,
-            (IFNULL(p.pay_amount, 0) - IFNULL(o.free_amount, 0) - COALESCE(refund_fee_sum.refundFee, 0) - COALESCE(refund_fee_sum.refund_amount, 0)) AS actualSettlementPrice
+            COALESCE(refund_fee_sum.refund_amount, 0) AS refundFee,
+            (IFNULL(CASE WHEN o.pay_status = 1 THEN p.pay_amount else o.real_pay_amount END , 0) - IFNULL(o.free_amount, 0) - COALESCE(refund_fee_sum.refund_amount, 0)) AS actualSettlementPrice
         FROM trade_order o
         INNER JOIN product_voyage v ON o.voyage_id = v.id AND v.deleted = 0
         INNER JOIN resource_route r ON v.route_id = r.id AND r.deleted = 0
+        LEFT JOIN trade_visitor tv ON o.id = tv.order_id AND tv.deleted = 0
         LEFT JOIN trade_order_total tot ON o.id = tot.old_order_id AND tot.deleted = 0
         LEFT JOIN trade_order_pay p ON o.pay_status = 1 AND p.order_id = o.id AND p.deleted = 0 AND p.pay_status = 1
         LEFT JOIN (
@@ -133,7 +136,7 @@
         LEFT JOIN (
             SELECT order_id, SUM(fee) AS refundFee, SUM(refund_amount) AS refund_amount
             FROM trade_refund
-            WHERE deleted = 0 AND refund_status IN (6)
+            WHERE deleted = 0 AND refund_status IN (3,6)
             GROUP BY order_id
         ) refund_fee_sum ON o.id = refund_fee_sum.order_id
         WHERE o.deleted = 0
@@ -181,6 +184,7 @@
                 AND orm2.room_model_name LIKE CONCAT('%', #{vo.roomTypeName}, '%')
             )
         </if>
+        GROUP BY o.id
         ORDER BY o.create_time DESC
     </select>