Преглед изворни кода

兼容旧版数据库的手机号查询

将手机号标准化查询中的正则替换函数改为旧版数据库支持的字符替换组合,并同步更新映射测试断言。
qmj пре 2 дана
родитељ
комит
7938663ff9

+ 14 - 1
ruoyi-system/src/main/resources/mapper/infouser/InfoUserMapper.xml

@@ -108,7 +108,20 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         where user_type = '0'
           and status = '0'
           and (del_flag = '0' or del_flag is null)
-          and regexp_replace(phone, '[[:space:]()+-]', '') = #{normalizedPhone}
+          and replace(
+                replace(
+                  replace(
+                    replace(
+                      replace(
+                        replace(
+                          replace(phone, ' ', ''),
+                          char(9), ''),
+                        char(10), ''),
+                      char(13), ''),
+                    '(', ''),
+                  ')', ''),
+                '+', ''),
+              '-', '') = #{normalizedPhone}
         order by user_id
         limit 2
     </select>

+ 5 - 1
ruoyi-system/src/test/java/com/ruoyi/system/mapper/flash/FlashDeliveryMapperXmlTest.java

@@ -31,7 +31,11 @@ class FlashDeliveryMapperXmlTest {
         assertTrue(xml.contains("user_type = '0'"));
         assertTrue(xml.contains("status = '0'"));
         assertTrue(xml.contains("del_flag = '0' or del_flag is null"));
-        assertTrue(xml.contains("regexp_replace(phone"));
+        assertFalse(xml.contains("regexp_replace("));
+        assertTrue(xml.contains("replace(phone, ' ', '')"));
+        assertTrue(xml.contains("char(9)"));
+        assertTrue(xml.contains("char(10)"));
+        assertTrue(xml.contains("char(13)"));
         assertTrue(xml.contains("limit 2"));
     }