feat(database): 支持达梦数据库适配

- 在多个Mapper XML文件中增加对达梦数据库的SQL语句适配
- 为AiCommandRecordMapper.xml中的model字段添加反引号避免关键字冲突
- 为LogMapper.xml、UserMapper.xml和DatabaseMapper.xml添加databaseId属性区分不同数据库
- 新增MybatisConfig配置类用于识别数据库类型并注册VendorDatabaseIdProvider
- pom.xml中引入达梦数据库驱动依赖DmJdbcDriver8
- 完善RoleMapper接口注释明确返回值类型
This commit is contained in:
theo
2025-12-04 11:26:27 +08:00
parent 96676f487e
commit e1d7f0371d
8 changed files with 321 additions and 36 deletions

View File

@@ -2,10 +2,11 @@
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--suppress ALL -->
<mapper namespace="com.youlai.boot.system.mapper.LogMapper">
<!-- 日志分页列表 -->
<select id="getLogPage" resultType="com.youlai.boot.system.model.vo.LogPageVO">
<!-- 日志分页列表 mysql版本 -->
<select id="getLogPage" resultType="com.youlai.boot.system.model.vo.LogPageVO" databaseId="mysql">
SELECT
t1.id,
t1.module,
@@ -46,6 +47,48 @@
ORDER BY
t1.create_time DESC
</select>
<!-- 日志分页列表 dm版本 -->
<select id="getLogPage" resultType="com.youlai.boot.system.model.vo.LogPageVO" databaseId="dm">
SELECT
t1.id,
t1.module,
t1.content,
t1.request_uri,
t1.ip,
t1.province || ' ' || t1.city AS region,
t1.execution_time,
t1.browser || ' ' || t1.browser_version AS browser,
t1.os,
t1.create_time,
t2.nickname AS operator
FROM
sys_log t1
LEFT JOIN sys_user t2 ON t1.create_by = t2.id
<where>
t1.is_deleted = 0
<if test="queryParams.keywords != null and queryParams.keywords != ''">
AND (
t1.content LIKE concat('%',#{queryParams.keywords},'%')
OR
t1.ip LIKE concat('%',#{queryParams.keywords},'%')
OR
t2.nickname LIKE concat('%',#{queryParams.keywords},'%')
)
</if>
<if test="queryParams.createTime != null and queryParams.createTime.size > 0">
<if test="queryParams.createTime[0] != null and queryParams.createTime[0] != ''">
<bind name="startDate" value="queryParams.createTime[0].length() == 10 ? queryParams.createTime[0] + ' 00:00:00' : queryParams.createTime[0]"/>
AND t1.create_time &gt;= #{startDate}
</if>
<if test="queryParams.createTime[1] != null and queryParams.createTime[1] != ''">
<bind name="endDate" value="queryParams.createTime[1].length() == 10 ? queryParams.createTime[1] + ' 23:59:59' : queryParams.createTime[1]"/>
AND t1.create_time &lt;= #{endDate}
</if>
</if>
</where>
ORDER BY
t1.create_time DESC
</select>
<!-- 获取访问量日统计列表 -->
<select id="getPvCounts" resultType="com.youlai.boot.system.model.bo.VisitCount">
@@ -75,44 +118,91 @@
DATE_FORMAT(create_time, '%Y-%m-%d')
</select>
<!-- 获取访问量(PV)统计数据 -->
<select id="getPvStats" resultType="com.youlai.boot.system.model.bo.VisitStatsBO">
<!-- 获取访问量(PV)统计数据 mysql版本-->
<select id="getPvStats" resultType="com.youlai.boot.system.model.bo.VisitStatsBO" databaseId="mysql">
SELECT
COUNT(CASE WHEN DATE(create_time) = CURDATE() THEN 1 END) AS todayCount,
COUNT(*) AS totalCount,
ROUND(
CASE
WHEN COUNT(CASE WHEN DATE(create_time) = CURDATE() - INTERVAL 1 DAY AND TIME(create_time) &lt;= TIME(NOW()) THEN 1 END) = 0 THEN 0
ELSE
(COUNT(CASE WHEN DATE(create_time) = CURDATE() THEN 1 END) -
COUNT(CASE WHEN DATE(create_time) = CURDATE() - INTERVAL 1 DAY AND TIME(create_time) &lt;= TIME(NOW()) THEN 1 END)) /
COUNT(CASE WHEN DATE(create_time) = CURDATE() - INTERVAL 1 DAY AND TIME(create_time) &lt;= TIME(NOW()) THEN 1 END)
END,
2) AS growthRate
FROM
sys_log
WHERE
is_deleted = 0
</select>
<!-- 获取访问量(PV)统计数据 dm-->
<select id="getPvStats" resultType="com.youlai.boot.system.model.bo.VisitStatsBO" databaseId="dm">
SELECT
COUNT(CASE WHEN TRUNC(create_time) = TRUNC(SYSDATE) THEN 1 END) AS todayCount,
COUNT(*) AS totalCount,
ROUND(
CASE
WHEN COUNT(CASE WHEN DATE(create_time) = CURDATE() - INTERVAL 1 DAY AND TIME(create_time) &lt;= TIME(NOW()) THEN 1 END) = 0 THEN 0
WHEN COUNT(CASE WHEN TRUNC(create_time) = TRUNC(SYSDATE) - 1
AND TO_CHAR(create_time, 'HH24:MI:SS') &lt;= TO_CHAR(SYSDATE, 'HH24:MI:SS') THEN 1 END) = 0 THEN 0
ELSE
(COUNT(CASE WHEN DATE(create_time) = CURDATE() THEN 1 END) -
COUNT(CASE WHEN DATE(create_time) = CURDATE() - INTERVAL 1 DAY AND TIME(create_time) &lt;= TIME(NOW()) THEN 1 END)) /
COUNT(CASE WHEN DATE(create_time) = CURDATE() - INTERVAL 1 DAY AND TIME(create_time) &lt;= TIME(NOW()) THEN 1 END)
(COUNT(CASE WHEN TRUNC(create_time) = TRUNC(SYSDATE) THEN 1 END) -
COUNT(CASE WHEN TRUNC(create_time) = TRUNC(SYSDATE) - 1
AND TO_CHAR(create_time, 'HH24:MI:SS') &lt;= TO_CHAR(SYSDATE, 'HH24:MI:SS') THEN 1 END)) /
COUNT(CASE WHEN TRUNC(create_time) = TRUNC(SYSDATE) - 1
AND TO_CHAR(create_time, 'HH24:MI:SS') &lt;= TO_CHAR(SYSDATE, 'HH24:MI:SS') THEN 1 END)
END,
2) AS growthRate
FROM
sys_log
sys_log
WHERE
is_deleted = 0
is_deleted = 0
</select>
<!-- 获取IP统计数据 -->
<select id="getUvStats" resultType="com.youlai.boot.system.model.bo.VisitStatsBO">
SELECT
COUNT(DISTINCT CASE WHEN DATE(create_time) = CURDATE() THEN ip END) AS todayCount,
COUNT(DISTINCT ip) AS totalCount,
ROUND(
CASE
WHEN COUNT(DISTINCT CASE WHEN DATE(create_time) = CURDATE() - INTERVAL 1 DAY AND TIME(create_time) &lt;= TIME(NOW()) THEN ip END) = 0 THEN 0
<!-- 获取IP统计数据 mysql版本-->
<select id="getUvStats" resultType="com.youlai.boot.system.model.bo.VisitStatsBO" databaseId="mysql">
SELECT
COUNT(DISTINCT CASE WHEN DATE(create_time) = CURDATE() THEN ip END) AS todayCount,
COUNT(DISTINCT ip) AS totalCount,
ROUND(
CASE
WHEN COUNT(DISTINCT CASE WHEN DATE(create_time) = CURDATE() - INTERVAL 1 DAY AND TIME(create_time) &lt;= TIME(NOW()) THEN ip END) = 0 THEN 0
ELSE
(COUNT(DISTINCT CASE WHEN DATE(create_time) = CURDATE() THEN ip END) -
COUNT(DISTINCT CASE WHEN DATE(create_time) = CURDATE() - INTERVAL 1 DAY AND TIME(create_time) &lt;= TIME(NOW()) THEN ip END)) /
COUNT(DISTINCT CASE WHEN DATE(create_time) = CURDATE() - INTERVAL 1 DAY AND TIME(create_time) &lt;= TIME(NOW()) THEN ip END)) /
COUNT(DISTINCT CASE WHEN DATE(create_time) = CURDATE() - INTERVAL 1 DAY AND TIME(create_time) &lt;= TIME(NOW()) THEN ip END)
END,
2) AS growthRate
FROM
sys_log
WHERE
is_deleted = 0
FROM
sys_log
WHERE
is_deleted = 0
</select>
<!-- 获取IP统计数据 dm版本-->
<select id="getUvStats" resultType="com.youlai.boot.system.model.bo.VisitStatsBO" databaseId="dm">
SELECT COUNT(DISTINCT CASE WHEN TRUNC(create_time) = TRUNC(SYSDATE) THEN ip END) AS todayCount,
COUNT(DISTINCT ip) AS totalCount,
ROUND(
CASE
WHEN COUNT(DISTINCT CASE
WHEN TRUNC(create_time) = TRUNC(SYSDATE - 1)
THEN ip END) = 0
THEN 0
ELSE
(COUNT(DISTINCT CASE
WHEN TRUNC(create_time) = TRUNC(SYSDATE)
THEN ip END) -
COUNT(DISTINCT CASE
WHEN TRUNC(create_time) = TRUNC(SYSDATE - 1)
THEN ip END)) * 1.0 /
COUNT(DISTINCT CASE
WHEN TRUNC(create_time) = TRUNC(SYSDATE - 1)
THEN ip END)
END,
2) AS growthRate
FROM sys_log
WHERE is_deleted = 0
</select>
</mapper>