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 = "获取")
@GetMapping
fun get(@Valid sysLogGetParam: SysLogGetParam): ResponseResult<PageVo<SysLogGetVo>> {
fun get(@Valid sysLogGetParam: SysLogGetParam?): ResponseResult<PageVo<SysLogGetVo>> {
return ResponseResult.success(
ResponseCode.DATABASE_SELECT_SUCCESS, data = SysLogConverter.sysLogPageToSysLogPageVo(
sysLogService.getPage(
sysLogGetParam.currentPage, sysLogGetParam.pageSize
)
sysLogService.getPage(sysLogGetParam)
)
)
}

View File

@@ -27,7 +27,8 @@ enum class ResponseCode(val code: Int) {
DATABASE_UPDATE_SUCCESS(BusinessCode.DATABASE, 20),
DATABASE_UPDATE_FILED(BusinessCode.DATABASE, 25),
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)
}

View File

@@ -6,6 +6,7 @@ import com.auth0.jwt.exceptions.TokenExpiredException
import org.slf4j.Logger
import org.slf4j.LoggerFactory
import org.springframework.http.converter.HttpMessageNotReadableException
import org.springframework.jdbc.BadSqlGrammarException
import org.springframework.security.authentication.BadCredentialsException
import org.springframework.security.authentication.InsufficientAuthenticationException
import org.springframework.security.authentication.InternalAuthenticationServiceException
@@ -70,6 +71,11 @@ class ExceptionHandler {
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 -> {
logger.error(e.localizedMessage, e)
ResponseResult.fail(ResponseCode.SYSTEM_ERROR, data = null)

View File

@@ -15,5 +15,5 @@ import org.apache.ibatis.annotations.Mapper
*/
@Mapper
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 = "获取系统日志请求参数")
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()

View File

@@ -3,6 +3,7 @@ package top.fatweb.api.service.system
import com.baomidou.mybatisplus.core.metadata.IPage
import com.baomidou.mybatisplus.extension.service.IService
import top.fatweb.api.entity.system.SysLog
import top.fatweb.api.param.system.SysLogGetParam
/**
* <p>
@@ -13,5 +14,5 @@ import top.fatweb.api.entity.system.SysLog
* @since 2023-10-18
*/
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 top.fatweb.api.entity.system.SysLog
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.util.StrUtil
/**
* <p>
@@ -19,10 +21,24 @@ import top.fatweb.api.service.system.ISysLogService
*/
@Service
class SysLogServiceImpl : ServiceImpl<SysLogMapper, SysLog>(), ISysLogService {
override fun getPage(page: Long, pageSize: Long): IPage<SysLog> {
val sysLogPage = Page<SysLog>(page, pageSize)
sysLogPage.addOrder(OrderItem.desc("start_time"))
override fun getPage(sysLogGetParam: SysLogGetParam?): IPage<SysLog> {
val sysLogPage = Page<SysLog>(sysLogGetParam?.currentPage ?: 1, sysLogGetParam?.pageSize ?: 20)
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
from t_sys_log
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>
<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.util.ByteUtil
import top.fatweb.api.util.JwtUtil
import top.fatweb.api.util.StrUtil
import kotlin.io.encoding.Base64
import kotlin.io.encoding.ExperimentalEncodingApi
@@ -51,4 +52,14 @@ class FatWebApiApplicationTests {
val bytes = avatar.createAsPngBytes(1232132134543L)
logger.info(Base64.encode(bytes))
}
@Test
fun upperToUnderLetterTest() {
assertEquals("create_time", StrUtil.upperToUnderLetter("createTime"))
}
@Test
fun underToUpperLetterTest() {
assertEquals("createTime", StrUtil.underToUpperLetter("create_time"))
}
}