Kaynağa Gözat

fix(statistics):修正统计查询中的时间过滤和分组逻辑

- 移除冗余的时间偏移计算,简化日期比较逻辑
-优化 `findByDeptSum` 查询,并统一按价格排序添加数量字段用于调试
-修复 `GROUP BY` 子句,确保包含所有非聚合字段避免潜在错误- 更新条件判断逻辑以支持更多类型筛选场景
- 确保查询结果限制为前30条记录以提升性能
SheepHy 5 gün önce
ebeveyn
işleme
dbb0fd2387

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

@@ -12,13 +12,13 @@
                  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 (0, 3, 4, 5, 6)
+            AND s.org_code LIKE CONCAT(#{orgCode}, '%')
             AND (
-                  (#{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))
+                  (#{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} IS NULL OR #{type} = '' OR #{type} NOT IN (1,2,3))
             )
-          AND s.org_code LIKE CONCAT(#{orgCode}, '%')
         GROUP BY product_name
         ORDER BY total_quantity DESC, total_price DESC
             LIMIT 30;
@@ -26,24 +26,26 @@
 
     <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,
+            SUM(opi.quantity) AS total_quantity,  -- 添加quantity用于调试
+            ROW_NUMBER() OVER (ORDER BY SUM(opi.price) DESC) AS ranking  -- 统一按price排序
         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 (0, 3, 4, 5, 6)
-        AND (
-        (#{type} = 1 AND DATE_ADD(opi.create_time, INTERVAL 8 HOUR) <![CDATA[ >= ]]> CURDATE() AND DATE_ADD(opi.create_time, INTERVAL 8 HOUR) <![CDATA[ < ]]> CURDATE() + INTERVAL 1 DAY) OR
-        (#{type} = 2 AND DATE_ADD(opi.create_time, INTERVAL 8 HOUR) <![CDATA[ >= ]]> DATE_SUB(CURDATE(), INTERVAL WEEKDAY(CURDATE()) DAY) AND DATE_ADD(opi.create_time, INTERVAL 8 HOUR) <![CDATA[ < ]]> DATE_SUB(CURDATE(), INTERVAL WEEKDAY(CURDATE()) DAY) + INTERVAL 7 DAY) OR
-        (#{type} = 3 AND DATE_ADD(opi.create_time, INTERVAL 8 HOUR) <![CDATA[ >= ]]> DATE_FORMAT(CURDATE(), '%Y-%m-01') AND DATE_ADD(opi.create_time, INTERVAL 8 HOUR) <![CDATA[ < ]]> 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
+            AND opi.order_status NOT IN (0, 3, 4, 5, 6)
+            AND (
+                  (#{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 (1,2,3))
+            )
+          AND s.org_code LIKE CONCAT(#{orgCode}, '%')
+        GROUP BY s.org_code, s.name  -- 添加s.name到GROUP BY
         ORDER BY total_price DESC
-        LIMIT 30
+            LIMIT 30;
     </select>
 
     <select id="findIndexStatistics" resultType="map">