ソースを参照

fix(statistics):修正统计查询中的时区处理问题

- 在日期比较中增加8小时时区偏移处理
- 调整时间范围判断逻辑以适应不同时区场景
- 统一各统计查询中的时间处理方式
- 优化时间条件判断的可读性和准确性
- 确保周、月统计数据按时区正确划分- 修复因时区差异导致的数据统计偏差问题
SheepHy 1 週間 前
コミット
3dad75ab7f

+ 17 - 17
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/mapper/xml/StatisticsMapper.xml

@@ -13,9 +13,9 @@
         WHERE opi.type NOT IN (0, 3, 4, 6)
             AND opi.order_status NOT IN (0, 3, 4, 5, 6)
             AND (
-                  (#{type} = 1 AND DATE(opi.create_time) = CURDATE()) OR
-            (#{type} = 2 AND YEARWEEK(opi.create_time, 1) = YEARWEEK(CURDATE(), 1)) OR
-            (#{type} = 3 AND YEAR(opi.create_time) = YEAR(CURDATE()) AND MONTH(opi.create_time) = MONTH(CURDATE())) OR
+                  (#{type} = 1 AND DATE(DATE_ADD(opi.create_time, INTERVAL 8 HOUR)) = CURDATE()) OR
+            (#{type} = 2 AND YEARWEEK(DATE_ADD(opi.create_time, INTERVAL 8 HOUR), 1) = YEARWEEK(CURDATE(), 1)) OR
+            (#{type} = 3 AND YEAR(DATE_ADD(opi.create_time, INTERVAL 8 HOUR)) = YEAR(CURDATE()) AND MONTH(DATE_ADD(opi.create_time, INTERVAL 8 HOUR)) = MONTH(CURDATE())) OR
             (#{type} IS NULL OR #{type} NOT IN (3,4,6))
             )
           AND s.org_code LIKE CONCAT(#{orgCode}, '%')
@@ -26,24 +26,24 @@
 
     <select id="findByDeptSum" resultType="map">
         SELECT
-            s.name AS name,
-            SUM(opi.price) AS total_price,
-            ROW_NUMBER() OVER (ORDER BY SUM(opi.quantity) DESC, SUM(opi.price) DESC) AS ranking
+        s.name AS name,
+        SUM(opi.price) AS total_price,
+        ROW_NUMBER() OVER (ORDER BY SUM(opi.quantity) DESC, SUM(opi.price) DESC) AS ranking
         FROM nm_order_pro_info opi
-                 JOIN nm_order o ON opi.order_code = o.order_code
-                 JOIN nm_site s ON o.org_code = s.org_code
+        JOIN nm_order o ON opi.order_code = o.order_code
+        JOIN nm_site s ON o.org_code = s.org_code
         WHERE opi.type NOT IN (0,3,4,6)
-          AND opi.order_status NOT IN (3,4,5,6)
-          AND (
-            (#{type} = 1 AND opi.create_time >= CURDATE() AND opi.create_time &lt; CURDATE() + INTERVAL 1 DAY) OR
-            (#{type} = 2 AND opi.create_time >= DATE_SUB(CURDATE(), INTERVAL WEEKDAY(CURDATE()) DAY) AND opi.create_time &lt; DATE_SUB(CURDATE(), INTERVAL WEEKDAY(CURDATE()) DAY) + INTERVAL 7 DAY) OR
-            (#{type} = 3 AND opi.create_time >= DATE_FORMAT(CURDATE(), '%Y-%m-01') AND opi.create_time &lt; DATE_FORMAT(CURDATE(), '%Y-%m-01') + INTERVAL 1 MONTH) OR
-            (#{type} IS NULL OR #{type} NOT IN (3,4,6))
-            )
-          AND s.org_code LIKE CONCAT(#{orgCode}, '%')
+        AND opi.order_status NOT IN (3,4,5,6)
+        AND (
+        (#{type} = 1 AND DATE_ADD(opi.create_time, INTERVAL 8 HOUR) >= CURDATE() AND DATE_ADD(opi.create_time, INTERVAL 8 HOUR) < CURDATE() + INTERVAL 1 DAY) OR
+        (#{type} = 2 AND DATE_ADD(opi.create_time, INTERVAL 8 HOUR) >= DATE_SUB(CURDATE(), INTERVAL WEEKDAY(CURDATE()) DAY) AND DATE_ADD(opi.create_time, INTERVAL 8 HOUR) < DATE_SUB(CURDATE(), INTERVAL WEEKDAY(CURDATE()) DAY) + INTERVAL 7 DAY) OR
+        (#{type} = 3 AND DATE_ADD(opi.create_time, INTERVAL 8 HOUR) >= DATE_FORMAT(CURDATE(), '%Y-%m-01') AND DATE_ADD(opi.create_time, INTERVAL 8 HOUR) < DATE_FORMAT(CURDATE(), '%Y-%m-01') + INTERVAL 1 MONTH) OR
+        (#{type} IS NULL OR #{type} NOT IN (3,4,6))
+        )
+        AND s.org_code LIKE CONCAT(#{orgCode}, '%')
         GROUP BY s.org_code
         ORDER BY total_price DESC
-            LIMIT 30
+        LIMIT 30
     </select>
 
     <select id="findIndexStatistics" resultType="map">