From 303e903d693082011cefd9dbbd0a612969c521277e5e53bc9435bd46311fb92e Mon Sep 17 00:00:00 2001 From: PC <2413103649@qq.com> Date: Mon, 26 Jan 2026 14:44:20 +0800 Subject: [PATCH] =?UTF-8?q?=E8=BF=94=E5=9B=9E=E5=8F=82=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../model/dto/EbikeBikeOrderDayCountDto.java | 7 + .../dto/EbikeBikeOrderMonthCountDto.java | 6 + .../model/dto/EbikeBikeOrderWeekCountDto.java | 7 + .../resources/mapper/EbikeBikeOrderMapper.xml | 213 ++++++++++++------ 4 files changed, 162 insertions(+), 71 deletions(-) diff --git a/ebike-operations/src/main/java/com/cdzy/operations/model/dto/EbikeBikeOrderDayCountDto.java b/ebike-operations/src/main/java/com/cdzy/operations/model/dto/EbikeBikeOrderDayCountDto.java index 4e4fb57..38eda91 100644 --- a/ebike-operations/src/main/java/com/cdzy/operations/model/dto/EbikeBikeOrderDayCountDto.java +++ b/ebike-operations/src/main/java/com/cdzy/operations/model/dto/EbikeBikeOrderDayCountDto.java @@ -7,6 +7,7 @@ import lombok.NoArgsConstructor; import java.io.Serial; import java.io.Serializable; +import java.math.BigDecimal; /** * 工单信息 实体类。 @@ -42,4 +43,10 @@ public class EbikeBikeOrderDayCountDto implements Serializable { * 昨天完成量 */ private Integer yesterdayCount; + + + /** + * 变化量 + */ + private BigDecimal changePercentage; } diff --git a/ebike-operations/src/main/java/com/cdzy/operations/model/dto/EbikeBikeOrderMonthCountDto.java b/ebike-operations/src/main/java/com/cdzy/operations/model/dto/EbikeBikeOrderMonthCountDto.java index 29d7ef1..dd9c63d 100644 --- a/ebike-operations/src/main/java/com/cdzy/operations/model/dto/EbikeBikeOrderMonthCountDto.java +++ b/ebike-operations/src/main/java/com/cdzy/operations/model/dto/EbikeBikeOrderMonthCountDto.java @@ -7,6 +7,7 @@ import lombok.NoArgsConstructor; import java.io.Serial; import java.io.Serializable; +import java.math.BigDecimal; /** * 工单信息 实体类。 @@ -42,4 +43,9 @@ public class EbikeBikeOrderMonthCountDto implements Serializable { * 上月完成量 */ private Integer lastMonthCount; + + /** + * 变化量 + */ + private BigDecimal changePercentage; } diff --git a/ebike-operations/src/main/java/com/cdzy/operations/model/dto/EbikeBikeOrderWeekCountDto.java b/ebike-operations/src/main/java/com/cdzy/operations/model/dto/EbikeBikeOrderWeekCountDto.java index 3e179ba..60f6649 100644 --- a/ebike-operations/src/main/java/com/cdzy/operations/model/dto/EbikeBikeOrderWeekCountDto.java +++ b/ebike-operations/src/main/java/com/cdzy/operations/model/dto/EbikeBikeOrderWeekCountDto.java @@ -7,6 +7,7 @@ import lombok.NoArgsConstructor; import java.io.Serial; import java.io.Serializable; +import java.math.BigDecimal; /** * 工单信息 实体类。 @@ -42,4 +43,10 @@ public class EbikeBikeOrderWeekCountDto implements Serializable { * 上周完成量 */ private Integer lastWeekCount; + + + /** + * 变化量 + */ + private BigDecimal changePercentage; } diff --git a/ebike-operations/src/main/resources/mapper/EbikeBikeOrderMapper.xml b/ebike-operations/src/main/resources/mapper/EbikeBikeOrderMapper.xml index da60321..1e4a92e 100644 --- a/ebike-operations/src/main/resources/mapper/EbikeBikeOrderMapper.xml +++ b/ebike-operations/src/main/resources/mapper/EbikeBikeOrderMapper.xml @@ -6,37 +6,62 @@ - + - - + = wr.current_week_start + AND ebo.handle_at < wr.current_week_end + THEN 1 + END), 0) as thisWeekCount, + COALESCE(COUNT(CASE + WHEN ebo.handle_at >= wr.last_week_start + AND ebo.handle_at < wr.current_week_start + THEN 1 + END), 0) as lastWeekCount, + COALESCE( + CASE + WHEN COALESCE(COUNT(CASE + WHEN ebo.handle_at >= wr.last_week_start + AND ebo.handle_at < wr.current_week_start + THEN 1 + END), 0) = 0 + THEN 0.0 + ELSE ROUND( + (COALESCE(COUNT(CASE + WHEN ebo.handle_at >= wr.current_week_start + AND ebo.handle_at < wr.current_week_end + THEN 1 + END), 0) - + COALESCE(COUNT(CASE + WHEN ebo.handle_at >= wr.last_week_start + AND ebo.handle_at < wr.current_week_start + THEN 1 + END), 0)) * 100.0 / + COALESCE(COUNT(CASE + WHEN ebo.handle_at >= wr.last_week_start + AND ebo.handle_at < wr.current_week_start + THEN 1 + END), 0), + 2 + ) + END, 0.0 + ) as changePercentage + FROM generate_series(1, 4) as aot(order_type) + CROSS JOIN week_range wr + LEFT JOIN ebike_bike_order ebo ON aot.order_type = ebo.order_type + AND ebo.handle_state = 2 + AND ebo.handle_at IS NOT NULL + AND ebo.is_deleted = false + AND ebo.receiver_id = #{receiverId} + AND ebo.handle_at >= wr.last_week_start + AND ebo.handle_at < wr.current_week_end + GROUP BY aot.order_type + ORDER BY aot.order_type; + ]]> +