‘liusuyi’
2023-11-21 ca39aeadb7b19b2e854d5e2694e52b63ef9e8afe
菜单/字典/系统配置增加双语
已修改19个文件
1560 ■■■■■ 文件已修改
ard-work/src/main/resources/mapper/device/ArdEquipExternalMapper.xml 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/resources/mapper/device/ArdEquipRadarMapper.xml 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/resources/i18n/messages.properties 221 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/resources/i18n/messages_en_US.properties 214 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/resources/i18n/messages_zh_CN.properties 211 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-common/src/main/java/com/ruoyi/common/core/domain/AjaxResult.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysConfig.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDictData.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDictType.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysMenu.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-common/src/main/java/com/ruoyi/common/filter/MyI18nInterceptor.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysConfigServiceImpl.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictDataServiceImpl.java 68 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictTypeServiceImpl.java 111 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java 260 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/resources/mapper/system/SysConfigMapper.xml 162 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/resources/mapper/system/SysDictDataMapper.xml 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/resources/mapper/system/SysDictTypeMapper.xml 200 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/resources/mapper/system/SysMenuMapper.xml 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/resources/mapper/device/ArdEquipExternalMapper.xml
@@ -51,6 +51,7 @@
        <include refid="selectArdEquipExternalVo"/>
        <where>
            <if test="name != null  and name != ''">and c.name like '%'||#{name}||'%'</if>
            <if test="ip != null  and ip != ''">and c.ip = #{ip}</if>
            <if test="type != null  and type != ''">and c.type = #{type}</if>
            <if test="factory != null  and factory != ''">and c.factory = #{factory}</if>
            <if test="deptId != null ">and (c.dept_id = #{deptId} OR c.dept_id IN ( SELECT t.dept_id FROM sys_dept t
ard-work/src/main/resources/mapper/device/ArdEquipRadarMapper.xml
@@ -85,6 +85,8 @@
        left join ard_towers t on t.id = c.tower_id
        <where>
            <if test="towerId != null  and towerId != ''">and c.tower_id = #{towerId}</if>
            <if test="ip != null  and ip != ''">and c.ip = #{ip}</if>
            <if test="type != null  and type != ''">and c.type = #{type}</if>
            <if test="userId != null  and userId != ''">and c.user_id = #{userId}</if>
            <if test="deptId != null ">and (c.dept_id = #{deptId} OR c.dept_id IN ( SELECT t.dept_id FROM sys_dept t
                WHERE cast(#{deptId} as varchar) = any(string_to_array(ancestors,',')) ))
ruoyi-admin/src/main/resources/i18n/messages.properties
@@ -10,12 +10,9 @@
user.blocked=\u7528\u6237\u5DF2\u5C01\u7981\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458
role.blocked=\u89D2\u8272\u5DF2\u5C01\u7981\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458
user.logout.success=\u9000\u51FA\u6210\u529F
length.not.valid=\u957F\u5EA6\u5FC5\u987B\u5728{min}\u5230{max}\u4E2A\u5B57\u7B26\u4E4B\u95F4
user.username.not.valid=* 2\u523020\u4E2A\u6C49\u5B57\u3001\u5B57\u6BCD\u3001\u6570\u5B57\u6216\u4E0B\u5212\u7EBF\u7EC4\u6210\uFF0C\u4E14\u5FC5\u987B\u4EE5\u975E\u6570\u5B57\u5F00\u5934
user.password.not.valid=* 5-50\u4E2A\u5B57\u7B26
user.email.not.valid=\u90AE\u7BB1\u683C\u5F0F\u9519\u8BEF
user.mobile.phone.number.not.valid=\u624B\u673A\u53F7\u683C\u5F0F\u9519\u8BEF
user.login.success=\u767B\u5F55\u6210\u529F
@@ -23,11 +20,9 @@
user.notfound=\u8BF7\u91CD\u65B0\u767B\u5F55
user.forcelogout=\u7BA1\u7406\u5458\u5F3A\u5236\u9000\u51FA\uFF0C\u8BF7\u91CD\u65B0\u767B\u5F55
user.unknown.error=\u672A\u77E5\u9519\u8BEF\uFF0C\u8BF7\u91CD\u65B0\u767B\u5F55
##\u6587\u4EF6\u4E0A\u4F20\u6D88\u606F
upload.exceed.maxSize=\u4E0A\u4F20\u7684\u6587\u4EF6\u5927\u5C0F\u8D85\u51FA\u9650\u5236\u7684\u6587\u4EF6\u5927\u5C0F\uFF01<br/>\u5141\u8BB8\u7684\u6587\u4EF6\u6700\u5927\u5927\u5C0F\u662F\uFF1A{0}MB\uFF01
upload.filename.exceed.length=\u4E0A\u4F20\u7684\u6587\u4EF6\u540D\u6700\u957F{0}\u4E2A\u5B57\u7B26
##\u6743\u9650
no.permission=\u60A8\u6CA1\u6709\u6570\u636E\u7684\u6743\u9650\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u6DFB\u52A0\u6743\u9650 [{0}]
no.create.permission=\u60A8\u6CA1\u6709\u521B\u5EFA\u6570\u636E\u7684\u6743\u9650\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u6DFB\u52A0\u6743\u9650 [{0}]
@@ -35,11 +30,9 @@
no.delete.permission=\u60A8\u6CA1\u6709\u5220\u9664\u6570\u636E\u7684\u6743\u9650\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u6DFB\u52A0\u6743\u9650 [{0}]
no.export.permission=\u60A8\u6CA1\u6709\u5BFC\u51FA\u6570\u636E\u7684\u6743\u9650\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u6DFB\u52A0\u6743\u9650 [{0}]
no.view.permission=\u60A8\u6CA1\u6709\u67E5\u770B\u6570\u636E\u7684\u6743\u9650\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u6DFB\u52A0\u6743\u9650 [{0}]
##\u7EDF\u4E00\u8FD4\u56DE
operation.failed=\u64CD\u4F5C\u5931\u8D25
operation.success=\u64CD\u4F5C\u6210\u529F
##\u83DC\u5355
menu.system=\u7CFB\u7EDF\u7BA1\u7406
menu.monitor=\u7CFB\u7EDF\u76D1\u63A7
@@ -70,67 +63,197 @@
menu.external=\u5916\u8054\u8BBE\u5907
menu.videoFusion=\u89C6\u9891\u878D\u5408
menu.tower=\u5854\u7BA1\u7406
menu.alarmpoints=\u5174\u8DA3\u70B9\u7BA1\u7406
menu.elecFence=\u7535\u5B50\u56F4\u680F
menu.tube=\u7BA1\u7EBF\u7BA1\u7406
menu.policeStation=\u8B66\u52A1\u5BA4\u7BA1\u7406
menu.peopleAndCar=\u4EBA\u5458\u53CA\u8F66\u8F86\u7BA1\u7406
menu.inspect=\u89C6\u9891\u5DE1\u68C0
menu.inspectTask=\u89C6\u9891\u5DE1\u68C0\u4EFB\u52A1
menu.inspectRecord=\u89C6\u9891\u5DE1\u68C0\u8BB0\u5F55
menu.vtdu=\u6D41\u5A92\u4F53\u7BA1\u7406
menu.vtduConfig=\u914D\u7F6E
menu.vtduPullStream=\u62C9\u6D41
menu.vtduPushStream=\u63A8\u6D41
menu.test=\u6D4B\u8BD5\u9875
menu.sdkTest=sdk\u6D4B\u8BD5\u9875
menu.vtduTest=\u6D41\u5A92\u4F53\u6D4B\u8BD5\u9875
menu.mqQueue=mq\u961F\u5217
menu.minio=minio\u5B58\u50A8
menu.minioEvent=\u5B58\u50A8\u4E8B\u4EF6
menu.minioEventQuery=\u5B58\u50A8\u4E8B\u4EF6\u67E5\u8BE2
menu.sysApi=\u7CFB\u7EDF\u63A5\u53E3
menu.tiles3d=\u4E09\u7EF4\u5B9E\u666F
menu.userQuery=\u7528\u6237\u67E5\u8BE2
menu.userAdd=\u7528\u6237\u65B0\u589E
menu.userEdit=\u7528\u6237\u4FEE\u6539
menu.userRemove=\u7528\u6237\u5220\u9664
menu.userExport=\u7528\u6237\u5BFC\u51FA
menu.userImport=\u7528\u6237\u5BFC\u5165
menu.alarmPermission=\u62A5\u8B66\u6743\u9650
menu.appPermission=app\u6743\u9650
menu.noGuideZone=noGuideZone
menu.userResetPwd=\u91CD\u7F6E\u5BC6\u7801
menu.roleQuery=\u89D2\u8272\u67E5\u8BE2
menu.roleAdd=\u89D2\u8272\u65B0\u589E
menu.roleEdit=\u89D2\u8272\u4FEE\u6539
menu.roleRemove=\u89D2\u8272\u5220\u9664
menu.roleExport=\u89D2\u8272\u5BFC\u51FA
menu.menuQuery=\u83DC\u5355\u67E5\u8BE2
menu.menuAdd=\u83DC\u5355\u65B0\u589E
menu.menuEdit=\u83DC\u5355\u4FEE\u6539
menu.menuRemove=\u83DC\u5355\u5220\u9664
menu.deptQuery=\u90E8\u95E8\u67E5\u8BE2
menu.deptAdd=\u90E8\u95E8\u65B0\u589E
menu.deptEdit=\u90E8\u95E8\u4FEE\u6539
menu.deptRemove=\u90E8\u95E8\u5220\u9664
menu.postQuery=\u5C97\u4F4D\u67E5\u8BE2
menu.postAdd=\u5C97\u4F4D\u65B0\u589E
menu.postEdit=\u5C97\u4F4D\u4FEE\u6539
menu.postRemove=\u5C97\u4F4D\u5220\u9664
menu.postExport=\u5C97\u4F4D\u5BFC\u51FA
menu.dictQuery=\u5B57\u5178\u67E5\u8BE2
menu.dictAdd=\u5B57\u5178\u65B0\u589E
menu.dictEdit=\u5B57\u5178\u4FEE\u6539
menu.dictRemove=\u5B57\u5178\u5220\u9664
menu.dictExport=\u5B57\u5178\u5BFC\u51FA
menu.configQuery=\u53C2\u6570\u67E5\u8BE2
menu.configAdd=\u53C2\u6570\u65B0\u589E
menu.configEdit=\u53C2\u6570\u4FEE\u6539
menu.configRemove=\u53C2\u6570\u5220\u9664
menu.configExport=\u53C2\u6570\u5BFC\u51FA
menu.accountUnlock=\u8D26\u6237\u89E3\u9501
menu.batchForceOut=\u6279\u91CF\u5F3A\u9000
menu.singleForceOut=\u5355\u6761\u5F3A\u9000
menu.preview=\u9884\u89C8\u4EE3\u7801
menu.generator=\u751F\u6210\u4EE3\u7801
menu.query=\u67E5\u8BE2
menu.add=\u65B0\u589E
menu.edit=\u4FEE\u6539
menu.remove=\u5220\u9664
menu.export=\u5BFC\u51FA
menu.import=\u5BFC\u5165
##\u5B57\u5178\u7C7B\u578B
dic.type.sys.user.sex=\u7528\u6237\u6027\u522B
dic.type.sys.show.hide=\u83DC\u5355\u72B6\u6001
dic.type.sys.normal.disable=\u7CFB\u7EDF\u5F00\u5173
dic.type.sys.job.status=\u4EFB\u52A1\u72B6\u6001
dic.type.sys.job.group=\u4EFB\u52A1\u5206\u7EC4
dic.type.sys.yes.no=\u7CFB\u7EDF\u662F\u5426
dic.type.sys.notice.type=\u901A\u77E5\u7C7B\u578B
dic.type.sys.notice.status=\u901A\u77E5\u72B6\u6001
dic.type.sys.oper.type=\u64CD\u4F5C\u7C7B\u578B
dic.type.sys.common.status=\u7CFB\u7EDF\u72B6\u6001
dic.type.camera.type=\u5149\u7535\u7C7B\u578B
dic.type.well.type=\u6CB9\u4E95\u7C7B\u578B
dic.type.work.state=\u8FD0\u884C\u72B6\u6001
dic.type.factory=\u5382\u5546
dic.type.tube.type=\u7BA1\u7EBF\u7C7B\u578B
dic.type.radar.type=\u96F7\u8FBE\u7C7B\u578B
dic.type.equip.type=\u5916\u8054\u8BBE\u5907\u7C7B\u578B
dic.type.cameras.priority=\u76F8\u673A\u64CD\u63A7\u4F18\u5148\u7EA7
dic.type.inspect.mode=\u5DE1\u68C0\u6A21\u5F0F
dic.type.on.off=\u5F00\u5173
dic.type.repeat.period=\u91CD\u590D\u5468\u671F
dic.type.alarm.type=\u62A5\u8B66\u7C7B\u578B
dic.type.storage.operate.type=\u5B58\u50A8\u4E8B\u4EF6\u7C7B\u578B
dic.type.wall.type=\u7535\u5B50\u56F4\u680F\u7C7B\u578B
dic.type.code.enabled=\u6D41\u5A92\u4F53\u8F6C\u7801\u5F00\u5173
dic.type.change.code.mode=\u6D41\u5A92\u4F53\u89E3\u7801\u6A21\u5F0F
##\u5B57\u5178\u6570\u636E
dic.data.sys.user.sex.male=\u7537
dic.data.sys.user.sex.female=\u5973
dic.data.sys.user.sex.other=\u672A\u77E5
dic.data.sys.show=\u663E\u793A
dic.data.sys.hide=\u9690\u85CF
dic.data.sys.normal=\u6B63\u5E38
dic.data.sys.disable=\u505C\u7528
dic.data.sys.job.status.normal=\u6B63\u5E38
dic.data.sys.job.status.pause=\u6682\u505C
dic.data.sys.job.group.default=\u9ED8\u8BA4
dic.data.sys.job.group.system=\u7CFB\u7EDF
dic.data.sys.yes=\u662F
dic.data.sys.no=\u5426
dic.data.sys.notice=\u7CFB\u7EDF\u901A\u77E5
dic.data.sys.announcement=\u516C\u544A
dic.data.sys.notice.status.normal=\u6B63\u5E38
dic.data.sys.notice.status.close=\u5173\u95ED
dic.data.sys.oper.type.other=\u5176\u4ED6
dic.data.sys.oper.type.add=\u65B0\u589E
dic.data.sys.oper.type.edit=\u4FEE\u6539
dic.data.sys.oper.type.remove=\u5220\u9664
dic.data.sys.oper.type.authorization=\u6388\u6743
dic.data.sys.oper.type.export=\u5BFC\u51FA
dic.data.sys.oper.type.import=\u5BFC\u5165
dic.data.sys.oper.type.force.out=\u5F3A\u9000
dic.data.sys.oper.type.gen=\u751F\u6210\u4EE3\u7801
dic.data.sys.oper.type.clear=\u6E05\u7A7A\u6570\u636E
dic.data.sys.common.status.success=\u6210\u529F
dic.data.sys.common.status.fail=\u6210\u529F
dic.data.camera.type.samll.camera=\u5C0F\u5149\u7535
dic.data.camera.type.big.camera=\u5927\u5149\u7535
dic.data.camera.type.nvr=\u7EC8\u7AEF
dic.data.well.type.pump=\u62BD\u6CB9\u673A
dic.data.well.type.ketou=\u78D5\u5934\u673A
dic.data.work.state.normal=\u6B63\u5E38
dic.data.work.state.exception=\u5F02\u5E38
dic.data.equip.type.alarm=\u62A5\u8B66\u4E3B\u673A
dic.data.equip.type.GPS=GPS
dic.data.equip.type.gycgq=\u5DE5\u4E1A\u4F20\u611F\u5668
dic.data.equip.type.person.position=\u4EBA\u5458\u5B9A\u4F4D
dic.data.equip.type.personandcar=\u4EBA\u8F66\u8BC6\u522B
dic.data.equip.type.access=\u95E8\u7981\u4E3B\u673A
dic.data.equip.type.jcj=\u95F4\u62BD\u4E95\u7BA1\u7406
dic.data.equip.type.tube.alarm=\u7BA1\u7EBF\u62A5\u8B66
dic.data.equip.type.uav.platform=\u65E0\u4EBA\u673A\u4E91\u5E73\u53F0
dic.data.tube.type.oil.pipe=\u6CB9\u7BA1
dic.data.tube.type.water.pipe=\u6C34\u7BA1
dic.data.tube.type.gas.pipe=\u71C3\u6C14\u7BA1
dic.data.radar.type.h=H
dic.data.radar.type.f=F
dic.data.alarm.type=\u9884\u8B66\u544A\u8B66
dic.data.cameras.priority.user1=\u7528\u6237\u4E00\u7EA7
dic.data.cameras.priority.user2=\u7528\u6237\u4E8C\u7EA7
dic.data.cameras.priority.user3=\u7528\u6237\u4E09\u7EA7
dic.data.cameras.priority.sys.app.onekey=sys_app_onekey
dic.data.cameras.priority.sys.access.control=sys_access_control
dic.data.cameras.priority.sys.external=sys_external
dic.data.cameras.priority.sys.radar.pump=sys_radar_pump
dic.data.cameras.priority.sys.tube.leak=sys_tube_leak
dic.data.cameras.priority.sys.radar.move=sys_radar_move
dic.data.cameras.priority.sys.radar.fire=sys_radar_fire
dic.data.cameras.priority.sys.radar.force=sys_radar_force
dic.data.cameras.priority.sys.manual.inspection=sys_manual_inspection
dic.data.cameras.priority.sys.auto.inspection=sys_auto_inspection
dic.data.inspect.mode.auto=\u81EA\u52A8
dic.data.inspect.mode.manual=\u624B\u52A8
dic.data.on=\u5F00
dic.data.off=\u5173
dic.data.repeat.period.week=\u5468
dic.data.repeat.period.day=\u65E5
dic.data.repeat.period.hour=\u5C0F\u65F6
dic.data.repeat.period.min=\u5206\u949F
dic.data.alarm.type.elec.steal=\u76D7\u7535\u62A5\u8B66
dic.data.alarm.type.radar=\u96F7\u8FBE\u62A5\u8B66
dic.data.alarm.type.camera=\u901A\u7528\u5149\u7535
dic.data.alarm.type.radar.fire=\u9632\u706B\u62A5\u8B66
dic.data.alarm.type.external=\u5916\u8054\u62A5\u8B66
dic.data.alarm.type.access=\u95E8\u7981\u62A5\u8B66
dic.data.alarm.type.tube=\u7BA1\u7EBF\u6CC4\u6F0F
dic.data.alarm.type.elec.fencee=\u7535\u5B50\u56F4\u680F
dic.data.storage.operate.type.add=\u65B0\u589E
dic.data.storage.operate.type.remove=\u5220\u9664
dic.data.factory.hikvision=\u6D77\u5EB7
dic.data.factory.dahua=\u5927\u534E
dic.data.wall.type.no.entry=\u7981\u5165
dic.data.wall.type.no.exit=\u7981\u51FA
dic.data.code.enabled.on=\u8F6C\u7801
dic.data.code.enabled.off=\u4E0D\u8F6C\u7801
dic.data.change.code.mode.gpu=GPU\u786C\u89E3\u7801
dic.data.change.code.mode.cpu=CPU\u8F6F\u89E3\u7801
##\u7CFB\u7EDF\u914D\u7F6E
config.sys.index.skinName=\u4E3B\u6846\u67B6\u9875-\u9ED8\u8BA4\u76AE\u80A4\u6837\u5F0F\u540D\u79F0
config.sys.user.initPassword=\u7528\u6237\u7BA1\u7406-\u8D26\u53F7\u521D\u59CB\u5BC6\u7801
config.sys.index.sideTheme=\u4E3B\u6846\u67B6\u9875-\u4FA7\u8FB9\u680F\u4E3B\u9898
config.sys.account.registerUser=\u8D26\u53F7\u81EA\u52A9-\u662F\u5426\u5F00\u542F\u7528\u6237\u6CE8\u518C\u529F\u80FD
config.sys.account.captchaEnabled=\u8D26\u53F7\u81EA\u52A9-\u9A8C\u8BC1\u7801\u5F00\u5173
config.uav=\u65E0\u4EBA\u673A\u5730\u5740
config.HIKSuperBrain=\u6D77\u5EB7\u8D85\u8111\u5730\u5740
config.origin=\u521D\u59CB\u4F4D\u7F6E
config.CompanyMURL=\u516C\u53F8M\u670D\u52A1\u5730\u5740
config.serverCode=\u670D\u52A1\u4EE3\u7801
config.PneumaticLockIPAndPort=\u6C14\u52A8\u9501\u5730\u5740\u548C\u7AEF\u53E3
config.shVideo=\u5174\u8DA3\u70B9\u89C6\u9891\u6807\u7B7E\u63A5\u53E3\u5730\u5740
config.appAlarmPointsDistance=app\u4E0E\u5174\u8DA3\u70B9\u8DDD\u79BB
config.dblocal=\u6570\u636E\u5E93\u6240\u5C5E
config.31distance=\u4E09\u4E00\u5B9A\u8DDD
config.31time=\u4E09\u4E00\u5B9A\u65F6
config.radarUrl=radar\u670D\u52A1\u5668
config.uavOriginPosition=\u65E0\u4EBA\u673A\u9ED8\u8BA4\u4F4D\u7F6E
config.stealElecUrl=\u9632\u76D7\u7535\u6570\u636E\u63A5\u53E3
config.ws=websocket\u5730\u5740
config.RongCloudAppSecret=\u878D\u4E91APP\u79D8\u94A5
config.minioOut=minio\u5916\u7F51
config.minioIn=minio\u5185\u7F51
config.webrtcIP=webrtc\u5730\u5740
config.indexIp=\u6A21\u578B\u5730\u5740\u4EE3\u7406ip
config.gis=GIS\u6570\u636E\u7F51\u7EDC\u670D\u52A1\u5730\u5740
config.eqHealthPassword=\u8BBE\u5907\u5065\u5EB7\u5BC6\u7801
config.eqHealthAccount=\u8BBE\u5907\u5065\u5EB7\u8D26\u53F7
config.eqHealthUrl=\u8BBE\u5907\u5065\u5EB7\u65B0\u63A5\u53E3\u5730\u5740
config.health=\u8BBE\u5907\u5065\u5EB7\u5730\u5740
config.refreshTime=\u62A5\u8B66\u5237\u65B0\u65F6\u95F4
config.dayNightTime=\u5149\u7535\u65E5\u591C\u5207\u6362\u65F6\u95F4
config.rongyun=\u878D\u4E91IP
config.RongCloudAppKey=\u878D\u4E91APP\u952E
config.syCarPT=\u4E09\u4E00\u5E73\u53F0ip
ruoyi-admin/src/main/resources/i18n/messages_en_US.properties
@@ -74,60 +74,194 @@
menu.elecFence=elecFence
menu.tube=tube
menu.policeStation=policeStation
menu.peopleAndCar=peopleAndCar
menu.inspect=inspect
menu.inspectTask=inspectTask
menu.inspectRecord=inspectRecord
menu.vtdu=vtdu
menu.vtduConfig=vtduConfig
menu.vtduPullStream=pullStream
menu.vtduPushStream=pushStream
menu.vtduPullStream=vtduPullStream
menu.vtduPushStream=vtduPushStream
menu.test=test
menu.sdkTest=sdkTest
menu.vtduTest=vtduTest
menu.mqQueue=mqQueue
menu.minio=minio
menu.minioEvent=minioEvent
menu.sysApi=sysApi
menu.tiles3d=tiles3d
menu.userQuery=userQuery
menu.userAdd=userAdd
menu.userEdit=userEdit
menu.userRemove=userRemove
menu.userExport=userExport
menu.userImport=userImport
menu.alarmPermission=alarmPermission
menu.appPermission=appPermission
menu.noGuideZone=noGuideZone
menu.userResetPwd=userResetPwd
menu.roleQuery=roleQuery
menu.roleAdd=roleAdd
menu.roleEdit=roleEdit
menu.roleRemove=roleRemove
menu.roleExport=roleExport
menu.menuQuery=menuQuery
menu.menuAdd=menuAdd
menu.menuEdit=menuEdit
menu.menuRemove=menuRemove
menu.deptQuery=deptQuery
menu.deptAdd=deptAdd
menu.deptEdit=deptEdit
menu.deptRemove=deptRemove
menu.postQuery=postQuery
menu.postAdd=postAdd
menu.postEdit=postEdit
menu.postRemove=postRemove
menu.postExport=postExport
menu.dictQuery=dictQuery
menu.dictAdd=dictAdd
menu.dictEdit=dictEdit
menu.dictRemove=dictRemove
menu.dictExport=dictExport
menu.configQuery=configQuery
menu.configAdd=configAdd
menu.configEdit=configEdit
menu.configRemove=configRemove
menu.configExport=configExport
menu.accountUnlock=accountUnlock
menu.batchForceOut=batchForceOut
menu.singleForceOut=singleForceOut
menu.codePreview=preview
menu.codeGen=generator
menu.query=query
menu.add=add
menu.edit=edit
menu.remove=remove
menu.export=export
menu.import=import
##\u5B57\u5178\u7C7B\u578B
dic.type.sys.user.sex=userSex
dic.type.sys.show.hide=menuStatus
dic.type.sys.normal.disable=systemSwitches
dic.type.sys.job.status=jobStatus
dic.type.sys.job.group=jobGroup
dic.type.sys.yes.no=systemY/N
dic.type.sys.notice.type=noticeType
dic.type.sys.notice.status=noticeStatus
dic.type.sys.oper.type=operType
dic.type.sys.common.status=commonStatus
dic.type.camera.type=cameraType
dic.type.well.type=wellType
dic.type.work.state=workState
dic.type.factory=factory
dic.type.tube.type=tubeType
dic.type.radar.type=radarType
dic.type.equip.type=equipType
dic.type.cameras.priority=camerasPriority
dic.type.inspect.mode=inspectMode
dic.type.on.off=switch
dic.type.repeat.period=repeatPeriod
dic.type.alarm.type=alarmType
dic.type.storage.operate.type=storageOperateType
dic.type.wall.type=wallType
dic.type.code.enabled=codeSwitch
dic.type.change.code.mode=codeMode
##\u5B57\u5178
dic.data.sys.user.sex.male=male
dic.data.sys.user.sex.female=female
dic.data.sys.user.sex.other=other
dic.data.sys.show=show
dic.data.sys.hide=hide
dic.data.sys.normal=normal
dic.data.sys.disable=disabled
dic.data.sys.job.status.normal=normal
dic.data.sys.job.status.pause=pause
dic.data.sys.job.group.default=default
dic.data.sys.job.group.system=system
dic.data.sys.yes=yes
dic.data.sys.no=no
dic.data.sys.notice=notice
dic.data.sys.announcement=announcement
dic.data.sys.notice.status.normal=normal
dic.data.sys.notice.status.close=close
dic.data.sys.oper.type.other=other
dic.data.sys.oper.type.add=add
dic.data.sys.oper.type.edit=edit
dic.data.sys.oper.type.remove=remove
dic.data.sys.oper.type.authorization=authorization
dic.data.sys.oper.type.export=export
dic.data.sys.oper.type.import=import
dic.data.sys.oper.type.force.out=forceLogout
dic.data.sys.oper.type.gen=genCode
dic.data.sys.oper.type.clear=clear
dic.data.sys.common.status.success=success
dic.data.sys.common.status.fail=fail
dic.data.camera.type.samll.camera=samll
dic.data.camera.type.big.camera=big
dic.data.camera.type.nvr=nvr
dic.data.well.type.pump=pump
dic.data.well.type.ketou=ketou
dic.data.work.state.normal=normal
dic.data.work.state.exception=exception
dic.data.equip.type.alarm=alarmHost
dic.data.equip.type.GPS=GPS
dic.data.equip.type.gycgq=gycgq
dic.data.equip.type.person.position=personPosition
dic.data.equip.type.personandcar=personandcar
dic.data.equip.type.access=accessHost
dic.data.equip.type.jcj=jcj
dic.data.equip.type.tube.alarm=tubeAlarm
dic.data.equip.type.uav.platform=uavPlatform
dic.data.tube.type.oil.pipe=oilPipe
dic.data.tube.type.water.pipe=waterPipe
dic.data.tube.type.gas.pipe=gasPipe
dic.data.radar.type.h=H
dic.data.radar.type.f=F
dic.data.alarm.type=Warning
dic.data.cameras.priority.user1=userLevel1
dic.data.cameras.priority.user2=userLevel2
dic.data.cameras.priority.user3=userLevel3
dic.data.cameras.priority.user4=userLevel4
dic.data.cameras.priority.sys.app.onekey=sys_app_onekey
dic.data.cameras.priority.sys.access.control=sys_access_control
dic.data.cameras.priority.sys.external=sys_external
dic.data.cameras.priority.sys.radar.pump=sys_radar_pump
dic.data.cameras.priority.sys.tube.leak=sys_tube_leak
dic.data.cameras.priority.sys.radar.move=sys_radar_move
dic.data.cameras.priority.sys.radar.fire=sys_radar_fire
dic.data.cameras.priority.sys.radar.force=sys_radar_force
dic.data.cameras.priority.sys.manual.inspection=sys_manual_inspection
dic.data.cameras.priority.sys.auto.inspection=sys_auto_inspection
dic.data.inspect.mode.auto=auto
dic.data.inspect.mode.manual=manual
dic.data.on=on
dic.data.off=off
dic.data.repeat.period.week=week
dic.data.repeat.period.day=day
dic.data.repeat.period.hour=hour
dic.data.repeat.period.min=min
dic.data.alarm.type.elec.steal=elecSteal
dic.data.alarm.type.radar=radarAlarm
dic.data.alarm.type.camera=camera
dic.data.alarm.type.radar.fire=fireAlarm
dic.data.alarm.type.external=externalAlarm
dic.data.alarm.type.access=accessAlarm
dic.data.alarm.type.tube=tubeLeak
dic.data.alarm.type.elec.fencee=elecFencee
dic.data.storage.operate.type.add=add
dic.data.storage.operate.type.remove=remove
dic.data.factory.hikvision=hikvision
dic.data.factory.dahua=dahua
dic.data.wall.type.no.entry=noEntry
dic.data.wall.type.no.exit=noExit
dic.data.code.enabled.on=transcoding
dic.data.code.enabled.off=noTranscoding
dic.data.change.code.mode.gpu=GPUHardwareDecoding
dic.data.change.code.mode.cpu=CPUSoftwareDecoding
##\u7CFB\u7EDF\u914D\u7F6E
config.sys.index.skinName=skinName
config.sys.user.initPassword=initPassword
config.sys.index.sideTheme=sideTheme
config.sys.account.registerUser=registerUser
config.sys.account.captchaEnabled=captchaEnabled
config.uav=uav
config.HIKSuperBrain=HIKSuperBrain
config.origin=origin
config.CompanyMURL=CompanyMURL
config.serverCode=serverCode
config.PneumaticLockIPAndPort=PneumaticLockIPAndPort
config.shVideo=shVideo
config.appAlarmPointsDistance=appAlarmPointsDistance
config.dblocal=dblocal
config.31distance=31distance
config.31time=31time
config.radarUrl=radarUrl
config.uavOriginPosition=uavOriginPosition
config.stealElecUrl=stealElecUrl
config.ws=ws
config.RongCloudAppSecret=RongCloudAppSecret
config.minioOut=minioOut
config.minioIn=minioIn
config.webrtcIP=webrtcIP
config.indexIp=indexIp
config.gis=gis
config.eqHealthPassword=eqHealthPassword
config.eqHealthAccount=eqHealthAccount
config.eqHealthUrl=eqHealthUrl
config.health=health
config.refreshTime=refreshTime
config.dayNightTime=dayNightTime
config.rongyun=rongyun
config.RongCloudAppKey=RongCloudAppKey
config.syCarPT=syCarPT
ruoyi-admin/src/main/resources/i18n/messages_zh_CN.properties
@@ -70,66 +70,195 @@
menu.external=\u5916\u8054\u8BBE\u5907
menu.videoFusion=\u89C6\u9891\u878D\u5408
menu.tower=\u5854\u7BA1\u7406
menu.alarmpoints=\u5174\u8DA3\u70B9\u7BA1\u7406
menu.elecFence=\u7535\u5B50\u56F4\u680F
menu.tube=\u7BA1\u7EBF\u7BA1\u7406
menu.policeStation=\u8B66\u52A1\u5BA4\u7BA1\u7406
menu.peopleAndCar=\u4EBA\u5458\u53CA\u8F66\u8F86\u7BA1\u7406
menu.inspect=\u89C6\u9891\u5DE1\u68C0
menu.inspectTask=\u89C6\u9891\u5DE1\u68C0\u4EFB\u52A1
menu.inspectRecord=\u89C6\u9891\u5DE1\u68C0\u8BB0\u5F55
menu.vtdu=\u6D41\u5A92\u4F53\u7BA1\u7406
menu.vtduConfig=\u914D\u7F6E
menu.vtduPullStream=\u62C9\u6D41
menu.vtduPushStream=\u63A8\u6D41
menu.test=\u6D4B\u8BD5\u9875
menu.sdkTest=sdk\u6D4B\u8BD5\u9875
menu.vtduTest=\u6D41\u5A92\u4F53\u6D4B\u8BD5\u9875
menu.mqQueue=mq\u961F\u5217
menu.minio=minio\u5B58\u50A8
menu.minioEvent=\u5B58\u50A8\u4E8B\u4EF6
menu.sysApi=\u7CFB\u7EDF\u63A5\u53E3
menu.tiles3d=\u4E09\u7EF4\u5B9E\u666F
menu.userQuery=\u7528\u6237\u67E5\u8BE2
menu.userAdd=\u7528\u6237\u65B0\u589E
menu.userEdit=\u7528\u6237\u4FEE\u6539
menu.userRemove=\u7528\u6237\u5220\u9664
menu.userExport=\u7528\u6237\u5BFC\u51FA
menu.userImport=\u7528\u6237\u5BFC\u5165
menu.alarmPermission=\u62A5\u8B66\u6743\u9650\u83DC\u5355
menu.appPermission=app\u6743\u9650
menu.noGuideZone=noGuideZone
menu.userResetPwd=\u91CD\u7F6E\u5BC6\u7801
menu.roleQuery=\u89D2\u8272\u67E5\u8BE2
menu.roleAdd=\u89D2\u8272\u65B0\u589E
menu.roleEdit=\u89D2\u8272\u4FEE\u6539
menu.roleRemove=\u89D2\u8272\u5220\u9664
menu.roleExport=\u89D2\u8272\u5BFC\u51FA
menu.menuQuery=\u83DC\u5355\u67E5\u8BE2
menu.menuAdd=\u83DC\u5355\u65B0\u589E
menu.menuEdit=\u83DC\u5355\u4FEE\u6539
menu.menuRemove=\u83DC\u5355\u5220\u9664
menu.deptQuery=\u90E8\u95E8\u67E5\u8BE2
menu.deptAdd=\u90E8\u95E8\u65B0\u589E
menu.deptEdit=\u90E8\u95E8\u4FEE\u6539
menu.deptRemove=\u90E8\u95E8\u5220\u9664
menu.postQuery=\u5C97\u4F4D\u67E5\u8BE2
menu.postAdd=\u5C97\u4F4D\u65B0\u589E
menu.postEdit=\u5C97\u4F4D\u4FEE\u6539
menu.postRemove=\u5C97\u4F4D\u5220\u9664
menu.postExport=\u5C97\u4F4D\u5BFC\u51FA
menu.dictQuery=\u5B57\u5178\u67E5\u8BE2
menu.dictAdd=\u5B57\u5178\u65B0\u589E
menu.dictEdit=\u5B57\u5178\u4FEE\u6539
menu.dictRemove=\u5B57\u5178\u5220\u9664
menu.dictExport=\u5B57\u5178\u5BFC\u51FA
menu.configQuery=\u53C2\u6570\u67E5\u8BE2
menu.configAdd=\u53C2\u6570\u65B0\u589E
menu.configEdit=\u53C2\u6570\u4FEE\u6539
menu.configRemove=\u53C2\u6570\u5220\u9664
menu.configExport=\u53C2\u6570\u5BFC\u51FA
menu.accountUnlock=\u8D26\u6237\u89E3\u9501
menu.batchForceOut=\u6279\u91CF\u5F3A\u9000
menu.singleForceOut=\u5355\u6761\u5F3A\u9000
menu.preview=\u9884\u89C8\u4EE3\u7801
menu.generator=\u751F\u6210\u4EE3\u7801
menu.query=\u67E5\u8BE2
menu.add=\u65B0\u589E
menu.edit=\u4FEE\u6539
menu.remove=\u5220\u9664
menu.export=\u5BFC\u51FA
menu.import=\u5BFC\u5165
##\u5B57\u5178\u7C7B\u578B
dic.type.sys.user.sex=\u7528\u6237\u6027\u522B
dic.type.sys.show.hide=\u83DC\u5355\u72B6\u6001
dic.type.sys.normal.disable=\u7CFB\u7EDF\u5F00\u5173
dic.type.sys.job.status=\u4EFB\u52A1\u72B6\u6001
dic.type.sys.job.group=\u4EFB\u52A1\u5206\u7EC4
dic.type.sys.yes.no=\u7CFB\u7EDF\u662F\u5426
dic.type.sys.notice.type=\u901A\u77E5\u7C7B\u578B
dic.type.sys.notice.status=\u901A\u77E5\u72B6\u6001
dic.type.sys.oper.type=\u64CD\u4F5C\u7C7B\u578B
dic.type.sys.common.status=\u7CFB\u7EDF\u72B6\u6001
dic.type.camera.type=\u5149\u7535\u7C7B\u578B
dic.type.well.type=\u6CB9\u4E95\u7C7B\u578B
dic.type.work.state=\u8FD0\u884C\u72B6\u6001
dic.type.factory=\u5382\u5546
dic.type.tube.type=\u7BA1\u7EBF\u7C7B\u578B
dic.type.radar.type=\u96F7\u8FBE\u7C7B\u578B
dic.type.equip.type=\u5916\u8054\u8BBE\u5907\u7C7B\u578B
dic.type.cameras.priority=\u76F8\u673A\u64CD\u63A7\u4F18\u5148\u7EA7
dic.type.inspect.mode=\u5DE1\u68C0\u6A21\u5F0F
dic.type.on.off=\u5F00\u5173
dic.type.repeat.period=\u91CD\u590D\u5468\u671F
dic.type.alarm.type=\u62A5\u8B66\u7C7B\u578B
dic.type.storage.operate.type=\u5B58\u50A8\u4E8B\u4EF6\u7C7B\u578B
dic.type.wall.type=\u7535\u5B50\u56F4\u680F\u7C7B\u578B
dic.type.code.enabled=\u6D41\u5A92\u4F53\u8F6C\u7801\u5F00\u5173
dic.type.change.code.mode=\u6D41\u5A92\u4F53\u89E3\u7801\u6A21\u5F0F
##\u5B57\u5178
dic.data.sys.user.sex.male=\u7537
dic.data.sys.user.sex.female=\u5973
dic.data.sys.user.sex.other=\u672A\u77E5
dic.data.sys.show=\u663E\u793A
dic.data.sys.hide=\u9690\u85CF
dic.data.sys.normal=\u6B63\u5E38
dic.data.sys.disable=\u505C\u7528
dic.data.sys.job.status.normal=\u6B63\u5E38
dic.data.sys.job.status.pause=\u6682\u505C
dic.data.sys.job.group.default=\u9ED8\u8BA4
dic.data.sys.job.group.system=\u7CFB\u7EDF
dic.data.sys.yes=\u662F
dic.data.sys.no=\u5426
dic.data.sys.notice=\u7CFB\u7EDF\u901A\u77E5
dic.data.sys.announcement=\u516C\u544A
dic.data.sys.notice.status.normal=\u6B63\u5E38
dic.data.sys.notice.status.close=\u5173\u95ED
dic.data.sys.oper.type.other=\u5176\u4ED6
dic.data.sys.oper.type.add=\u65B0\u589E
dic.data.sys.oper.type.edit=\u4FEE\u6539
dic.data.sys.oper.type.remove=\u5220\u9664
dic.data.sys.oper.type.authorization=\u6388\u6743
dic.data.sys.oper.type.export=\u5BFC\u51FA
dic.data.sys.oper.type.import=\u5BFC\u5165
dic.data.sys.oper.type.force.out=\u5F3A\u9000
dic.data.sys.oper.type.gen=\u751F\u6210\u4EE3\u7801
dic.data.sys.oper.type.clear=\u6E05\u7A7A\u6570\u636E
dic.data.sys.common.status.success=\u6210\u529F
dic.data.sys.common.status.fail=\u6210\u529F
dic.data.camera.type.samll.camera=\u5C0F\u5149\u7535
dic.data.camera.type.big.camera=\u5927\u5149\u7535
dic.data.camera.type.nvr=\u7EC8\u7AEF
dic.data.well.type.pump=\u62BD\u6CB9\u673A
dic.data.well.type.ketou=\u78D5\u5934\u673A
dic.data.work.state.normal=\u6B63\u5E38
dic.data.work.state.exception=\u5F02\u5E38
dic.data.equip.type.alarm=\u62A5\u8B66\u4E3B\u673A
dic.data.equip.type.GPS=GPS
dic.data.equip.type.gycgq=\u5DE5\u4E1A\u4F20\u611F\u5668
dic.data.equip.type.person.position=\u4EBA\u5458\u5B9A\u4F4D
dic.data.equip.type.personandcar=\u4EBA\u8F66\u8BC6\u522B
dic.data.equip.type.access=\u95E8\u7981\u4E3B\u673A
dic.data.equip.type.jcj=\u95F4\u62BD\u4E95\u7BA1\u7406
dic.data.equip.type.tube.alarm=\u7BA1\u7EBF\u62A5\u8B66
dic.data.equip.type.uav.platform=\u65E0\u4EBA\u673A\u4E91\u5E73\u53F0
dic.data.tube.type.oil.pipe=\u6CB9\u7BA1
dic.data.tube.type.water.pipe=\u6C34\u7BA1
dic.data.tube.type.gas.pipe=\u71C3\u6C14\u7BA1
dic.data.radar.type.h=H
dic.data.radar.type.f=F
dic.data.alarm.type=\u9884\u8B66\u544A\u8B66
dic.data.cameras.priority.user1=\u7528\u6237\u4E00\u7EA7
dic.data.cameras.priority.user2=\u7528\u6237\u4E8C\u7EA7
dic.data.cameras.priority.user3=\u7528\u6237\u4E09\u7EA7
dic.data.cameras.priority.sys.app.onekey=sys_app_onekey
dic.data.cameras.priority.sys.access.control=sys_access_control
dic.data.cameras.priority.sys.external=sys_external
dic.data.cameras.priority.sys.radar.pump=sys_radar_pump
dic.data.cameras.priority.sys.tube.leak=sys_tube_leak
dic.data.cameras.priority.sys.radar.move=sys_radar_move
dic.data.cameras.priority.sys.radar.fire=sys_radar_fire
dic.data.cameras.priority.sys.radar.force=sys_radar_force
dic.data.cameras.priority.sys.manual.inspection=sys_manual_inspection
dic.data.cameras.priority.sys.auto.inspection=sys_auto_inspection
dic.data.inspect.mode.auto=\u81EA\u52A8
dic.data.inspect.mode.manual=\u624B\u52A8
dic.data.on=\u5F00
dic.data.off=\u5173
dic.data.repeat.period.week=\u5468
dic.data.repeat.period.day=\u65E5
dic.data.repeat.period.hour=\u5C0F\u65F6
dic.data.repeat.period.min=\u5206\u949F
dic.data.alarm.type.elec.steal=\u76D7\u7535\u62A5\u8B66
dic.data.alarm.type.radar=\u96F7\u8FBE\u62A5\u8B66
dic.data.alarm.type.camera=\u901A\u7528\u5149\u7535
dic.data.alarm.type.radar.fire=\u9632\u706B\u62A5\u8B66
dic.data.alarm.type.external=\u5916\u8054\u62A5\u8B66
dic.data.alarm.type.access=\u95E8\u7981\u62A5\u8B66
dic.data.alarm.type.tube=\u7BA1\u7EBF\u6CC4\u6F0F
dic.data.alarm.type.elec.fencee=\u7535\u5B50\u56F4\u680F
dic.data.storage.operate.type.add=\u65B0\u589E
dic.data.storage.operate.type.remove=\u5220\u9664
dic.data.factory.hikvision=\u6D77\u5EB7
dic.data.factory.dahua=\u5927\u534E
dic.data.wall.type.no.entry=\u7981\u5165
dic.data.wall.type.no.exit=\u7981\u51FA
dic.data.code.enabled.on=\u8F6C\u7801
dic.data.code.enabled.off=\u4E0D\u8F6C\u7801
dic.data.change.code.mode.gpu=GPU\u786C\u89E3\u7801
dic.data.change.code.mode.cpu=CPU\u8F6F\u89E3\u7801
##\u7CFB\u7EDF\u914D\u7F6E
config.sys.index.skinName=\u4E3B\u6846\u67B6\u9875-\u9ED8\u8BA4\u76AE\u80A4\u6837\u5F0F\u540D\u79F0
config.sys.user.initPassword=\u7528\u6237\u7BA1\u7406-\u8D26\u53F7\u521D\u59CB\u5BC6\u7801
config.sys.index.sideTheme=\u4E3B\u6846\u67B6\u9875-\u4FA7\u8FB9\u680F\u4E3B\u9898
config.sys.account.registerUser=\u8D26\u53F7\u81EA\u52A9-\u662F\u5426\u5F00\u542F\u7528\u6237\u6CE8\u518C\u529F\u80FD
config.sys.account.captchaEnabled=\u8D26\u53F7\u81EA\u52A9-\u9A8C\u8BC1\u7801\u5F00\u5173
config.uav=\u65E0\u4EBA\u673A\u5730\u5740
config.HIKSuperBrain=\u6D77\u5EB7\u8D85\u8111\u5730\u5740
config.origin=\u521D\u59CB\u4F4D\u7F6E
config.CompanyMURL=\u516C\u53F8M\u670D\u52A1\u5730\u5740
config.serverCode=\u670D\u52A1\u4EE3\u7801
config.PneumaticLockIPAndPort=\u6C14\u52A8\u9501\u5730\u5740\u548C\u7AEF\u53E3
config.shVideo=\u5174\u8DA3\u70B9\u89C6\u9891\u6807\u7B7E\u63A5\u53E3\u5730\u5740
config.appAlarmPointsDistance=app\u4E0E\u5174\u8DA3\u70B9\u8DDD\u79BB
config.dblocal=\u6570\u636E\u5E93\u6240\u5C5E
config.31distance=\u4E09\u4E00\u5B9A\u8DDD
config.31time=\u4E09\u4E00\u5B9A\u65F6
config.radarUrl=radar\u670D\u52A1\u5668
config.uavOriginPosition=\u65E0\u4EBA\u673A\u9ED8\u8BA4\u4F4D\u7F6E
config.stealElecUrl=\u9632\u76D7\u7535\u6570\u636E\u63A5\u53E3
config.ws=websocket\u5730\u5740
config.RongCloudAppSecret=\u878D\u4E91APP\u79D8\u94A5
config.minioOut=minio\u5916\u7F51
config.minioIn=minio\u5185\u7F51
config.webrtcIP=webrtc\u5730\u5740
config.indexIp=\u6A21\u578B\u5730\u5740\u4EE3\u7406ip
config.gis=GIS\u6570\u636E\u7F51\u7EDC\u670D\u52A1\u5730\u5740
config.eqHealthPassword=\u8BBE\u5907\u5065\u5EB7\u5BC6\u7801
config.eqHealthAccount=\u8BBE\u5907\u5065\u5EB7\u8D26\u53F7
config.eqHealthUrl=\u8BBE\u5907\u5065\u5EB7\u65B0\u63A5\u53E3\u5730\u5740
config.health=\u8BBE\u5907\u5065\u5EB7\u5730\u5740
config.refreshTime=\u62A5\u8B66\u5237\u65B0\u65F6\u95F4
config.dayNightTime=\u5149\u7535\u65E5\u591C\u5207\u6362\u65F6\u95F4
config.rongyun=\u878D\u4E91IP
config.RongCloudAppKey=\u878D\u4E91APP\u952E
config.syCarPT=\u4E09\u4E00\u5E73\u53F0ip
ruoyi-common/src/main/java/com/ruoyi/common/core/domain/AjaxResult.java
@@ -2,6 +2,7 @@
import java.util.HashMap;
import com.ruoyi.common.constant.HttpStatus;
import com.ruoyi.common.utils.MessageUtils;
import com.ruoyi.common.utils.StringUtils;
/**
@@ -65,7 +66,8 @@
     */
    public static AjaxResult success()
    {
        return AjaxResult.success("操作成功");
        String message = MessageUtils.message("operation.success");
        return AjaxResult.success(message);
    }
    /**
@@ -74,8 +76,8 @@
     * @return 成功消息
     */
    public static AjaxResult success(Object data)
    {
        return AjaxResult.success("操作成功", data);
    { String message = MessageUtils.message("operation.success");
        return AjaxResult.success(message, data);
    }
    /**
@@ -131,7 +133,8 @@
     */
    public static AjaxResult error()
    {
        return AjaxResult.error("操作失败");
        String message = MessageUtils.message("operation.failed");
        return AjaxResult.error(message);
    }
    /**
ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysConfig.java
@@ -24,7 +24,7 @@
    /** 参数名称 */
    @Excel(name = "参数名称")
    private String configName;
    private String configNameI18n;
    /** 参数键名 */
    @Excel(name = "参数键名")
    private String configKey;
@@ -59,6 +59,14 @@
        this.configName = configName;
    }
    public String getConfigNameI18n() {
        return configNameI18n;
    }
    public void setConfigNameI18n(String configNameI18n) {
        this.configNameI18n = configNameI18n;
    }
    @NotBlank(message = "参数键名长度不能为空")
    @Size(min = 0, max = 100, message = "参数键名长度不能超过100个字符")
    public String getConfigKey()
ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDictData.java
@@ -29,7 +29,8 @@
    /** 字典标签 */
    @Excel(name = "字典标签")
    private String dictLabel;
    /** 字典标签国际化标识 */
    private String dictLabelI18n;
    /** 字典键值 */
    @Excel(name = "字典键值")
    private String dictValue;
@@ -84,6 +85,14 @@
        this.dictLabel = dictLabel;
    }
    public String getDictLabelI18n() {
        return dictLabelI18n;
    }
    public void setDictLabelI18n(String dictLabelI18n) {
        this.dictLabelI18n = dictLabelI18n;
    }
    @NotBlank(message = "字典键值不能为空")
    @Size(min = 0, max = 100, message = "字典键值长度不能超过100个字符")
    public String getDictValue()
ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDictType.java
@@ -25,7 +25,7 @@
    /** 字典名称 */
    @Excel(name = "字典名称")
    private String dictName;
    private String dictNameI18n;
    /** 字典类型 */
    @Excel(name = "字典类型")
    private String dictType;
@@ -56,6 +56,14 @@
        this.dictName = dictName;
    }
    public String getDictNameI18n() {
        return dictNameI18n;
    }
    public void setDictNameI18n(String dictNameI18n) {
        this.dictNameI18n = dictNameI18n;
    }
    @NotBlank(message = "字典类型不能为空")
    @Size(min = 0, max = 100, message = "字典类型类型长度不能超过100个字符")
    @Pattern(regexp = "^[a-z][a-z0-9_]*$", message = "字典类型必须以字母开头,且只能为(小写字母,数字,下滑线)")
ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysMenu.java
@@ -24,8 +24,8 @@
    /** 菜单名称 */
    private String menuName;
    /** 菜单英文名称 */
    private String menuNameEnglish;
    /** 菜单名称I18N */
    private String menuNameI18n;
    /** 父菜单名称 */
    private String parentName;
@@ -86,12 +86,12 @@
        return menuName;
    }
    public String getMenuNameEnglish() {
        return menuNameEnglish;
    public String getMenuNameI18n() {
        return menuNameI18n;
    }
    public void setMenuNameEnglish(String menuNameEnglish) {
        this.menuNameEnglish = menuNameEnglish;
    public void setMenuNameI18n(String menuNameI18n) {
        this.menuNameI18n = menuNameI18n;
    }
    public void setMenuName(String menuName)
ruoyi-common/src/main/java/com/ruoyi/common/filter/MyI18nInterceptor.java
@@ -16,11 +16,15 @@
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        final String key = "language";
        //String language = "en_US";
        String language = "zh_CN";
        //String language = request.getHeader(key);
        // 前端传递的language必须是zh-CN格式的,中间的-必须要完整,不能只传递zh或en
        log.debug("当前语言={}",language);
        Locale locale = new Locale(language.split("_")[0],language.split("_")[1]);
        //String language = "zh_CN";
        String language = request.getHeader(key);
        if (language == null) {
            //String language = "en_US";
            language = "en_US";
        }
        // 前端传递的language必须是zh_CN格式的,中间的_必须要完整,不能只传递zh或en
        log.debug("当前语言={}", language);
        Locale locale = new Locale(language.split("_")[0], language.split("_")[1]);
        // 这样赋值以后,MessageUtils.message方法就不用修改了
        LocaleContextHolder.setLocale(locale);
        return true;
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysConfigServiceImpl.java
@@ -7,6 +7,7 @@
import javax.management.Query;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.ruoyi.common.utils.MessageUtils;
import org.springframework.stereotype.Service;
import com.ruoyi.common.annotation.DataSource;
import com.ruoyi.common.constant.CacheConstants;
@@ -55,7 +56,14 @@
    {
        SysConfig config = new SysConfig();
        config.setConfigId(configId);
        return configMapper.selectConfig(config);
        SysConfig sysConfig = configMapper.selectConfig(config);
        //国际化
        String message = MessageUtils.message("config." + sysConfig.getConfigNameI18n());
        if(StringUtils.isNotEmpty(message))
        {
            sysConfig.setConfigName(message);
        }
        return sysConfig;
    }
    /**
@@ -107,7 +115,15 @@
    @Override
    public List<SysConfig> selectConfigList(SysConfig config)
    {
        return configMapper.selectConfigList(config);
        List<SysConfig> sysConfigs = configMapper.selectConfigList(config);
        //国际化
        sysConfigs.stream().forEach(sysConfig -> {
            String message = MessageUtils.message("config." + sysConfig.getConfigNameI18n());
            if (StringUtils.isNotEmpty(message)) {
                sysConfig.setConfigName(message);
            }
        });
        return sysConfigs;
    }
    /**
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictDataServiceImpl.java
@@ -1,6 +1,9 @@
package com.ruoyi.system.service.impl;
import java.util.List;
import com.ruoyi.common.utils.MessageUtils;
import com.ruoyi.common.utils.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.common.core.domain.entity.SysDictData;
@@ -10,62 +13,71 @@
/**
 * 字典 业务层处理
 *
 *
 * @author ruoyi
 */
@Service
public class SysDictDataServiceImpl implements ISysDictDataService
{
public class SysDictDataServiceImpl implements ISysDictDataService {
    @Autowired
    private SysDictDataMapper dictDataMapper;
    /**
     * 根据条件分页查询字典数据
     *
     *
     * @param dictData 字典数据信息
     * @return 字典数据集合信息
     */
    @Override
    public List<SysDictData> selectDictDataList(SysDictData dictData)
    {
        return dictDataMapper.selectDictDataList(dictData);
    public List<SysDictData> selectDictDataList(SysDictData dictData) {
        List<SysDictData> sysDictDataList = dictDataMapper.selectDictDataList(dictData);
        //国际化
        sysDictDataList.stream().forEach(sysDictData -> {
            String message = MessageUtils.message("dic.data." + sysDictData.getDictLabelI18n());
            if (StringUtils.isNotEmpty(message)) {
                sysDictData.setDictLabel(message);
            }
        });
        return sysDictDataList;
    }
    /**
     * 根据字典类型和字典键值查询字典数据信息
     *
     * @param dictType 字典类型
     *
     * @param dictType  字典类型
     * @param dictValue 字典键值
     * @return 字典标签
     */
    @Override
    public String selectDictLabel(String dictType, String dictValue)
    {
    public String selectDictLabel(String dictType, String dictValue) {
        return dictDataMapper.selectDictLabel(dictType, dictValue);
    }
    /**
     * 根据字典数据ID查询信息
     *
     *
     * @param dictCode 字典数据ID
     * @return 字典数据
     */
    @Override
    public SysDictData selectDictDataById(Long dictCode)
    {
        return dictDataMapper.selectDictDataById(dictCode);
    public SysDictData selectDictDataById(Long dictCode) {
        SysDictData sysDictData = dictDataMapper.selectDictDataById(dictCode);
        //国际化
        String message = MessageUtils.message("dic.data." + sysDictData.getDictLabelI18n());
        if(StringUtils.isNotEmpty(message))
        {
            sysDictData.setDictLabel(message);
        }
        return sysDictData;
    }
    /**
     * 批量删除字典数据信息
     *
     *
     * @param dictCodes 需要删除的字典数据ID
     */
    @Override
    public void deleteDictDataByIds(Long[] dictCodes)
    {
        for (Long dictCode : dictCodes)
        {
    public void deleteDictDataByIds(Long[] dictCodes) {
        for (Long dictCode : dictCodes) {
            SysDictData data = selectDictDataById(dictCode);
            dictDataMapper.deleteDictDataById(dictCode);
            List<SysDictData> dictDatas = dictDataMapper.selectDictDataByType(data.getDictType());
@@ -75,16 +87,14 @@
    /**
     * 新增保存字典数据信息
     *
     *
     * @param data 字典数据信息
     * @return 结果
     */
    @Override
    public int insertDictData(SysDictData data)
    {
    public int insertDictData(SysDictData data) {
        int row = dictDataMapper.insertDictData(data);
        if (row > 0)
        {
        if (row > 0) {
            List<SysDictData> dictDatas = dictDataMapper.selectDictDataByType(data.getDictType());
            DictUtils.setDictCache(data.getDictType(), dictDatas);
        }
@@ -93,16 +103,14 @@
    /**
     * 修改保存字典数据信息
     *
     *
     * @param data 字典数据信息
     * @return 结果
     */
    @Override
    public int updateDictData(SysDictData data)
    {
    public int updateDictData(SysDictData data) {
        int row = dictDataMapper.updateDictData(data);
        if (row > 0)
        {
        if (row > 0) {
            List<SysDictData> dictDatas = dictDataMapper.selectDictDataByType(data.getDictType());
            DictUtils.setDictCache(data.getDictType(), dictDatas);
        }
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictTypeServiceImpl.java
@@ -5,6 +5,8 @@
import java.util.Map;
import java.util.stream.Collectors;
import javax.annotation.PostConstruct;
import com.ruoyi.common.utils.MessageUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -20,12 +22,11 @@
/**
 * 字典 业务层处理
 *
 *
 * @author ruoyi
 */
@Service
public class SysDictTypeServiceImpl implements ISysDictTypeService
{
public class SysDictTypeServiceImpl implements ISysDictTypeService {
    @Autowired
    private SysDictTypeMapper dictTypeMapper;
@@ -36,52 +37,60 @@
     * 项目启动时,初始化字典到缓存
     */
    @PostConstruct
    public void init()
    {
    public void init() {
        loadingDictCache();
    }
    /**
     * 根据条件分页查询字典类型
     *
     *
     * @param dictType 字典类型信息
     * @return 字典类型集合信息
     */
    @Override
    public List<SysDictType> selectDictTypeList(SysDictType dictType)
    {
    public List<SysDictType> selectDictTypeList(SysDictType dictType) {
        List<SysDictType> sysDictTypes = dictTypeMapper.selectDictTypeList(dictType);
        //国际化
        sysDictTypes.stream().forEach(sysDictType -> {
            String message = MessageUtils.message("dic.type." + sysDictType.getDictNameI18n());
            if (StringUtils.isNotEmpty(message)) {
                sysDictType.setDictName(message);
            }
        });
        return sysDictTypes;
    }
    /**
     * 根据所有字典类型
     *
     *
     * @return 字典类型集合信息
     */
    @Override
    public List<SysDictType> selectDictTypeAll()
    {
    public List<SysDictType> selectDictTypeAll() {
        return dictTypeMapper.selectDictTypeAll();
    }
    /**
     * 根据字典类型查询字典数据
     *
     *
     * @param dictType 字典类型
     * @return 字典数据集合信息
     */
    @Override
    public List<SysDictData> selectDictDataByType(String dictType)
    {
    public List<SysDictData> selectDictDataByType(String dictType) {
        List<SysDictData> dictDatas = DictUtils.getDictCache(dictType);
        if (StringUtils.isNotEmpty(dictDatas))
        {
        if (StringUtils.isNotEmpty(dictDatas)) {
            //国际化
            dictDatas.stream().forEach(dictData -> {
                String message = MessageUtils.message("dic.data." + dictData.getDictLabelI18n());
                if (StringUtils.isNotEmpty(message)) {
                    dictData.setDictLabel(message);
                }
            });
            return dictDatas;
        }
        dictDatas = dictDataMapper.selectDictDataByType(dictType);
        if (StringUtils.isNotEmpty(dictDatas))
        {
        if (StringUtils.isNotEmpty(dictDatas)) {
            DictUtils.setDictCache(dictType, dictDatas);
            return dictDatas;
        }
@@ -90,41 +99,43 @@
    /**
     * 根据字典类型ID查询信息
     *
     *
     * @param dictId 字典类型ID
     * @return 字典类型
     */
    @Override
    public SysDictType selectDictTypeById(Long dictId)
    {
        return dictTypeMapper.selectDictTypeById(dictId);
    public SysDictType selectDictTypeById(Long dictId) {
        SysDictType sysDictType = dictTypeMapper.selectDictTypeById(dictId);
        //国际化
        String message = MessageUtils.message("dic.type." + sysDictType.getDictNameI18n());
        if(StringUtils.isNotEmpty(message))
        {
            sysDictType.setDictName(message);
        }
        return sysDictType;
    }
    /**
     * 根据字典类型查询信息
     *
     *
     * @param dictType 字典类型
     * @return 字典类型
     */
    @Override
    public SysDictType selectDictTypeByType(String dictType)
    {
    public SysDictType selectDictTypeByType(String dictType) {
        return dictTypeMapper.selectDictTypeByType(dictType);
    }
    /**
     * 批量删除字典类型信息
     *
     *
     * @param dictIds 需要删除的字典ID
     */
    @Override
    public void deleteDictTypeByIds(Long[] dictIds)
    {
        for (Long dictId : dictIds)
        {
    public void deleteDictTypeByIds(Long[] dictIds) {
        for (Long dictId : dictIds) {
            SysDictType dictType = selectDictTypeById(dictId);
            if (dictDataMapper.countDictDataByType(dictType.getDictType()) > 0)
            {
            if (dictDataMapper.countDictDataByType(dictType.getDictType()) > 0) {
                throw new ServiceException(String.format("%1$s已分配,不能删除", dictType.getDictName()));
            }
            dictTypeMapper.deleteDictTypeById(dictId);
@@ -136,13 +147,11 @@
     * 加载字典缓存数据
     */
    @Override
    public void loadingDictCache()
    {
    public void loadingDictCache() {
        SysDictData dictData = new SysDictData();
        dictData.setStatus("0");
        Map<String, List<SysDictData>> dictDataMap = dictDataMapper.selectDictDataList(dictData).stream().collect(Collectors.groupingBy(SysDictData::getDictType));
        for (Map.Entry<String, List<SysDictData>> entry : dictDataMap.entrySet())
        {
        for (Map.Entry<String, List<SysDictData>> entry : dictDataMap.entrySet()) {
            DictUtils.setDictCache(entry.getKey(), entry.getValue().stream().sorted(Comparator.comparing(SysDictData::getDictSort)).collect(Collectors.toList()));
        }
    }
@@ -151,8 +160,7 @@
     * 清空字典缓存数据
     */
    @Override
    public void clearDictCache()
    {
    public void clearDictCache() {
        DictUtils.clearDictCache();
    }
@@ -160,24 +168,21 @@
     * 重置字典缓存数据
     */
    @Override
    public void resetDictCache()
    {
    public void resetDictCache() {
        clearDictCache();
        loadingDictCache();
    }
    /**
     * 新增保存字典类型信息
     *
     *
     * @param dict 字典类型信息
     * @return 结果
     */
    @Override
    public int insertDictType(SysDictType dict)
    {
    public int insertDictType(SysDictType dict) {
        int row = dictTypeMapper.insertDictType(dict);
        if (row > 0)
        {
        if (row > 0) {
            DictUtils.setDictCache(dict.getDictType(), null);
        }
        return row;
@@ -185,19 +190,17 @@
    /**
     * 修改保存字典类型信息
     *
     *
     * @param dict 字典类型信息
     * @return 结果
     */
    @Override
    @Transactional
    public int updateDictType(SysDictType dict)
    {
    public int updateDictType(SysDictType dict) {
        SysDictType oldDict = dictTypeMapper.selectDictTypeById(dict.getDictId());
        dictDataMapper.updateDictDataType(oldDict.getDictType(), dict.getDictType());
        int row = dictTypeMapper.updateDictType(dict);
        if (row > 0)
        {
        if (row > 0) {
            List<SysDictData> dictDatas = dictDataMapper.selectDictDataByType(dict.getDictType());
            DictUtils.setDictCache(dict.getDictType(), dictDatas);
        }
@@ -206,17 +209,15 @@
    /**
     * 校验字典类型称是否唯一
     *
     *
     * @param dict 字典类型
     * @return 结果
     */
    @Override
    public String checkDictTypeUnique(SysDictType dict)
    {
    public String checkDictTypeUnique(SysDictType dict) {
        Long dictId = StringUtils.isNull(dict.getDictId()) ? -1L : dict.getDictId();
        SysDictType dictType = dictTypeMapper.checkDictTypeUnique(dict.getDictType());
        if (StringUtils.isNotNull(dictType) && dictType.getDictId().longValue() != dictId.longValue())
        {
        if (StringUtils.isNotNull(dictType) && dictType.getDictId().longValue() != dictId.longValue()) {
            return UserConstants.NOT_UNIQUE;
        }
        return UserConstants.UNIQUE;
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java
@@ -29,12 +29,11 @@
/**
 * 菜单 业务层处理
 *
 *
 * @author ruoyi
 */
@Service
public class SysMenuServiceImpl implements ISysMenuService
{
public class SysMenuServiceImpl implements ISysMenuService {
    public static final String PREMISSION_STRING = "perms[\"{0}\"]";
    @Autowired
@@ -48,54 +47,53 @@
    /**
     * 根据用户查询系统菜单列表
     *
     *
     * @param userId 用户ID
     * @return 菜单列表
     */
    @Override
    public List<SysMenu> selectMenuList(String userId)
    {
    public List<SysMenu> selectMenuList(String userId) {
        return selectMenuList(new SysMenu(), userId);
    }
    /**
     * 查询系统菜单列表
     *
     *
     * @param menu 菜单信息
     * @return 菜单列表
     */
    @Override
    public List<SysMenu> selectMenuList(SysMenu menu, String userId)
    {
    public List<SysMenu> selectMenuList(SysMenu menu, String userId) {
        List<SysMenu> menuList = null;
        // 管理员显示所有菜单信息
        if (SysUser.isAdmin(userId))
        {
        if (SysUser.isAdmin(userId)) {
            menuList = menuMapper.selectMenuList(menu);
        }
        else
        {
        } else {
            menu.getParams().put("userId", userId);
            menuList = menuMapper.selectMenuListByUserId(menu);
        }
        //国际化
        menuList.stream().forEach(sysMenu -> {
            String message = MessageUtils.message("menu." + sysMenu.getMenuNameI18n());
            if (StringUtils.isNotEmpty(message)) {
                sysMenu.setMenuName(message);
            }
        });
        return menuList;
    }
    /**
     * 根据用户ID查询权限
     *
     *
     * @param userId 用户ID
     * @return 权限列表
     */
    @Override
    public Set<String> selectMenuPermsByUserId(String userId)
    {
    public Set<String> selectMenuPermsByUserId(String userId) {
        List<String> perms = menuMapper.selectMenuPermsByUserId(userId);
        Set<String> permsSet = new HashSet<>();
        for (String perm : perms)
        {
            if (StringUtils.isNotEmpty(perm))
            {
        for (String perm : perms) {
            if (StringUtils.isNotEmpty(perm)) {
                permsSet.addAll(Arrays.asList(perm.trim().split(",")));
            }
        }
@@ -104,19 +102,16 @@
    /**
     * 根据角色ID查询权限
     *
     *
     * @param roleId 角色ID
     * @return 权限列表
     */
    @Override
    public Set<String> selectMenuPermsByRoleId(Long roleId)
    {
    public Set<String> selectMenuPermsByRoleId(Long roleId) {
        List<String> perms = menuMapper.selectMenuPermsByRoleId(roleId);
        Set<String> permsSet = new HashSet<>();
        for (String perm : perms)
        {
            if (StringUtils.isNotEmpty(perm))
            {
        for (String perm : perms) {
            if (StringUtils.isNotEmpty(perm)) {
                permsSet.addAll(Arrays.asList(perm.trim().split(",")));
            }
        }
@@ -125,20 +120,16 @@
    /**
     * 根据用户ID查询菜单
     *
     *
     * @param userId 用户名称
     * @return 菜单列表
     */
    @Override
    public List<SysMenu> selectMenuTreeByUserId(String userId)
    {
    public List<SysMenu> selectMenuTreeByUserId(String userId) {
        List<SysMenu> menus = null;
        if (SecurityUtils.isAdmin(userId))
        {
        if (SecurityUtils.isAdmin(userId)) {
            menus = menuMapper.selectMenuTreeAll();
        }
        else
        {
        } else {
            menus = menuMapper.selectMenuTreeByUserId(userId);
        }
        return getChildPerms(menus, 0);
@@ -146,29 +137,26 @@
    /**
     * 根据角色ID查询菜单树信息
     *
     *
     * @param roleId 角色ID
     * @return 选中菜单列表
     */
    @Override
    public List<Long> selectMenuListByRoleId(Long roleId)
    {
    public List<Long> selectMenuListByRoleId(Long roleId) {
        SysRole role = roleMapper.selectRoleById(roleId);
        return menuMapper.selectMenuListByRoleId(roleId, role.isMenuCheckStrictly());
    }
    /**
     * 构建前端路由所需要的菜单
     *
     *
     * @param menus 菜单列表
     * @return 路由列表
     */
    @Override
    public List<RouterVo> buildMenus(List<SysMenu> menus)
    {
    public List<RouterVo> buildMenus(List<SysMenu> menus) {
        List<RouterVo> routers = new LinkedList<RouterVo>();
        for (SysMenu menu : menus)
        {
        for (SysMenu menu : menus) {
            RouterVo router = new RouterVo();
            router.setHidden("1".equals(menu.getVisible()));
            router.setName(getRouteName(menu));
@@ -177,14 +165,11 @@
            router.setQuery(menu.getQuery());
            router.setMeta(new MetaVo(menu.getMenuName(), menu.getIcon(), StringUtils.equals("1", menu.getIsCache()), menu.getPath()));
            List<SysMenu> cMenus = menu.getChildren();
            if (!cMenus.isEmpty() && cMenus.size() > 0 && UserConstants.TYPE_DIR.equals(menu.getMenuType()))
            {
            if (!cMenus.isEmpty() && cMenus.size() > 0 && UserConstants.TYPE_DIR.equals(menu.getMenuType())) {
                router.setAlwaysShow(true);
                router.setRedirect("noRedirect");
                router.setChildren(buildMenus(cMenus));
            }
            else if (isMenuFrame(menu))
            {
            } else if (isMenuFrame(menu)) {
                router.setMeta(null);
                List<RouterVo> childrenList = new ArrayList<RouterVo>();
                RouterVo children = new RouterVo();
@@ -195,9 +180,7 @@
                children.setQuery(menu.getQuery());
                childrenList.add(children);
                router.setChildren(childrenList);
            }
            else if (menu.getParentId().intValue() == 0 && isInnerLink(menu))
            {
            } else if (menu.getParentId().intValue() == 0 && isInnerLink(menu)) {
                router.setMeta(new MetaVo(menu.getMenuName(), menu.getIcon()));
                router.setPath("/");
                List<RouterVo> childrenList = new ArrayList<RouterVo>();
@@ -217,27 +200,23 @@
    /**
     * 构建前端所需要树结构
     *
     *
     * @param menus 菜单列表
     * @return 树结构列表
     */
    @Override
    public List<SysMenu> buildMenuTree(List<SysMenu> menus)
    {
    public List<SysMenu> buildMenuTree(List<SysMenu> menus) {
        List<SysMenu> returnList = new ArrayList<SysMenu>();
        List<Long> tempList = menus.stream().map(SysMenu::getMenuId).collect(Collectors.toList());
        for (Iterator<SysMenu> iterator = menus.iterator(); iterator.hasNext();)
        {
        for (Iterator<SysMenu> iterator = menus.iterator(); iterator.hasNext(); ) {
            SysMenu menu = (SysMenu) iterator.next();
            // 如果是顶级节点, 遍历该父节点的所有子节点
            if (!tempList.contains(menu.getParentId()))
            {
            if (!tempList.contains(menu.getParentId())) {
                recursionFn(menus, menu);
                returnList.add(menu);
            }
        }
        if (returnList.isEmpty())
        {
        if (returnList.isEmpty()) {
            returnList = menus;
        }
        return returnList;
@@ -245,104 +224,102 @@
    /**
     * 构建前端所需要下拉树结构
     *
     *
     * @param menus 菜单列表
     * @return 下拉树结构列表
     */
    @Override
    public List<TreeSelect> buildMenuTreeSelect(List<SysMenu> menus)
    {
    public List<TreeSelect> buildMenuTreeSelect(List<SysMenu> menus) {
        List<SysMenu> menuTrees = buildMenuTree(menus);
        return menuTrees.stream().map(TreeSelect::new).collect(Collectors.toList());
    }
    /**
     * 根据菜单ID查询信息
     *
     *
     * @param menuId 菜单ID
     * @return 菜单信息
     */
    @Override
    public SysMenu selectMenuById(Long menuId)
    {
        return menuMapper.selectMenuById(menuId);
    public SysMenu selectMenuById(Long menuId) {
        SysMenu sysMenu = menuMapper.selectMenuById(menuId);
        //国际化
        String message = MessageUtils.message("menu." + sysMenu.getMenuNameI18n());
        if(StringUtils.isNotEmpty(message))
        {
            sysMenu.setMenuName(message);
        }
        return sysMenu;
    }
    /**
     * 是否存在菜单子节点
     *
     *
     * @param menuId 菜单ID
     * @return 结果
     */
    @Override
    public boolean hasChildByMenuId(Long menuId)
    {
    public boolean hasChildByMenuId(Long menuId) {
        int result = menuMapper.hasChildByMenuId(menuId);
        return result > 0;
    }
    /**
     * 查询菜单使用数量
     *
     *
     * @param menuId 菜单ID
     * @return 结果
     */
    @Override
    public boolean checkMenuExistRole(Long menuId)
    {
    public boolean checkMenuExistRole(Long menuId) {
        int result = roleMenuMapper.checkMenuExistRole(menuId);
        return result > 0;
    }
    /**
     * 新增保存菜单信息
     *
     *
     * @param menu 菜单信息
     * @return 结果
     */
    @Override
    public int insertMenu(SysMenu menu)
    {
    public int insertMenu(SysMenu menu) {
        return menuMapper.insertMenu(menu);
    }
    /**
     * 修改保存菜单信息
     *
     *
     * @param menu 菜单信息
     * @return 结果
     */
    @Override
    public int updateMenu(SysMenu menu)
    {
    public int updateMenu(SysMenu menu) {
        return menuMapper.updateMenu(menu);
    }
    /**
     * 删除菜单管理信息
     *
     *
     * @param menuId 菜单ID
     * @return 结果
     */
    @Override
    public int deleteMenuById(Long menuId)
    {
    public int deleteMenuById(Long menuId) {
        return menuMapper.deleteMenuById(menuId);
    }
    /**
     * 校验菜单名称是否唯一
     *
     *
     * @param menu 菜单信息
     * @return 结果
     */
    @Override
    public String checkMenuNameUnique(SysMenu menu)
    {
    public String checkMenuNameUnique(SysMenu menu) {
        Long menuId = StringUtils.isNull(menu.getMenuId()) ? -1L : menu.getMenuId();
        SysMenu info = menuMapper.checkMenuNameUnique(menu.getMenuName(), menu.getParentId());
        if (StringUtils.isNotNull(info) && info.getMenuId().longValue() != menuId.longValue())
        {
        if (StringUtils.isNotNull(info) && info.getMenuId().longValue() != menuId.longValue()) {
            return UserConstants.NOT_UNIQUE;
        }
        return UserConstants.UNIQUE;
@@ -350,16 +327,14 @@
    /**
     * 获取路由名称
     *
     *
     * @param menu 菜单信息
     * @return 路由名称
     */
    public String getRouteName(SysMenu menu)
    {
    public String getRouteName(SysMenu menu) {
        String routerName = StringUtils.capitalize(menu.getPath());
        // 非外链并且是一级目录(类型为目录)
        if (isMenuFrame(menu))
        {
        if (isMenuFrame(menu)) {
            routerName = StringUtils.EMPTY;
        }
        return routerName;
@@ -367,27 +342,23 @@
    /**
     * 获取路由地址
     *
     *
     * @param menu 菜单信息
     * @return 路由地址
     */
    public String getRouterPath(SysMenu menu)
    {
    public String getRouterPath(SysMenu menu) {
        String routerPath = menu.getPath();
        // 内链打开外网方式
        if (menu.getParentId().intValue() != 0 && isInnerLink(menu))
        {
        if (menu.getParentId().intValue() != 0 && isInnerLink(menu)) {
            routerPath = innerLinkReplaceEach(routerPath);
        }
        // 非外链并且是一级目录(类型为目录)
        if (0 == menu.getParentId().intValue() && UserConstants.TYPE_DIR.equals(menu.getMenuType())
                && UserConstants.NO_FRAME.equals(menu.getIsFrame()))
        {
                && UserConstants.NO_FRAME.equals(menu.getIsFrame())) {
            routerPath = "/" + menu.getPath();
        }
        // 非外链并且是一级目录(类型为菜单)
        else if (isMenuFrame(menu))
        {
        else if (isMenuFrame(menu)) {
            routerPath = "/";
        }
        return routerPath;
@@ -395,23 +366,17 @@
    /**
     * 获取组件信息
     *
     *
     * @param menu 菜单信息
     * @return 组件信息
     */
    public String getComponent(SysMenu menu)
    {
    public String getComponent(SysMenu menu) {
        String component = UserConstants.LAYOUT;
        if (StringUtils.isNotEmpty(menu.getComponent()) && !isMenuFrame(menu))
        {
        if (StringUtils.isNotEmpty(menu.getComponent()) && !isMenuFrame(menu)) {
            component = menu.getComponent();
        }
        else if (StringUtils.isEmpty(menu.getComponent()) && menu.getParentId().intValue() != 0 && isInnerLink(menu))
        {
        } else if (StringUtils.isEmpty(menu.getComponent()) && menu.getParentId().intValue() != 0 && isInnerLink(menu)) {
            component = UserConstants.INNER_LINK;
        }
        else if (StringUtils.isEmpty(menu.getComponent()) && isParentView(menu))
        {
        } else if (StringUtils.isEmpty(menu.getComponent()) && isParentView(menu)) {
            component = UserConstants.PARENT_VIEW;
        }
        return component;
@@ -419,58 +384,53 @@
    /**
     * 是否为菜单内部跳转
     *
     *
     * @param menu 菜单信息
     * @return 结果
     */
    public boolean isMenuFrame(SysMenu menu)
    {
    public boolean isMenuFrame(SysMenu menu) {
        return menu.getParentId().intValue() == 0 && UserConstants.TYPE_MENU.equals(menu.getMenuType())
                && menu.getIsFrame().equals(UserConstants.NO_FRAME);
    }
    /**
     * 是否为内链组件
     *
     *
     * @param menu 菜单信息
     * @return 结果
     */
    public boolean isInnerLink(SysMenu menu)
    {
    public boolean isInnerLink(SysMenu menu) {
        return menu.getIsFrame().equals(UserConstants.NO_FRAME) && StringUtils.ishttp(menu.getPath());
    }
    /**
     * 是否为parent_view组件
     *
     *
     * @param menu 菜单信息
     * @return 结果
     */
    public boolean isParentView(SysMenu menu)
    {
    public boolean isParentView(SysMenu menu) {
        return menu.getParentId().intValue() != 0 && UserConstants.TYPE_DIR.equals(menu.getMenuType());
    }
    /**
     * 根据父节点的ID获取所有子节点
     *
     * @param list 分类表
     *
     * @param list     分类表
     * @param parentId 传入的父节点ID
     * @return String
     */
    public List<SysMenu> getChildPerms(List<SysMenu> list, int parentId)
    {
    public List<SysMenu> getChildPerms(List<SysMenu> list, int parentId) {
        List<SysMenu> returnList = new ArrayList<SysMenu>();
        for (Iterator<SysMenu> iterator = list.iterator(); iterator.hasNext();)
        {
        for (Iterator<SysMenu> iterator = list.iterator(); iterator.hasNext(); ) {
            // 国际化转换
            SysMenu t = (SysMenu) iterator.next();
            String message = MessageUtils.message("menu." + t.getMenuNameEnglish());
            if(StringUtils.isNotEmpty(message))
            {t.setMenuName(message);}
            String message = MessageUtils.message("menu." + t.getMenuNameI18n());
            if (StringUtils.isNotEmpty(message)) {
                t.setMenuName(message);
            }
            // 一、根据传入的某个父节点ID,遍历该父节点的所有子节点
            if (t.getParentId() == parentId)
            {
            if (t.getParentId() == parentId) {
                recursionFn(list, t);
                returnList.add(t);
            }
@@ -480,19 +440,16 @@
    /**
     * 递归列表
     *
     *
     * @param list 分类表
     * @param t 子节点
     * @param t    子节点
     */
    private void recursionFn(List<SysMenu> list, SysMenu t)
    {
    private void recursionFn(List<SysMenu> list, SysMenu t) {
        // 得到子节点列表
        List<SysMenu> childList = getChildList(list, t);
        t.setChildren(childList);
        for (SysMenu tChild : childList)
        {
            if (hasChild(list, tChild))
            {
        for (SysMenu tChild : childList) {
            if (hasChild(list, tChild)) {
                recursionFn(list, tChild);
            }
        }
@@ -501,15 +458,12 @@
    /**
     * 得到子节点列表
     */
    private List<SysMenu> getChildList(List<SysMenu> list, SysMenu t)
    {
    private List<SysMenu> getChildList(List<SysMenu> list, SysMenu t) {
        List<SysMenu> tlist = new ArrayList<SysMenu>();
        Iterator<SysMenu> it = list.iterator();
        while (it.hasNext())
        {
        while (it.hasNext()) {
            SysMenu n = (SysMenu) it.next();
            if (n.getParentId().longValue() == t.getMenuId().longValue())
            {
            if (n.getParentId().longValue() == t.getMenuId().longValue()) {
                tlist.add(n);
            }
        }
@@ -519,19 +473,17 @@
    /**
     * 判断是否有子节点
     */
    private boolean hasChild(List<SysMenu> list, SysMenu t)
    {
    private boolean hasChild(List<SysMenu> list, SysMenu t) {
        return getChildList(list, t).size() > 0;
    }
    /**
     * 内链域名特殊字符替换
     *
     *
     * @return 替换后的内链域名
     */
    public String innerLinkReplaceEach(String path)
    {
        return StringUtils.replaceEach(path, new String[] { Constants.HTTP, Constants.HTTPS, Constants.WWW, "." },
                new String[] { "", "", "", "/" });
    public String innerLinkReplaceEach(String path) {
        return StringUtils.replaceEach(path, new String[]{Constants.HTTP, Constants.HTTPS, Constants.WWW, "."},
                new String[]{"", "", "", "/"});
    }
}
ruoyi-system/src/main/resources/mapper/system/SysConfigMapper.xml
@@ -1,121 +1,139 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.system.mapper.SysConfigMapper">
    <resultMap type="SysConfig" id="SysConfigResult">
        <id     property="configId"      column="config_id"      />
        <result property="configName"    column="config_name"    />
        <result property="configKey"     column="config_key"     />
        <result property="configValue"   column="config_value"   />
        <result property="configType"    column="config_type"    />
        <result property="createBy"      column="create_by"      />
        <result property="createTime"    column="create_time"    />
        <result property="updateBy"      column="update_by"      />
        <result property="updateTime"    column="update_time"    />
        <id property="configId" column="config_id"/>
        <result property="configName" column="config_name"/>
        <result property="configNameI18n" column="config_name_i18n"/>
        <result property="configKey" column="config_key"/>
        <result property="configValue" column="config_value"/>
        <result property="configType" column="config_type"/>
        <result property="createBy" column="create_by"/>
        <result property="createTime" column="create_time"/>
        <result property="updateBy" column="update_by"/>
        <result property="updateTime" column="update_time"/>
    </resultMap>
    <sql id="selectConfigVo">
        select config_id, config_name, config_key, config_value, config_type, create_by, create_time, update_by, update_time, remark
        from sys_config
        select config_id,
               config_name,
               config_name_i18n,
               config_key,
               config_value,
               config_type,
               create_by,
               create_time,
               update_by,
               update_time,
               remark
        from sys_config
    </sql>
    <!-- 查询条件 -->
    <sql id="sqlwhereSearch">
        <where>
            <if test="configId !=null">
                and config_id = #{configId}
            </if>
            <if test="configKey !=null and configKey != ''">
                and config_key = #{configKey}
            </if>
        </where>
    </sql>
    <sql id="sqlwhereSearch">
        <where>
            <if test="configId !=null">
                and config_id = #{configId}
            </if>
            <if test="configKey !=null and configKey != ''">
                and config_key = #{configKey}
            </if>
        </where>
    </sql>
    <select id="selectConfig" parameterType="SysConfig" resultMap="SysConfigResult">
        <include refid="selectConfigVo"/>
        <include refid="sqlwhereSearch"/>
    </select>
    <select id="selectConfigList" parameterType="SysConfig" resultMap="SysConfigResult">
        <include refid="selectConfigVo"/>
        <where>
            <if test="configName != null and configName != ''">
                AND config_name like ('%${configName}%')
            </if>
            <if test="configType != null and configType != ''">
                AND config_type = #{configType}
            </if>
            <if test="configKey != null and configKey != ''">
                AND config_key like ('%${configKey}%')
            </if>
            <if test="params.beginTime != null and params.beginTime != ''"><!-- 开始时间检索 -->
                and create_time &gt;= to_timestamp(#{params.beginTime},'yyyy-MM-DD')
            </if>
            <if test="params.endTime != null and params.endTime != ''"><!-- 结束时间检索 -->
                and create_time &lt;= to_timestamp(#{params.endTime},'yyyy-MM-DD')
            </if>
        </where>
            <if test="configName != null and configName != ''">
                AND config_name like ('%${configName}%')
            </if>
            <if test="configType != null and configType != ''">
                AND config_type = #{configType}
            </if>
            <if test="configKey != null and configKey != ''">
                AND config_key like ('%${configKey}%')
            </if>
            <if test="params.beginTime != null and params.beginTime != ''"><!-- 开始时间检索 -->
                and create_time &gt;= to_timestamp(#{params.beginTime},'yyyy-MM-DD')
            </if>
            <if test="params.endTime != null and params.endTime != ''"><!-- 结束时间检索 -->
                and create_time &lt;= to_timestamp(#{params.endTime},'yyyy-MM-DD')
            </if>
        </where>
    </select>
    <select id="selectConfigById" parameterType="Long" resultMap="SysConfigResult">
        <include refid="selectConfigVo"/>
        where config_id = #{configId}
    </select>
    <select id="checkConfigKeyUnique" parameterType="String" resultMap="SysConfigResult">
        <include refid="selectConfigVo"/>
        where config_key = #{configKey} limit 1
    </select>
    <insert id="insertConfig" parameterType="SysConfig">
        insert into sys_config (
            <if test="configName != null and configName != '' ">config_name,</if>
            <if test="configKey != null and configKey != '' ">config_key,</if>
            <if test="configValue != null and configValue != '' ">config_value,</if>
            <if test="configType != null and configType != '' ">config_type,</if>
            <if test="createBy != null and createBy != ''">create_by,</if>
            <if test="remark != null and remark != ''">remark,</if>
             create_time
        <if test="configName != null and configName != '' ">config_name,</if>
        <if test="configNameI18n != null and configNameI18n != '' ">config_name_i18n,</if>
        <if test="configKey != null and configKey != '' ">config_key,</if>
        <if test="configValue != null and configValue != '' ">config_value,</if>
        <if test="configType != null and configType != '' ">config_type,</if>
        <if test="createBy != null and createBy != ''">create_by,</if>
        <if test="remark != null and remark != ''">remark,</if>
        create_time
        )values(
            <if test="configName != null and configName != ''">#{configName},</if>
            <if test="configKey != null and configKey != ''">#{configKey},</if>
            <if test="configValue != null and configValue != ''">#{configValue},</if>
            <if test="configType != null and configType != ''">#{configType},</if>
            <if test="createBy != null and createBy != ''">#{createBy},</if>
            <if test="remark != null and remark != ''">#{remark},</if>
             now()
        )
        <if test="configName != null and configName != ''">#{configName},</if>
        <if test="configNameI18n != null and configNameI18n != ''">#{configNameI18n},</if>
        <if test="configKey != null and configKey != ''">#{configKey},</if>
        <if test="configValue != null and configValue != ''">#{configValue},</if>
        <if test="configType != null and configType != ''">#{configType},</if>
        <if test="createBy != null and createBy != ''">#{createBy},</if>
        <if test="remark != null and remark != ''">#{remark},</if>
        now()
        )
    </insert>
    <update id="updateConfig" parameterType="SysConfig">
        update sys_config
        update sys_config
        <set>
            <if test="configName != null and configName != ''">config_name = #{configName},</if>
            <if test="configNameI18n != null and configNameI18n != ''">config_name_i18n = #{configNameI18n},</if>
            <if test="configKey != null and configKey != ''">config_key = #{configKey},</if>
            <if test="configValue != null and configValue != ''">config_value = #{configValue},</if>
            <if test="configType != null and configType != ''">config_type = #{configType},</if>
            <if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if>
            <if test="remark != null">remark = #{remark},</if>
             update_time = now()
            update_time = now()
        </set>
        where config_id = #{configId}
    </update>
    <delete id="deleteConfigById" parameterType="Long">
        delete from sys_config where config_id = #{configId}
        delete
        from sys_config
        where config_id = #{configId}
    </delete>
    <delete id="deleteConfigByIds" parameterType="Long">
        delete from sys_config where config_id in
        delete from sys_config where config_id in
        <foreach item="configId" collection="array" open="(" separator="," close=")">
            #{configId}
            #{configId}
        </foreach>
    </delete>
    <select id="selectByType" parameterType="String" resultMap="SysConfigResult">
        select * from sys_config where config_key = #{sysType}
        select *
        from sys_config
        where config_key = #{sysType}
    </select>
</mapper>
ruoyi-system/src/main/resources/mapper/system/SysDictDataMapper.xml
@@ -8,6 +8,7 @@
        <id     property="dictCode"   column="dict_code"   />
        <result property="dictSort"   column="dict_sort"   />
        <result property="dictLabel"  column="dict_label"  />
        <result property="dictLabelI18n"  column="dict_label_i18n"  />
        <result property="dictValue"  column="dict_value"  />
        <result property="dictType"   column="dict_type"   />
        <result property="cssClass"   column="css_class"   />
@@ -21,7 +22,7 @@
    </resultMap>
    
    <sql id="selectDictDataVo">
        select dict_code, dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, remark
        select dict_code, dict_sort, dict_label,dict_label_i18n, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, remark
        from sys_dict_data
    </sql>
@@ -76,6 +77,7 @@
         <set>
             <if test="dictSort != null">dict_sort = #{dictSort},</if>
             <if test="dictLabel != null and dictLabel != ''">dict_label = #{dictLabel},</if>
            <if test="dictLabelI18n != null and dictLabelI18n != ''">dict_label_i18n = #{dictLabelI18n},</if>
             <if test="dictValue != null and dictValue != ''">dict_value = #{dictValue},</if>
             <if test="dictType != null and dictType != ''">dict_type = #{dictType},</if>
             <if test="cssClass != null">css_class = #{cssClass},</if>
@@ -97,6 +99,7 @@
         insert into sys_dict_data(
             <if test="dictSort != null">dict_sort,</if>
             <if test="dictLabel != null and dictLabel != ''">dict_label,</if>
            <if test="dictLabelI18n != null and dictLabelI18n != ''">dict_label_i18n,</if>
             <if test="dictValue != null and dictValue != ''">dict_value,</if>
             <if test="dictType != null and dictType != ''">dict_type,</if>
             <if test="cssClass != null and cssClass != ''">css_class,</if>
@@ -109,6 +112,7 @@
         )values(
             <if test="dictSort != null">#{dictSort},</if>
             <if test="dictLabel != null and dictLabel != ''">#{dictLabel},</if>
            <if test="dictLabelI18n != null and dictLabelI18n != ''">#{dictLabelI18n},</if>
             <if test="dictValue != null and dictValue != ''">#{dictValue},</if>
             <if test="dictType != null and dictType != ''">#{dictType},</if>
             <if test="cssClass != null and cssClass != ''">#{cssClass},</if>
ruoyi-system/src/main/resources/mapper/system/SysDictTypeMapper.xml
@@ -1,105 +1,111 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.system.mapper.SysDictTypeMapper">
    <resultMap type="SysDictType" id="SysDictTypeResult">
        <id     property="dictId"     column="dict_id"     />
        <result property="dictName"   column="dict_name"   />
        <result property="dictType"   column="dict_type"   />
        <result property="status"     column="status"      />
        <result property="createBy"   column="create_by"   />
        <result property="createTime" column="create_time" />
        <result property="updateBy"   column="update_by"   />
        <result property="updateTime" column="update_time" />
    </resultMap>
    <sql id="selectDictTypeVo">
        select dict_id, dict_name, dict_type, status, create_by, create_time, remark
        from sys_dict_type
    <resultMap type="SysDictType" id="SysDictTypeResult">
        <id property="dictId" column="dict_id"/>
        <result property="dictName" column="dict_name"/>
        <result property="dictNameI18n" column="dict_name_i18n"/>
        <result property="dictType" column="dict_type"/>
        <result property="status" column="status"/>
        <result property="createBy" column="create_by"/>
        <result property="createTime" column="create_time"/>
        <result property="updateBy" column="update_by"/>
        <result property="updateTime" column="update_time"/>
    </resultMap>
    <sql id="selectDictTypeVo">
        select dict_id, dict_name,dict_name_i18n, dict_type, status, create_by, create_time, remark
        from sys_dict_type
    </sql>
    <select id="selectDictTypeList" parameterType="SysDictType" resultMap="SysDictTypeResult">
        <include refid="selectDictTypeVo"/>
        <where>
            <if test="dictName != null and dictName != ''">
                AND dict_name like ('%${dictName}%')
            </if>
            <if test="status != null and status != ''">
                AND status = #{status}
            </if>
            <if test="dictType != null and dictType != ''">
                AND dict_type like ('%${dictType}%')
            </if>
            <if test="params.beginTime != null and params.beginTime != ''"><!-- 开始时间检索 -->
                and create_time &gt;= to_timestamp(#{params.beginTime},'yyyy-MM-DD')
            </if>
            <if test="params.endTime != null and params.endTime != ''"><!-- 结束时间检索 -->
                and create_time &lt;= to_timestamp(#{params.endTime},'yyyy-MM-DD')
            </if>
        </where>
    </select>
    <select id="selectDictTypeAll" resultMap="SysDictTypeResult">
        <include refid="selectDictTypeVo"/>
    </select>
    <select id="selectDictTypeById" parameterType="Long" resultMap="SysDictTypeResult">
        <include refid="selectDictTypeVo"/>
        where dict_id = #{dictId}
    </select>
    <select id="selectDictTypeByType" parameterType="String" resultMap="SysDictTypeResult">
        <include refid="selectDictTypeVo"/>
        where dict_type = #{dictType}
    </select>
    <select id="checkDictTypeUnique" parameterType="String" resultMap="SysDictTypeResult">
        <include refid="selectDictTypeVo"/>
        where dict_type = #{dictType} limit 1 OFFSET 0
    </select>
    <delete id="deleteDictTypeById" parameterType="Long">
         delete from sys_dict_type where dict_id = #{dictId}
     </delete>
     <delete id="deleteDictTypeByIds" parameterType="Long">
         delete from sys_dict_type where dict_id in
         <foreach collection="array" item="dictId" open="(" separator="," close=")">
             #{dictId}
        </foreach>
     </delete>
    <select id="selectDictTypeList" parameterType="SysDictType" resultMap="SysDictTypeResult">
        <include refid="selectDictTypeVo"/>
        <where>
            <if test="dictName != null and dictName != ''">
                AND dict_name like ('%${dictName}%')
            </if>
            <if test="status != null and status != ''">
                AND status = #{status}
            </if>
            <if test="dictType != null and dictType != ''">
                AND dict_type like ('%${dictType}%')
            </if>
            <if test="params.beginTime != null and params.beginTime != ''"><!-- 开始时间检索 -->
                and create_time &gt;= to_timestamp(#{params.beginTime},'yyyy-MM-DD')
            </if>
            <if test="params.endTime != null and params.endTime != ''"><!-- 结束时间检索 -->
                and create_time &lt;= to_timestamp(#{params.endTime},'yyyy-MM-DD')
            </if>
        </where>
    </select>
     <update id="updateDictType" parameterType="SysDictType">
         update sys_dict_type
         <set>
             <if test="dictName != null and dictName != ''">dict_name = #{dictName},</if>
             <if test="dictType != null and dictType != ''">dict_type = #{dictType},</if>
             <if test="status != null">status = #{status},</if>
             <if test="remark != null">remark = #{remark},</if>
             <if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if>
             update_time = now()
         </set>
         where dict_id = #{dictId}
    </update>
     <insert id="insertDictType" parameterType="SysDictType">
         insert into sys_dict_type(
             <if test="dictName != null and dictName != ''">dict_name,</if>
             <if test="dictType != null and dictType != ''">dict_type,</if>
             <if test="status != null">status,</if>
             <if test="remark != null and remark != ''">remark,</if>
             <if test="createBy != null and createBy != ''">create_by,</if>
             create_time
         )values(
             <if test="dictName != null and dictName != ''">#{dictName},</if>
             <if test="dictType != null and dictType != ''">#{dictType},</if>
             <if test="status != null">#{status},</if>
             <if test="remark != null and remark != ''">#{remark},</if>
             <if test="createBy != null and createBy != ''">#{createBy},</if>
             now()
         )
    </insert>
    <select id="selectDictTypeAll" resultMap="SysDictTypeResult">
        <include refid="selectDictTypeVo"/>
    </select>
    <select id="selectDictTypeById" parameterType="Long" resultMap="SysDictTypeResult">
        <include refid="selectDictTypeVo"/>
        where dict_id = #{dictId}
    </select>
    <select id="selectDictTypeByType" parameterType="String" resultMap="SysDictTypeResult">
        <include refid="selectDictTypeVo"/>
        where dict_type = #{dictType}
    </select>
    <select id="checkDictTypeUnique" parameterType="String" resultMap="SysDictTypeResult">
        <include refid="selectDictTypeVo"/>
        where dict_type = #{dictType} limit 1 OFFSET 0
    </select>
    <delete id="deleteDictTypeById" parameterType="Long">
        delete
        from sys_dict_type
        where dict_id = #{dictId}
    </delete>
    <delete id="deleteDictTypeByIds" parameterType="Long">
        delete from sys_dict_type where dict_id in
        <foreach collection="array" item="dictId" open="(" separator="," close=")">
            #{dictId}
        </foreach>
    </delete>
    <update id="updateDictType" parameterType="SysDictType">
        update sys_dict_type
        <set>
            <if test="dictName != null and dictName != ''">dict_name = #{dictName},</if>
            <if test="dictNameI18n != null and dictNameI18n != ''">dict_name_i18n = #{dictNameI18n},</if>
            <if test="dictType != null and dictType != ''">dict_type = #{dictType},</if>
            <if test="status != null">status = #{status},</if>
            <if test="remark != null">remark = #{remark},</if>
            <if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if>
            update_time = now()
        </set>
        where dict_id = #{dictId}
    </update>
    <insert id="insertDictType" parameterType="SysDictType">
        insert into sys_dict_type(
        <if test="dictName != null and dictName != ''">dict_name,</if>
        <if test="dictNameI18n != null and dictNameI18n != ''">dict_name_i18n,</if>
        <if test="dictType != null and dictType != ''">dict_type,</if>
        <if test="status != null">status,</if>
        <if test="remark != null and remark != ''">remark,</if>
        <if test="createBy != null and createBy != ''">create_by,</if>
        create_time
        )values(
        <if test="dictName != null and dictName != ''">#{dictName},</if>
        <if test="dictNameI18n != null and dictNameI18n != ''">#{dictNameI18n},</if>
        <if test="dictType != null and dictType != ''">#{dictType},</if>
        <if test="status != null">#{status},</if>
        <if test="remark != null and remark != ''">#{remark},</if>
        <if test="createBy != null and createBy != ''">#{createBy},</if>
        now()
        )
    </insert>
</mapper> 
ruoyi-system/src/main/resources/mapper/system/SysMenuMapper.xml
@@ -7,7 +7,7 @@
    <resultMap type="SysMenu" id="SysMenuResult">
        <id     property="menuId"         column="menu_id"        />
        <result property="menuName"       column="menu_name"      />
        <result property="menuNameEnglish"       column="menu_name_english"      />
        <result property="menuNameI18n"   column="menu_name_i18n" />
        <result property="parentName"     column="parent_name"    />
        <result property="parentId"       column="parent_id"      />
        <result property="orderNum"       column="order_num"      />
@@ -29,7 +29,7 @@
    </resultMap>
    <sql id="selectMenuVo">
        select menu_id, menu_name,menu_name_english, parent_id, order_num, path, component, query, is_frame, is_cache, menu_type, visible, status, coalesce(perms,'') as perms, icon, create_time
        select menu_id, menu_name,menu_name_i18n, parent_id, order_num, path, component, query, is_frame, is_cache, menu_type, visible, status, coalesce(perms,'') as perms, icon, create_time
        from sys_menu
    </sql>
    
@@ -50,13 +50,13 @@
    </select>
    
    <select id="selectMenuTreeAll" resultMap="SysMenuResult">
        select distinct m.menu_id, m.parent_id, m.menu_name,m.menu_name_english, m.path, m.component, m.query, m.visible, m.status, coalesce(m.perms,'') as perms, m.is_frame, m.is_cache, m.menu_type, m.icon, m.order_num, m.create_time
        select distinct m.menu_id, m.parent_id, m.menu_name,m.menu_name_i18n, m.path, m.component, m.query, m.visible, m.status, coalesce(m.perms,'') as perms, m.is_frame, m.is_cache, m.menu_type, m.icon, m.order_num, m.create_time
        from sys_menu m where m.menu_type in ('M', 'C') and m.status = '0'
        order by m.parent_id, m.order_num
    </select>
    
    <select id="selectMenuListByUserId" parameterType="SysMenu" resultMap="SysMenuResult">
        select distinct m.menu_id, m.parent_id, m.menu_name,m.menu_name_english, m.path, m.component, m.query, m.visible, m.status, coalesce(m.perms,'') as perms, m.is_frame, m.is_cache, m.menu_type, m.icon, m.order_num, m.create_time
        select distinct m.menu_id, m.parent_id, m.menu_name,m.menu_name_i18n, m.path, m.component, m.query, m.visible, m.status, coalesce(m.perms,'') as perms, m.is_frame, m.is_cache, m.menu_type, m.icon, m.order_num, m.create_time
        from sys_menu m
        left join sys_role_menu rm on m.menu_id = rm.menu_id
        left join sys_user_role ur on rm.role_id = ur.role_id
@@ -75,7 +75,7 @@
    </select>
    
    <select id="selectMenuTreeByUserId" parameterType="String" resultMap="SysMenuResult">
        select distinct m.menu_id, m.parent_id, m.menu_name,m.menu_name_english, m.path, m.component, m.query, m.visible, m.status, coalesce(m.perms,'') as perms, m.is_frame, m.is_cache, m.menu_type, m.icon, m.order_num, m.create_time
        select distinct m.menu_id, m.parent_id, m.menu_name,m.menu_name_i18n, m.path, m.component, m.query, m.visible, m.status, coalesce(m.perms,'') as perms, m.is_frame, m.is_cache, m.menu_type, m.icon, m.order_num, m.create_time
        from sys_menu m
             left join sys_role_menu rm on m.menu_id = rm.menu_id
             left join sys_user_role ur on rm.role_id = ur.role_id
@@ -137,7 +137,7 @@
        update sys_menu
        <set>
            <if test="menuName != null and menuName != ''">menu_name = #{menuName},</if>
            <if test="menuNameEnglish != null and menuNameEnglish != ''">menu_name_english = #{menuNameEnglish},</if>
            <if test="menuNameI18n != null and menuNameI18n != ''">menu_name_i18n = #{menuNameI18n},</if>
            <if test="parentId != null">parent_id = #{parentId},</if>
            <if test="orderNum != null">order_num = #{orderNum},</if>
            <if test="path != null and path != ''">path = #{path},</if>
@@ -162,7 +162,7 @@
        <if test="menuId != null and menuId != 0">menu_id,</if>
        <if test="parentId != null and parentId != 0">parent_id,</if>
        <if test="menuName != null and menuName != ''">menu_name,</if>
        <if test="menuNameEnglish != null and menuNameEnglish != ''">menu_name_english,</if>
        <if test="menuNameI18n != null and menuNameI18n != ''">menu_name_i18n,</if>
        <if test="orderNum != null">order_num,</if>
        <if test="path != null and path != ''">path,</if>
        <if test="component != null and component != ''">component,</if>
@@ -181,7 +181,7 @@
        <if test="menuId != null and menuId != 0">#{menuId},</if>
        <if test="parentId != null and parentId != 0">#{parentId},</if>
        <if test="menuName != null and menuName != ''">#{menuName},</if>
        <if test="menuNameEnglish != null and menuNameEnglish != ''">#{menuNameEnglish},</if>
        <if test="menuNameI18n != null and menuNameI18n != ''">#{menuNameI18n},</if>
        <if test="orderNum != null">#{orderNum},</if>
        <if test="path != null and path != ''">#{path},</if>
        <if test="component != null and component != ''">#{component},</if>