feat: 重构项目结构并新增微信小程序认证模块
This commit is contained in:
@@ -85,8 +85,7 @@ security:
|
||||
- /api/v1/auth/sms/code # 发送登录短信验证码
|
||||
- /api/v1/auth/refresh-token # 刷新令牌接口
|
||||
- /api/v1/wechat/miniapp/auth/** # 微信小程序认证接口(静默登录/手机号快捷登录/绑定手机号)
|
||||
- /api/v1/statistics/** # 统计分析接口(访问趋势/访问概览)
|
||||
- /ws/** # WebSocket接口
|
||||
- /api/v1/logs/** # 日志接口(访问日志列表)
|
||||
# 非安全端点路径,完全绕过 Spring Security 的过滤器
|
||||
unsecured-urls:
|
||||
- ${springdoc.swagger-ui.path}
|
||||
@@ -157,8 +156,8 @@ springdoc:
|
||||
packages-to-scan: # 扫描的 Controller 包,限制只生成指定包的接口文档
|
||||
- com.youlai.boot.auth.controller
|
||||
- com.youlai.boot.system.controller
|
||||
- com.youlai.boot.file.controller
|
||||
- com.youlai.boot.tool.codegen.controller
|
||||
- com.youlai.boot.module.file.controller
|
||||
- com.youlai.boot.module.codegen.controller
|
||||
default-flat-param-object: true # 将对象参数扁平化显示在文档中
|
||||
|
||||
# knife4j 配置
|
||||
|
||||
@@ -83,7 +83,7 @@ security:
|
||||
- /api/v1/auth/captcha # 验证码获取接口
|
||||
- /api/v1/auth/refresh-token # 刷新令牌接口
|
||||
- /api/v1/wechat/miniapp/auth/** # 微信小程序认证接口(静默登录/手机号快捷登录/绑定手机号)
|
||||
- /ws/** # WebSocket接口
|
||||
- /api/v1/logs/** # 日志接口(访问日志列表)
|
||||
# 非安全端点路径,完全绕过 Spring Security 的过滤器
|
||||
unsecured-urls:
|
||||
- ${springdoc.swagger-ui.path}
|
||||
@@ -154,8 +154,8 @@ springdoc:
|
||||
packages-to-scan: # 扫描的 Controller 包,限制只生成指定包的接口文档
|
||||
- com.youlai.boot.auth.controller
|
||||
- com.youlai.boot.system.controller
|
||||
- com.youlai.boot.file.controller
|
||||
- com.youlai.boot.tool.codegen.controller
|
||||
- com.youlai.boot.module.file.controller
|
||||
- com.youlai.boot.module.codegen.controller
|
||||
default-flat-param-object: true # 将对象参数扁平化显示在文档中
|
||||
|
||||
# knife4j 配置
|
||||
|
||||
@@ -10,26 +10,34 @@
|
||||
SELECT
|
||||
t1.id,
|
||||
t1.module,
|
||||
t1.action_type AS actionType,
|
||||
t1.title,
|
||||
t1.content,
|
||||
t1.request_uri,
|
||||
t1.operator_id AS operatorId,
|
||||
t1.operator_name AS operatorName,
|
||||
t1.request_uri AS requestUri,
|
||||
t1.request_method AS requestMethod,
|
||||
t1.ip,
|
||||
CONCAT(t1.province," ", t1.city) AS region,
|
||||
t1.execution_time,
|
||||
CONCAT(t1.browser," ", t1.browser_version) AS browser,
|
||||
CONCAT(t1.province, " ", t1.city) AS region,
|
||||
t1.device,
|
||||
t1.os,
|
||||
t1.create_time,
|
||||
t2.nickname AS operator
|
||||
t1.browser,
|
||||
t1.status,
|
||||
t1.execution_time AS executionTime,
|
||||
t1.error_msg AS errorMsg,
|
||||
t1.create_time AS createTime
|
||||
FROM
|
||||
sys_log t1
|
||||
LEFT JOIN sys_user t2 ON t1.create_by = t2.id
|
||||
<where>
|
||||
<if test="queryParams.keywords != null and queryParams.keywords != ''">
|
||||
AND (
|
||||
t1.title LIKE concat('%',#{queryParams.keywords},'%')
|
||||
OR
|
||||
t1.content LIKE concat('%',#{queryParams.keywords},'%')
|
||||
OR
|
||||
t1.ip LIKE concat('%',#{queryParams.keywords},'%')
|
||||
OR
|
||||
t2.nickname LIKE concat('%',#{queryParams.keywords},'%')
|
||||
t1.operator_name LIKE concat('%',#{queryParams.keywords},'%')
|
||||
)
|
||||
</if>
|
||||
<if test="queryParams.createTime != null and queryParams.createTime.size > 0">
|
||||
@@ -48,7 +56,7 @@
|
||||
</select>
|
||||
|
||||
<!-- 获取访问量日统计列表 -->
|
||||
<select id="getPvCounts" resultType="com.youlai.boot.system.model.bo.VisitCountBO">
|
||||
<select id="getPvCounts" resultType="com.youlai.boot.system.model.dto.VisitCountDTO">
|
||||
SELECT
|
||||
COUNT(1) AS count,
|
||||
DATE_FORMAT(create_time,'%Y-%m-%d') AS date
|
||||
@@ -61,7 +69,7 @@
|
||||
</select>
|
||||
|
||||
<!-- 获取IP日统计列表-->
|
||||
<select id="getIpCounts" resultType="com.youlai.boot.system.model.bo.VisitCountBO">
|
||||
<select id="getIpCounts" resultType="com.youlai.boot.system.model.dto.VisitCountDTO">
|
||||
SELECT
|
||||
COUNT(DISTINCT ip) AS count,
|
||||
DATE_FORMAT(create_time, '%Y-%m-%d') AS date
|
||||
@@ -74,10 +82,10 @@
|
||||
</select>
|
||||
|
||||
<!-- 获取访问量(PV)统计数据 mysql版本-->
|
||||
<select id="getPvStats" resultType="com.youlai.boot.system.model.bo.VisitStatsBO" databaseId="mysql">
|
||||
<select id="getPvStats" resultType="com.youlai.boot.system.model.vo.VisitOverviewVO" databaseId="mysql">
|
||||
SELECT
|
||||
COUNT(CASE WHEN DATE(create_time) = CURDATE() THEN 1 END) AS todayCount,
|
||||
COUNT(*) AS totalCount,
|
||||
COUNT(CASE WHEN DATE(create_time) = CURDATE() THEN 1 END) AS todayPvCount,
|
||||
COUNT(*) AS totalPvCount,
|
||||
ROUND(
|
||||
CASE
|
||||
WHEN COUNT(CASE WHEN DATE(create_time) = CURDATE() - INTERVAL 1 DAY AND TIME(create_time) <= TIME(NOW()) THEN 1 END) = 0 THEN 0
|
||||
@@ -86,16 +94,16 @@
|
||||
COUNT(CASE WHEN DATE(create_time) = CURDATE() - INTERVAL 1 DAY AND TIME(create_time) <= TIME(NOW()) THEN 1 END)) /
|
||||
COUNT(CASE WHEN DATE(create_time) = CURDATE() - INTERVAL 1 DAY AND TIME(create_time) <= TIME(NOW()) THEN 1 END)
|
||||
END,
|
||||
2) AS growthRate
|
||||
2) AS pvGrowthRate
|
||||
FROM
|
||||
sys_log
|
||||
</select>
|
||||
|
||||
<!-- 获取IP统计数据 mysql版本-->
|
||||
<select id="getUvStats" resultType="com.youlai.boot.system.model.bo.VisitStatsBO" databaseId="mysql">
|
||||
<select id="getUvStats" resultType="com.youlai.boot.system.model.vo.VisitOverviewVO" databaseId="mysql">
|
||||
SELECT
|
||||
COUNT(DISTINCT CASE WHEN DATE(create_time) = CURDATE() THEN ip END) AS todayCount,
|
||||
COUNT(DISTINCT ip) AS totalCount,
|
||||
COUNT(DISTINCT CASE WHEN DATE(create_time) = CURDATE() THEN ip END) AS todayUvCount,
|
||||
COUNT(DISTINCT ip) AS totalUvCount,
|
||||
ROUND(
|
||||
CASE
|
||||
WHEN COUNT(DISTINCT CASE WHEN DATE(create_time) = CURDATE() - INTERVAL 1 DAY AND TIME(create_time) <= TIME(NOW()) THEN ip END) = 0 THEN 0
|
||||
@@ -104,9 +112,10 @@
|
||||
COUNT(DISTINCT CASE WHEN DATE(create_time) = CURDATE() - INTERVAL 1 DAY AND TIME(create_time) <= TIME(NOW()) THEN ip END)) /
|
||||
COUNT(DISTINCT CASE WHEN DATE(create_time) = CURDATE() - INTERVAL 1 DAY AND TIME(create_time) <= TIME(NOW()) THEN ip END)
|
||||
END,
|
||||
2) AS growthRate
|
||||
2) AS uvGrowthRate
|
||||
FROM
|
||||
sys_log
|
||||
</select>
|
||||
|
||||
|
||||
</mapper>
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
<mapper namespace="com.youlai.boot.system.mapper.NoticeMapper">
|
||||
|
||||
<!-- 获取通知公告分页列表 -->
|
||||
<select id="getNoticePage" resultType="com.youlai.boot.system.model.bo.NoticeBO">
|
||||
<select id="getNoticePage" resultType="com.youlai.boot.system.model.vo.NoticePageVO">
|
||||
SELECT
|
||||
t1.id,
|
||||
t1.title,
|
||||
@@ -42,7 +42,7 @@
|
||||
</select>
|
||||
|
||||
<!-- 获取通知公告详情 -->
|
||||
<select id="getNoticeDetail" resultType="com.youlai.boot.system.model.bo.NoticeBO">
|
||||
<select id="getNoticeDetail" resultType="com.youlai.boot.system.model.vo.NoticeDetailVO">
|
||||
SELECT
|
||||
t1.id,
|
||||
t1.title,
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
</select>
|
||||
|
||||
<!-- 权限和拥有权限的角色的映射 -->
|
||||
<resultMap id="PremRolesMap" type="com.youlai.boot.system.model.bo.RolePermsBO">
|
||||
<resultMap id="PremRolesMap" type="com.youlai.boot.system.model.dto.RolePermsDTO">
|
||||
<result property="roleCode" column="role_code"/>
|
||||
<collection property="perms" ofType="string" javaType="java.util.Set">
|
||||
<result column="perm"/>
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
<mapper namespace="com.youlai.boot.system.mapper.UserMapper">
|
||||
|
||||
<!-- 用户分页列表 mysql版本-->
|
||||
<select id="getUserPage" resultType="com.youlai.boot.system.model.bo.UserBO" databaseId="mysql">
|
||||
<select id="getUserPage" resultType="com.youlai.boot.system.model.vo.UserPageVO" databaseId="mysql">
|
||||
SELECT
|
||||
u.id,
|
||||
u.username,
|
||||
@@ -34,7 +34,7 @@
|
||||
INNER JOIN sys_role r ON sur.role_id = r.id
|
||||
WHERE
|
||||
sur.user_id = u.id
|
||||
AND r.code = '${@com.youlai.boot.common.constant.SystemConstants@ROOT_ROLE_CODE}'
|
||||
AND r.code = '${@com.youlai.boot.shared.constant.SystemConstants@ROOT_ROLE_CODE}'
|
||||
)
|
||||
<if test='queryParams.keywords!=null and queryParams.keywords.trim() neq ""'>
|
||||
AND (
|
||||
@@ -118,7 +118,7 @@
|
||||
</select>
|
||||
|
||||
<!-- 用户认证信息映射 -->
|
||||
<resultMap id="AuthCredentialsMap" type="com.youlai.boot.security.model.UserAuthInfo">
|
||||
<resultMap id="AuthCredentialsMap" type="com.youlai.boot.framework.security.model.UserAuthInfo">
|
||||
<id property="userId" column="userId" jdbcType="BIGINT"/>
|
||||
<result property="username" column="username" jdbcType="VARCHAR"/>
|
||||
<result property="password" column="password" jdbcType="VARCHAR"/>
|
||||
@@ -165,7 +165,7 @@
|
||||
</select>
|
||||
|
||||
<!-- 获取用户导出列表 -->
|
||||
<select id="listExportUsers" resultType="com.youlai.boot.system.model.dto.UserExportDTO">
|
||||
<select id="listExportUsers" resultType="com.youlai.boot.system.model.vo.UserExportVO">
|
||||
SELECT
|
||||
u.username,
|
||||
u.nickname,
|
||||
@@ -186,7 +186,7 @@
|
||||
INNER JOIN sys_role r ON sur.role_id = r.id
|
||||
WHERE
|
||||
sur.user_id = u.id
|
||||
AND r.code = '${@com.youlai.boot.common.constant.SystemConstants@ROOT_ROLE_CODE}'
|
||||
AND r.code = '${@com.youlai.boot.shared.constant.SystemConstants@ROOT_ROLE_CODE}'
|
||||
)
|
||||
<if test='keywords!=null and keywords.trim() neq ""'>
|
||||
AND (u.username LIKE CONCAT('%',#{keywords},'%')
|
||||
@@ -204,7 +204,7 @@
|
||||
</select>
|
||||
|
||||
<!-- 根据用户ID获取用户详情 mysql版本-->
|
||||
<select id="getUserProfile" resultType="com.youlai.boot.system.model.bo.UserBO" databaseId="mysql">
|
||||
<select id="getUserProfile" resultType="com.youlai.boot.system.model.vo.UserProfileVO" databaseId="mysql">
|
||||
SELECT
|
||||
u.id,
|
||||
u.username,
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
<mapper namespace="com.youlai.boot.system.mapper.UserSocialMapper">
|
||||
|
||||
<!-- 用户认证信息映射 -->
|
||||
<resultMap id="AuthCredentialsMap" type="com.youlai.boot.security.model.UserAuthInfo">
|
||||
<resultMap id="AuthCredentialsMap" type="com.youlai.boot.framework.security.model.UserAuthInfo">
|
||||
<id property="userId" column="userId" jdbcType="BIGINT"/>
|
||||
<result property="username" column="username" jdbcType="VARCHAR"/>
|
||||
<result property="nickname" column="nickname" jdbcType="VARCHAR"/>
|
||||
|
||||
Reference in New Issue
Block a user