Skip to content

Commit bf99d09

Browse files
committed
Support chinese pinyin search
1 parent dd6740d commit bf99d09

File tree

5 files changed

+135
-1
lines changed

5 files changed

+135
-1
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,3 +50,4 @@
5050
* Support mybatis flex order query
5151
* Support generate mybatis flex query condition
5252
* Support generate mybatis plus query condition
53+
* Support chinese pinyin search

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ You can read the [documentation](https://tangllty.eu.org/) for more information
1515
* Using Spring Boot 3 + Spring Security + MyBatis + Redis + Jwt
1616
* Support Java and Kotlin, etc.
1717
* Support MyBatis and MyBatis-Plus, etc.
18+
* Support chinese pinyin search
1819
* Permission management based on RBAC
1920
* Customized multiple login authentication methods
2021
* Dynamic permissions menu

README.zh.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ tang-boot 是基于 Spring Boot 3 的权限管理系统,使用 Java 和 Kotlin
1515
* 采用 Spring Boot 3 + Spring Security + MyBatis + Redis + Jwt
1616
* 支持 Java 和 Kotlin 等
1717
* 支持 MyBatis 和 MyBatis-Plus 等
18+
* 支持中文拼音搜索
1819
* 基于 RBAC 的权限管理
1920
* 自定义多种登录认证方式
2021
* 动态权限菜单

databases/20221210.sql

Lines changed: 131 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -440,6 +440,136 @@ create table sys_log_api (
440440
) engine = InnoDB auto_increment = 100 comment = '接口日志表';
441441

442442

443+
-- -----------------------------
444+
-- 汉语拼音编码表
445+
-- -----------------------------
446+
drop table if exists base_chinese_pinyin;
447+
create table base_chinese_pinyin (
448+
pinyin varchar(8) not null comment '拼音',
449+
code int(11) not null comment '编码',
450+
primary key (code)
451+
) engine = InnoDB comment = '汉语拼音编码表';
452+
453+
insert into base_chinese_pinyin (pinyin, code) values
454+
('a', 20319), ('ai', 20317), ('an', 20304), ('ang', 20295),
455+
('ao', 20292), ('ba', 20283), ('bai', 20265), ('ban', 20257),
456+
('bang', 20242), ('bao', 20230), ('bei', 20051), ('ben', 20036), ('beng', 20032), ('bi', 20026), ('bian', 20002),
457+
('biao', 19990), ('bie', 19986), ('bin', 19982), ('bing', 19976), ('bo', 19805), ('bu', 19784),
458+
('ca', 19775), ('cai', 19774), ('can', 19763), ('cang', 19756), ('cao', 19751), ('ce', 19746), ('ceng', 19741),
459+
('cha', 19739), ('chai', 19728), ('chan', 19725), ('chang', 19715), ('chao', 19540), ('che', 19531), ('chen', 19525),
460+
('cheng', 19515), ('chi', 19500), ('chong', 19484), ('chou', 19479), ('chu', 19467), ('chuai', 19289), ('chuan', 19288),
461+
('chuang', 19281), ('chui', 19275), ('chun', 19270), ('chuo', 19263), ('ci', 19261), ('cong', 19249),('cou', 19243),
462+
('cu', 19242), ('cuan', 19238), ('cui', 19235), ('cun', 19227), ('cuo', 19224),
463+
('da', 19218), ('dai', 19212), ('dan', 19038), ('dang', 19023), ('dao', 19018), ('de', 19006), ('deng', 19003),
464+
('di', 18996), ('dian', 18977), ('diao', 18961), ('die', 18952), ('ding', 18783), ('diu', 18774), ('dong', 18773),
465+
('dou', 18763), ('du', 18756), ('duan', 18741), ('dui', 18735), ('dun', 18731), ('duo', 18722),
466+
('e', 18710), ('en', 18697), ('er', 18696),
467+
('fa', 18526), ('fan', 18518), ('fang', 18501), ('fei', 18490), ('fen', 18478), ('feng', 18463), ('fo', 18448),
468+
('fou', 18447), ('fu', 18446),
469+
('ga', 18239), ('gai', 18237), ('gan', 18231), ('gang', 18220), ('gao', 18211), ('ge', 18201), ('gei', 18184),
470+
('gen', 18183), ('geng', 18181), ('gong', 18012), ('gou', 17997), ('gu', 17988), ('gua', 17970), ('guai', 17964),
471+
('guan', 17961), ('guang', 17950), ('gui', 17947), ('gun', 17931), ('guo', 17928),
472+
('ha', 17922), ('hai', 17759), ('han', 17752), ('hang', 17733), ('hao', 17730), ('he', 17721), ('hei', 17703),
473+
('hen', 17701), ('heng', 17697), ('hong', 17692), ('hou', 17683), ('hu', 17676), ('hua', 17496), ('huai', 17487),
474+
('huan', 17482), ('huang', 17468), ('hui', 17454), ('hun', 17433), ('huo', 17427),
475+
('ji', 17417), ('jia', 17202), ('jian', 17185), ('jiang', 16983), ('jiao', 16970), ('jie', 16942), ('jin', 16915),
476+
('jing', 16733), ('jiong', 16708), ('jiu', 16706), ('ju', 16689), ('juan', 16664), ('jue', 16657), ('jun', 16647),
477+
('ka', 16474), ('kai', 16470), ('kan', 16465), ('kang', 16459), ('kao', 16452), ('ke', 16448), ('ken', 16433),
478+
('keng', 16429), ('kong', 16427), ('kou', 16423), ('ku', 16419), ('kua', 16412), ('kuai', 16407), ('kuan', 16403),
479+
('kuang', 16401), ('kui', 16393), ('kun', 16220), ('kuo', 16216),
480+
('la', 16212), ('lai', 16205), ('lan', 16202), ('lang', 16187), ('lao', 16180), ('le', 16171), ('lei', 16169),
481+
('leng', 16158), ('li', 16155), ('lia', 15959), ('lian', 15958), ('liang', 15944), ('liao', 15933), ('lie', 15920),
482+
('lin', 15915), ('ling', 15903), ('liu', 15889), ('long', 15878), ('lou', 15707), ('lu', 15701), ('lv', 15681),
483+
('luan', 15667), ('lue', 15661), ('lun', 15659), ('luo', 15652),
484+
('ma', 15640), ('mai', 15631), ('man', 15625), ('mang', 15454), ('mao', 15448), ('me', 15436), ('mei', 15435),
485+
('men', 15419), ('meng', 15416), ('mi', 15408), ('mian', 15394), ('miao', 15385), ('mie', 15377), ('min', 15375),
486+
('ming', 15369), ('miu', 15363), ('mo', 15362), ('mou', 15183), ('mu', 15180),
487+
('na', 15165), ('nai', 15158), ('nan', 15153), ('nang', 15150), ('nao', 15149), ('ne', 15144), ('nei', 15143),
488+
('nen', 15141), ('neng', 15140), ('ni', 15139), ('nian', 15128), ('niang', 15121), ('niao', 15119), ('nie', 15117),
489+
('nin', 15110), ('ning', 15109), ('niu', 14941), ('nong', 14937), ('nu', 14933), ('nv', 14930), ('nuan', 14929),
490+
('nue', 14928), ('nuo', 14926),
491+
('o', 14922), ('ou', 14921),
492+
('pa', 14914), ('pai', 14908), ('pan', 14902), ('pang', 14894), ('pao', 14889), ('pei', 14882), ('pen', 14873),
493+
('peng', 14871), ('pi', 14857), ('pian', 14678), ('piao', 14674), ('pie', 14670), ('pin', 14668), ('ping', 14663),
494+
('po', 14654), ('pu', 14645),
495+
('qi', 14630), ('qia', 14594), ('qian', 14429), ('qiang', 14407), ('qiao', 14399), ('qie', 14384), ('qin', 14379),
496+
('qing', 14368), ('qiong', 14355), ('qiu', 14353), ('qu', 14345), ('quan', 14170), ('que', 14159), ('qun', 14151),
497+
('ran', 14149), ('rang', 14145), ('rao', 14140), ('re', 14137), ('ren', 14135), ('reng', 14125), ('ri', 14123),
498+
('rong', 14122), ('rou', 14112), ('ru', 14109), ('ruan', 14099), ('rui', 14097), ('run', 14094), ('ruo', 14092),
499+
('sa', 14090), ('sai', 14087), ('san', 14083), ('sang', 13917), ('sao', 13914), ('se', 13910), ('sen', 13907),
500+
('seng', 13906), ('sha', 13905), ('shai', 13896), ('shan', 13894), ('shang', 13878), ('shao', 13870), ('she', 13859),
501+
('shen', 13847), ('sheng', 13831), ('shi', 13658), ('shou', 13611), ('shu', 13601), ('shua', 13406), ('shuai', 13404),
502+
('shuan', 13400), ('shuang', 13398), ('shui', 13395), ('shun', 13391), ('shuo', 13387), ('si', 13383), ('song', 13367),
503+
('sou', 13359), ('su', 13356), ('suan', 13343), ('sui', 13340), ('sun', 13329), ('suo', 13326),
504+
('ta', 13318), ('tai', 13147), ('tan', 13138), ('tang', 13120), ('tao', 13107), ('te', 13096), ('teng', 13095),
505+
('ti', 13091), ('tian', 13076), ('tiao', 13068), ('tie', 13063), ('ting', 13060), ('tong', 12888), ('tou', 12875),
506+
('tu', 12871), ('tuan', 12860), ('tui', 12858), ('tun', 12852), ('tuo', 12849),
507+
('wa', 12838), ('wai', 12831), ('wan', 12829), ('wang', 12812), ('wei', 12802), ('wen', 12607), ('weng', 12597),
508+
('wo', 12594), ('wu', 12585),
509+
('xi', 12556), ('xia', 12359), ('xian', 12346), ('xiang', 12320), ('xiao', 12300), ('xie', 12120), ('xin', 12099),
510+
('xing', 12089), ('xiong', 12074), ('xiu', 12067), ('xu', 12058), ('xuan', 12039), ('xue', 11867), ('xun', 11861),
511+
('ya', 11847), ('yan', 11831), ('yang', 11798), ('yao', 11781), ('ye', 11604), ('yi', 11589), ('yin', 11536),
512+
('ying', 11358), ('yo', 11340), ('yong', 11339), ('you', 11324), ('yu', 11303), ('yuan', 11097), ('yue', 11077),
513+
('yun', 11067),
514+
('za', 11055), ('zai', 11052), ('zan', 11045), ('zang', 11041), ('zao', 11038), ('ze', 11024), ('zei', 11020),
515+
('zen', 11019), ('zeng', 11018), ('zha', 11014), ('zhai', 10838), ('zhan', 10832), ('zhang', 10815), ('zhao', 10800),
516+
('zhe', 10790), ('zhen', 10780), ('zheng', 10764), ('zhi', 10587), ('zhong', 10544), ('zhou', 10533), ('zhu', 10519),
517+
('zhua', 10331), ('zhuai', 10329), ('zhuan', 10328), ('zhuang', 10322), ('zhui', 10315), ('zhun', 10309), ('zhuo', 10307),
518+
('zi', 10296), ('zong', 10281), ('zou', 10274), ('zu', 10270), ('zuan', 10262), ('zui', 10260), ('zun', 10256), ('zuo', 10254);
519+
520+
521+
-- -----------------------------
522+
-- 汉语转拼音函数
523+
-- -----------------------------
524+
drop function if exists to_pinyin;
525+
delimiter $
526+
527+
create function to_pinyin(input_val varchar(128) charset gbk)
528+
returns varchar(256) charset gbk
529+
deterministic
530+
no sql
531+
begin
532+
declare character_code int;
533+
declare left_character_code varchar(2) charset gbk;
534+
declare left_code int;
535+
declare right_character_code varchar(2) charset gbk;
536+
declare right_code int;
537+
declare pinyin_result varchar(256) charset gbk default '';
538+
declare loop_position int;
539+
540+
set character_code = 0;
541+
set loop_position = 1;
542+
set input_val = hex(input_val);
543+
544+
while loop_position < length(input_val)
545+
do
546+
set left_character_code = substring(input_val, loop_position, 2);
547+
set left_code = cast(ascii(unhex(left_character_code)) as unsigned);
548+
set right_character_code = substring(input_val, loop_position + 2, 2);
549+
set right_code = cast(ascii(unhex(right_character_code)) as unsigned);
550+
551+
if left_code > 128 then
552+
set character_code = 65536 - left_code * 256 - right_code;
553+
select concat(pinyin_result, pinyin)
554+
into pinyin_result
555+
from base_chinese_pinyin
556+
where code >= abs(character_code)
557+
order by code
558+
limit 1;
559+
set loop_position = loop_position + 4;
560+
else
561+
set pinyin_result = concat(pinyin_result, char(cast(ascii(unhex(substring(input_val, loop_position, 2))) as unsigned)));
562+
set loop_position = loop_position + 2;
563+
end if;
564+
end while;
565+
566+
return lower(pinyin_result);
567+
end;
568+
$
569+
570+
delimiter ;
571+
572+
443573
-- -----------------------------
444574
-- 代码生成表
445575
-- -----------------------------
@@ -593,4 +723,4 @@ insert into app_chat_message values (100, 885332953918476288, 1, null, '你好
593723
insert into app_chat_message values (101, 885332953918476288, 2, 100, '也就那么回事', 'tang', sysdate(), '', null, '');
594724
insert into app_chat_message values (102, 951182679020277760, 3, null, '你好嘛瞄~', 'admin', sysdate(), '', null, '');
595725

596-
commit;
726+
commit;

tang-system/src/main/resources/mapper/system/SysUserMapper.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@
5959
</if>
6060
<if test="nickname != null and nickname != ''">
6161
and u.nickname like concat('%', #{nickname}, '%')
62+
or to_pinyin(u.nickname) like concat('%', #{nickname}, '%')
6263
</if>
6364
<if test="gender != null and gender != ''">
6465
and u.gender = #{gender}

0 commit comments

Comments
 (0)