Optimize SysLogController

This commit is contained in:
2023-11-08 18:18:48 +08:00
parent 34c831a138
commit 0ff2698f33
10 changed files with 121 additions and 30 deletions

View File

@@ -30,12 +30,10 @@ class SysLogController(
) { ) {
@Operation(summary = "获取") @Operation(summary = "获取")
@GetMapping @GetMapping
fun get(@Valid sysLogGetParam: SysLogGetParam): ResponseResult<PageVo<SysLogGetVo>> { fun get(@Valid sysLogGetParam: SysLogGetParam?): ResponseResult<PageVo<SysLogGetVo>> {
return ResponseResult.success( return ResponseResult.success(
ResponseCode.DATABASE_SELECT_SUCCESS, data = SysLogConverter.sysLogPageToSysLogPageVo( ResponseCode.DATABASE_SELECT_SUCCESS, data = SysLogConverter.sysLogPageToSysLogPageVo(
sysLogService.getPage( sysLogService.getPage(sysLogGetParam)
sysLogGetParam.currentPage, sysLogGetParam.pageSize
)
) )
) )
} }

View File

@@ -27,7 +27,8 @@ enum class ResponseCode(val code: Int) {
DATABASE_UPDATE_SUCCESS(BusinessCode.DATABASE, 20), DATABASE_UPDATE_SUCCESS(BusinessCode.DATABASE, 20),
DATABASE_UPDATE_FILED(BusinessCode.DATABASE, 25), DATABASE_UPDATE_FILED(BusinessCode.DATABASE, 25),
DATABASE_DELETE_SUCCESS(BusinessCode.DATABASE, 30), DATABASE_DELETE_SUCCESS(BusinessCode.DATABASE, 30),
DATABASE_DELETE_FILED(BusinessCode.DATABASE, 35); DATABASE_DELETE_FILED(BusinessCode.DATABASE, 35),
DATABASE_EXECUTE_ERROR(BusinessCode.DATABASE, 40);
constructor(businessCode: BusinessCode, code: Int) : this(businessCode.code * 100 + code) constructor(businessCode: BusinessCode, code: Int) : this(businessCode.code * 100 + code)
} }

View File

