Kaynağa Gözat

fix(sql):修正时区处理逻辑以确保正确的时间比较

- 在 AppSitePlaceMapper.xml 中修正了时间比较的逻辑错误
- 将所有 NOW() 函数替换为 CONVERT_TZ(NOW(), '+00:00', '+08:00')以适应本地时区
- 统一日期和时间的计算方式,确保在不同时区环境下的一致性
- 修正了 week_day 和日期偏移量的计算逻辑
- 更新了订单使用日期的格式化处理,确保时区转换后正确匹配- 修复了有效期判断条件,避免因时区差异导致的错误结果
SheepHy 4 hafta önce
ebeveyn
işleme
0eb9a9f0bf

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

@@ -88,13 +88,13 @@
                           b.id,b.start_time,b.end_time ,b.selling_price,
                           CASE
                               WHEN c.order_status <=1 THEN 1
-                              WHEN DATE_ADD(CURRENT_TIME(), INTERVAL 8 HOUR) > TIME(b.end_time) THEN 0
+                              WHEN DATE_ADD(CURRENT_TIME(), INTERVAL 8 HOUR) < TIME(b.end_time) THEN 0
                        ELSE 1
-        END AS concertStatus
+    END AS concertStatus
         from nm_site_place a
         left join  nm_site_price_rules b on a.id = b.site_place_id
         LEFT JOIN nm_order_pro_info c on c.product_id =b.id and c.use_date_str =#{today}
-    where a.site_id = #{siteId} and b.category_id =#{categoryId} and b.day_of_week =#{weekDay} AND b.del_flag = 0
+    where a.site_id = #{siteId} and b.category_id =#{categoryId} and b.day_of_week =#{weekDay} and b.del_flag = 0
         ]]>
     </select>
 </mapper>

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

@@ -5,9 +5,9 @@
         <![CDATA[WITH RECURSIVE dates AS (
         SELECT
             1 AS offset_day,
-            NOW() AS current_datetime,
-                     DATE(NOW()) AS date_val,
-                     WEEKDAY(DATE(NOW())) + 1 AS dow
+            CONVERT_TZ(NOW(), '+00:00', '+08:00') AS current_datetime,
+                     DATE(CONVERT_TZ(NOW(), '+00:00', '+08:00')) AS date_val,
+                     WEEKDAY(DATE(CONVERT_TZ(NOW(), '+00:00', '+08:00'))) + 1 AS dow
                  UNION ALL
     SELECT
         offset_day + 1,
@@ -31,16 +31,16 @@
         WHEN r.date_of_sale IS NOT NULL THEN r.date_of_sale
         ELSE
         -- 计算下一个指定星期几的日期 (使用本地时区)
-        DATE(NOW()) + INTERVAL (
-        (7 + (r.day_of_week - 1) - WEEKDAY(DATE(NOW()))) % 7
+        DATE(CONVERT_TZ(NOW(), '+00:00', '+08:00')) + INTERVAL (
+        (7 + (r.day_of_week - 1) - WEEKDAY(DATE(CONVERT_TZ(NOW(), '+00:00', '+08:00')))) % 7
         ) DAY
         END AS effective_date,
         ROW_NUMBER() OVER (
         PARTITION BY CASE
         WHEN r.date_of_sale IS NOT NULL THEN r.date_of_sale
         ELSE
-        DATE(NOW()) + INTERVAL (
-        (7 + (r.day_of_week - 1) - WEEKDAY(DATE(NOW()))) % 7
+        DATE(CONVERT_TZ(NOW(), '+00:00', '+08:00')) + INTERVAL (
+        (7 + (r.day_of_week - 1) - WEEKDAY(DATE(CONVERT_TZ(NOW(), '+00:00', '+08:00')))) % 7
         ) DAY
         END
         ORDER BY
@@ -53,8 +53,8 @@
         AND opi.use_date_str = CASE
         WHEN r.date_of_sale IS NOT NULL THEN DATE_FORMAT(r.date_of_sale, '%Y-%m-%d')
         ELSE DATE_FORMAT(
-        DATE(NOW()) + INTERVAL (
-        (7 + (r.day_of_week - 1) - WEEKDAY(DATE(NOW()))) % 7
+        DATE(CONVERT_TZ(NOW(), '+00:00', '+08:00')) + INTERVAL (
+        (7 + (r.day_of_week - 1) - WEEKDAY(DATE(CONVERT_TZ(NOW(), '+00:00', '+08:00')))) % 7
         ) DAY,
         '%Y-%m-%d'
         )
@@ -69,10 +69,10 @@
         (
         r.date_of_sale IS NOT NULL
       AND (
-        r.date_of_sale > DATE(NOW())
+        r.date_of_sale > DATE(CONVERT_TZ(NOW(), '+00:00', '+08:00'))
        OR (
-        r.date_of_sale = DATE(NOW())
-      AND r.start_time > TIME(NOW())
+        r.date_of_sale = DATE(CONVERT_TZ(NOW(), '+00:00', '+08:00'))
+      AND r.start_time > TIME(CONVERT_TZ(NOW(), '+00:00', '+08:00'))
         )
         )
         )
@@ -82,14 +82,14 @@
         r.date_of_sale IS NULL
       AND r.day_of_week IS NOT NULL
       AND (
-        DATE(NOW()) + INTERVAL (
-        (7 + (r.day_of_week - 1) - WEEKDAY(DATE(NOW()))) % 7
-        ) DAY > DATE(NOW())
+        DATE(CONVERT_TZ(NOW(), '+00:00', '+08:00')) + INTERVAL (
+        (7 + (r.day_of_week - 1) - WEEKDAY(DATE(CONVERT_TZ(NOW(), '+00:00', '+08:00')))) % 7
+        ) DAY > DATE(CONVERT_TZ(NOW(), '+00:00', '+08:00'))
        OR (
-        DATE(NOW()) + INTERVAL (
-        (7 + (r.day_of_week - 1) - WEEKDAY(DATE(NOW()))) % 7
-        ) DAY = DATE(NOW())
-      AND r.start_time > TIME(NOW())
+        DATE(CONVERT_TZ(NOW(), '+00:00', '+08:00')) + INTERVAL (
+        (7 + (r.day_of_week - 1) - WEEKDAY(DATE(CONVERT_TZ(NOW(), '+00:00', '+08:00')))) % 7
+        ) DAY = DATE(CONVERT_TZ(NOW(), '+00:00', '+08:00'))
+      AND r.start_time > TIME(CONVERT_TZ(NOW(), '+00:00', '+08:00'))
         )
         )
         )
@@ -130,7 +130,7 @@
             JOIN dates dm ON asl.effective_date = dm.date_val
     WHERE
         asl.rn = 1
-      AND NOT (dm.offset_day = 1 AND asl.start_time <= TIME(NOW()))
+      AND NOT (dm.offset_day = 1 AND asl.start_time <= TIME(CONVERT_TZ(NOW(), '+00:00', '+08:00')))
     ORDER BY
         dm.offset_day;
         ]]>