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;
+ ]]>
+