@@ -6,6 +6,7 @@ import com.auth0.jwt.exceptions.TokenExpiredException
import org.slf4j.Logger import org.slf4j.Logger
import org.slf4j.LoggerFactory import org.slf4j.LoggerFactory
import org.springframework.http.converter.HttpMessageNotReadableException import org.springframework.http.converter.HttpMessageNotReadableException
import org.springframework.jdbc.BadSqlGrammarException
import org.springframework.security.authentication.BadCredentialsException import org.springframework.security.authentication.BadCredentialsException
import org.springframework.security.authentication.InsufficientAuthenticationException import org.springframework.security.authentication.InsufficientAuthenticationException
import org.springframework.security.authentication.InternalAuthenticationServiceException import org.springframework.security.authentication.InternalAuthenticationServiceException
@@ -70,6 +71,11 @@ class ExceptionHandler {
ResponseResult.fail(ResponseCode.SYSTEM_TOKEN_HAS_EXPIRED, e.localizedMessage, null) ResponseResult.fail(ResponseCode.SYSTEM_TOKEN_HAS_EXPIRED, e.localizedMessage, null)
} }
is BadSqlGrammarException -> {
logger.debug(e.localizedMessage, e)
ResponseResult.fail(ResponseCode.DATABASE_EXECUTE_ERROR, "Incorrect SQL syntax", null)
}
else -> { else -> {
logger.error(e.localizedMessage, e) logger.error(e.localizedMessage, e)
ResponseResult.fail(ResponseCode.SYSTEM_ERROR, data = null) ResponseResult.fail(ResponseCode.SYSTEM_ERROR, data = null)

View File

@@ -15,5 +15,5 @@ import org.apache.ibatis.annotations.Mapper
*/ */
@Mapper @Mapper
interface SysLogMapper : BaseMapper<SysLog> { interface SysLogMapper : BaseMapper<SysLog> {
fun selectPage(page: IPage<SysLog>): IPage<SysLog> fun selectPage(page: IPage<SysLog>, logType: List<String>?, requestMethod: List<String>?): IPage<SysLog>
} }

View File

@@ -5,5 +5,19 @@ import top.fatweb.api.param.PageParam
@Schema(description = "获取系统日志请求参数") @Schema(description = "获取系统日志请求参数")
data class SysLogGetParam( data class SysLogGetParam(
val logType: String? = null @Schema(description = "排序字段", example = "id")
val sortField: String? = null,
@Schema(description = "排序方式", example = "desc", allowableValues = ["desc", "asc"])
val sortOrder: String? = null,
@Schema(description = "类型过滤(多个使用逗号分隔)", example = "INFO", allowableValues = ["INFO", "ERROR"])
val logType: String? = null,
@Schema(
description = "请求方式过滤(多个使用逗号分隔)",
example = "GET,POST",
allowableValues = ["GET", "POST", "PUT", "PATCH", "DELETE", "DELETE", "OPTIONS"]
)
val requestMethod: String? = null
) : PageParam() ) : PageParam()

View File

@@ -3,6 +3,7 @@ package top.fatweb.api.service.system
import com.baomidou.mybatisplus.core.metadata.IPage import com.baomidou.mybatisplus.core.metadata.IPage
import com.baomidou.mybatisplus.extension.service.IService import com.baomidou.mybatisplus.extension.service.IService
import top.fatweb.api.entity.system.SysLog import top.fatweb.api.entity.system.SysLog
import top.fatweb.api.param.system.SysLogGetParam
/** /**
* <p> * <p>
@@ -13,5 +14,5 @@ import top.fatweb.api.entity.system.SysLog
* @since 2023-10-18 * @since 2023-10-18
*/ */
interface ISysLogService : IService<SysLog> { interface ISysLogService : IService<SysLog> {
fun getPage(page: Long, pageSize: Long): IPage<SysLog> fun getPage(sysLogGetParam: SysLogGetParam?): IPage<SysLog>
} }

View File

@@ -7,7 +7,9 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl
import org.springframework.stereotype.Service import org.springframework.stereotype.Service
import top.fatweb.api.entity.system.SysLog import top.fatweb.api.entity.system.SysLog
import top.fatweb.api.mapper.system.SysLogMapper import top.fatweb.api.mapper.system.SysLogMapper
import top.fatweb.api.param.system.SysLogGetParam
import top.fatweb.api.service.system.ISysLogService import top.fatweb.api.service.system.ISysLogService
import top.fatweb.api.util.StrUtil
/** /**
* <p> * <p>
@@ -19,10 +21,24 @@ import top.fatweb.api.service.system.ISysLogService
*/ */
@Service @Service
class SysLogServiceImpl : ServiceImpl<SysLogMapper, SysLog>(), ISysLogService { class SysLogServiceImpl : ServiceImpl<SysLogMapper, SysLog>(), ISysLogService {
override fun getPage(page: Long, pageSize: Long): IPage<SysLog> { override fun getPage(sysLogGetParam: SysLogGetParam?): IPage<SysLog> {
val sysLogPage = Page<SysLog>(page, pageSize) val sysLogPage = Page<SysLog>(sysLogGetParam?.currentPage ?: 1, sysLogGetParam?.pageSize ?: 20)
sysLogPage.addOrder(OrderItem.desc("start_time"))
return baseMapper.selectPage(sysLogPage) if (sysLogGetParam?.sortField == null && sysLogGetParam?.sortOrder == null) {
sysLogPage.addOrder(OrderItem.desc("start_time"))
} else {
sysLogPage.addOrder(
if (sysLogGetParam.sortOrder?.startsWith(
"desc", true
) == true
) OrderItem.desc(StrUtil.upperToUnderLetter(sysLogGetParam.sortField)) else OrderItem.asc(
StrUtil.upperToUnderLetter(
sysLogGetParam.sortField
)
)
)
}
return baseMapper.selectPage(sysLogPage, sysLogGetParam?.logType?.split(","), sysLogGetParam?.requestMethod?.split(","))
} }
} }

View File

@@ -0,0 +1,35 @@
package top.fatweb.api.util
import java.util.regex.Pattern
object StrUtil {
fun upperToUnderLetter(str: String?): String {
str ?: let { return "" }
val matcher = Pattern.compile("([A-Z])").matcher(str)
val stringBuilder = StringBuilder()
while (matcher.find()) {
matcher.appendReplacement(stringBuilder, "_" + matcher.group().lowercase())
}
matcher.appendTail(stringBuilder)
return stringBuilder.toString()
}
fun underToUpperLetter(str: String?): String {
str ?: let { return "" }
val matcher = Pattern.compile("(_)([a-z])").matcher(str)
val stringBuilder = StringBuilder()
while (matcher.find()) {
matcher.appendReplacement(stringBuilder, matcher.group().replace("_", "").uppercase())
}
matcher.appendTail(stringBuilder)
return stringBuilder.toString()
}
}

View File

@@ -20,7 +20,16 @@
t_user.username as sys_log_operate_username t_user.username as sys_log_operate_username
from t_sys_log from t_sys_log
left join t_user on t_user.id = t_sys_log.operate_user_id left join t_user on t_user.id = t_sys_log.operate_user_id
order by create_time desc <where>
<foreach collection="logType" item="item" index="index" open="and t_sys_log.log_type in (" separator=","
close=")" nullable="true">
#{item}
</foreach>
<foreach collection="requestMethod" item="item" index="index" open="and t_sys_log.request_method in ("
separator="," close=")" nullable="true">
#{item}
</foreach>
</where>
</select> </select>
<resultMap id="sysLogMap" type="sysLog"> <resultMap id="sysLogMap" type="sysLog">

View File

@@ -10,6 +10,7 @@ import org.springframework.test.context.junit.jupiter.SpringExtension
import top.fatweb.api.properties.SecurityProperties import top.fatweb.api.properties.SecurityProperties
import top.fatweb.api.util.ByteUtil import top.fatweb.api.util.ByteUtil
import top.fatweb.api.util.JwtUtil import top.fatweb.api.util.JwtUtil
import top.fatweb.api.util.StrUtil
import kotlin.io.encoding.Base64 import kotlin.io.encoding.Base64
import kotlin.io.encoding.ExperimentalEncodingApi import kotlin.io.encoding.ExperimentalEncodingApi
@@ -51,4 +52,14 @@ class FatWebApiApplicationTests {
val bytes = avatar.createAsPngBytes(1232132134543L) val bytes = avatar.createAsPngBytes(1232132134543L)
logger.info(Base64.encode(bytes)) logger.info(Base64.encode(bytes))
} }
@Test
fun upperToUnderLetterTest() {
assertEquals("create_time", StrUtil.upperToUnderLetter("createTime"))
}
@Test
fun underToUpperLetterTest() {
assertEquals("createTime", StrUtil.underToUpperLetter("create_time"))
}
} }