From 19135908721264e4027d2b262a33b0fc1ee41da2 Mon Sep 17 00:00:00 2001
From: zhongrj <646384940@qq.com>
Date: Fri, 29 Mar 2024 18:24:03 +0800
Subject: [PATCH] 日志接口数据设置查询修改

---
 src/main/java/org/springblade/modules/system/mapper/LogApiMapper.java            |   15 +++
 src/main/java/org/springblade/modules/system/service/impl/LogServiceImpl.java    |   91 ++++++++++++++++++++++
 src/main/java/org/springblade/modules/system/service/ILogApiService.java         |   12 ++
 src/main/java/org/springblade/modules/system/service/impl/LogApiServiceImpl.java |   16 +++
 src/main/java/org/springblade/modules/system/controller/LogApiController.java    |   19 ++++
 src/main/java/org/springblade/modules/system/entity/LogApiExt.java               |   19 ++++
 src/main/java/org/springblade/modules/system/mapper/LogApiMapper.xml             |   37 ++++-----
 src/main/java/org/springblade/common/constant/CommonConstant.java                |    2 
 8 files changed, 178 insertions(+), 33 deletions(-)

diff --git a/src/main/java/org/springblade/common/constant/CommonConstant.java b/src/main/java/org/springblade/common/constant/CommonConstant.java
index 98a67e0..dd00a00 100644
--- a/src/main/java/org/springblade/common/constant/CommonConstant.java
+++ b/src/main/java/org/springblade/common/constant/CommonConstant.java
@@ -28,7 +28,7 @@
 	/**
 	 * app name
 	 */
-	String APPLICATION_NAME = AppConstant.APPLICATION_NAME_PREFIX + "api";
+	String APPLICATION_NAME = "jczz-" + "api";
 
 	/**
 	 * sword 系统名
diff --git a/src/main/java/org/springblade/modules/system/controller/LogApiController.java b/src/main/java/org/springblade/modules/system/controller/LogApiController.java
index b675f20..4f73838 100644
--- a/src/main/java/org/springblade/modules/system/controller/LogApiController.java
+++ b/src/main/java/org/springblade/modules/system/controller/LogApiController.java
@@ -26,6 +26,7 @@
 import org.springblade.core.tenant.annotation.NonDS;
 import org.springblade.core.tool.api.R;
 import org.springblade.modules.system.service.ILogApiService;
+import org.springblade.modules.system.entity.LogApiExt;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestParam;
@@ -52,7 +53,7 @@
 	 * 查询单条
 	 */
 	@GetMapping("/detail")
-	public R<LogApi> detail(LogApi log) {
+	public R<LogApi> detail(LogApiExt log) {
 		return R.data(logService.getOne(Condition.getQueryWrapper(log)));
 	}
 
@@ -60,8 +61,20 @@
 	 * 查询多条(分页)
 	 */
 	@GetMapping("/list")
-	public R<IPage<LogApi>> list(@ApiIgnore @RequestParam Map<String, Object> log, Query query) {
-		IPage<LogApi> pages = logService.page(Condition.getPage(query.setDescs("create_time")), Condition.getQueryWrapper(log, LogApi.class));
+	public R<IPage<LogApiExt>> list(@ApiIgnore @RequestParam Map<String, Object> log, Query query) {
+		IPage<LogApiExt> pages = logService.page(Condition.getPage(query.setDescs("create_time")), Condition.getQueryWrapper(log, LogApiExt.class));
+		return R.data(pages);
+	}
+
+	/**
+	 * 查询多条(自定义分页)
+	 * @param logApi
+	 * @param query
+	 * @return
+	 */
+	@GetMapping("/page")
+	public R<IPage<LogApiExt>> selectLogApiExtPage(LogApiExt logApi, Query query) {
+		IPage<LogApiExt> pages = logService.selectLogApiExtPage(Condition.getPage(query), logApi);
 		return R.data(pages);
 	}
 
diff --git a/src/main/java/org/springblade/modules/system/entity/LogApiExt.java b/src/main/java/org/springblade/modules/system/entity/LogApiExt.java
new file mode 100644
index 0000000..81cfecd
--- /dev/null
+++ b/src/main/java/org/springblade/modules/system/entity/LogApiExt.java
@@ -0,0 +1,19 @@
+package org.springblade.modules.system.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springblade.core.log.model.LogApi;
+
+@Data
+@TableName("blade_log_api")
+public class LogApiExt extends LogApi {
+
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * 应用id
+	 */
+	@ApiModelProperty(value = "应用id")
+	private String applicationId;
+}
diff --git a/src/main/java/org/springblade/modules/system/mapper/LogApiMapper.java b/src/main/java/org/springblade/modules/system/mapper/LogApiMapper.java
index 7010a9e..f6d0ed0 100644
--- a/src/main/java/org/springblade/modules/system/mapper/LogApiMapper.java
+++ b/src/main/java/org/springblade/modules/system/mapper/LogApiMapper.java
@@ -17,13 +17,24 @@
 package org.springblade.modules.system.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import org.springblade.core.log.model.LogApi;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.apache.ibatis.annotations.Param;
+import org.springblade.modules.system.entity.LogApiExt;
+
+import java.util.List;
 
 /**
  * Mapper 接口
  *
  * @author Chill
  */
-public interface LogApiMapper extends BaseMapper<LogApi> {
+public interface LogApiMapper extends BaseMapper<LogApiExt> {
 
+	/**
+	 * 查询多条(自定义分页)
+	 * @param logApi
+	 * @param logApi
+	 * @return
+	 */
+	List<LogApiExt> selectLogApiExtPage(IPage<LogApiExt> page,@Param("logApi") LogApiExt logApi);
 }
diff --git a/src/main/java/org/springblade/modules/system/mapper/LogApiMapper.xml b/src/main/java/org/springblade/modules/system/mapper/LogApiMapper.xml
index 39b6194..7dd7dd9 100644
--- a/src/main/java/org/springblade/modules/system/mapper/LogApiMapper.xml
+++ b/src/main/java/org/springblade/modules/system/mapper/LogApiMapper.xml
@@ -2,25 +2,22 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="org.springblade.modules.system.mapper.LogApiMapper">
 
-    <!-- 通用查询映射结果 -->
-    <resultMap id="logResultMap" type="org.springblade.core.log.model.LogApi">
-        <result column="id" property="id"/>
-        <result column="create_time" property="createTime"/>
-        <result column="service_id" property="serviceId"/>
-        <result column="server_host" property="serverHost"/>
-        <result column="server_ip" property="serverIp"/>
-        <result column="env" property="env"/>
-        <result column="type" property="type"/>
-        <result column="title" property="title"/>
-        <result column="method" property="method"/>
-        <result column="request_uri" property="requestUri"/>
-        <result column="user_agent" property="userAgent"/>
-        <result column="remote_ip" property="remoteIp"/>
-        <result column="method_class" property="methodClass"/>
-        <result column="method_name" property="methodName"/>
-        <result column="params" property="params"/>
-        <result column="time" property="time"/>
-        <result column="create_by" property="createBy"/>
-    </resultMap>
+    <!--自定义分页查询-->
+    <select id="selectLogApiExtPage" resultType="org.springblade.modules.system.entity.LogApiExt">
+        select * from blade_log_api where 1 = 1
+        <if test="logApi.type!=null and logApi.type!=''">
+            and type = #{logApi.type}
+        </if>
+        <if test="logApi.applicationId!=null and logApi.applicationId!=''">
+            and application_id = #{logApi.type}
+        </if>
+        <if test="logApi.serviceId!=null and logApi.serviceId!=''">
+            and service_id like concat('%',#{logApi.serviceId},'%')
+        </if>
+        <if test="logApi.serverHost!=null and logApi.serverHost!=''">
+            and server_host like concat('%',#{logApi.serverHost},'%')
+        </if>
+        order by id desc,create_time desc
+    </select>
 
 </mapper>
diff --git a/src/main/java/org/springblade/modules/system/service/ILogApiService.java b/src/main/java/org/springblade/modules/system/service/ILogApiService.java
index 2bb99cd..12d8236 100644
--- a/src/main/java/org/springblade/modules/system/service/ILogApiService.java
+++ b/src/main/java/org/springblade/modules/system/service/ILogApiService.java
@@ -16,14 +16,22 @@
  */
 package org.springblade.modules.system.service;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
-import org.springblade.core.log.model.LogApi;
+import org.springblade.modules.system.entity.LogApiExt;
 
 /**
  * 服务类
  *
  * @author Chill
  */
-public interface ILogApiService extends IService<LogApi> {
+public interface ILogApiService extends IService<LogApiExt> {
 
+	/**
+	 * 查询多条(自定义分页)
+	 * @param logApi
+	 * @param logApi
+	 * @return
+	 */
+	IPage<LogApiExt> selectLogApiExtPage(IPage<LogApiExt> page, LogApiExt logApi);
 }
diff --git a/src/main/java/org/springblade/modules/system/service/impl/LogApiServiceImpl.java b/src/main/java/org/springblade/modules/system/service/impl/LogApiServiceImpl.java
index d6d0fcb..d4092d5 100644
--- a/src/main/java/org/springblade/modules/system/service/impl/LogApiServiceImpl.java
+++ b/src/main/java/org/springblade/modules/system/service/impl/LogApiServiceImpl.java
@@ -16,10 +16,11 @@
  */
 package org.springblade.modules.system.service.impl;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import org.springblade.core.log.model.LogApi;
 import org.springblade.modules.system.mapper.LogApiMapper;
 import org.springblade.modules.system.service.ILogApiService;
+import org.springblade.modules.system.entity.LogApiExt;
 import org.springframework.stereotype.Service;
 
 /**
@@ -28,7 +29,16 @@
  * @author Chill
  */
 @Service
-public class LogApiServiceImpl extends ServiceImpl<LogApiMapper, LogApi> implements ILogApiService {
+public class LogApiServiceImpl extends ServiceImpl<LogApiMapper, LogApiExt> implements ILogApiService {
 
-
+	/**
+	 * 查询多条(自定义分页)
+	 * @param logApi
+	 * @param logApi
+	 * @return
+	 */
+	@Override
+	public IPage<LogApiExt> selectLogApiExtPage(IPage<LogApiExt> page, LogApiExt logApi) {
+		return page.setRecords(baseMapper.selectLogApiExtPage(page,logApi));
+	}
 }
diff --git a/src/main/java/org/springblade/modules/system/service/impl/LogServiceImpl.java b/src/main/java/org/springblade/modules/system/service/impl/LogServiceImpl.java
index 9c363fd..fb965f0 100644
--- a/src/main/java/org/springblade/modules/system/service/impl/LogServiceImpl.java
+++ b/src/main/java/org/springblade/modules/system/service/impl/LogServiceImpl.java
@@ -4,11 +4,22 @@
 import org.springblade.core.log.model.LogApi;
 import org.springblade.core.log.model.LogError;
 import org.springblade.core.log.model.LogUsual;
+import org.springblade.core.secure.exception.SecureException;
+import org.springblade.core.tool.utils.Charsets;
+import org.springblade.core.tool.utils.Func;
 import org.springblade.modules.system.service.ILogApiService;
 import org.springblade.modules.system.service.ILogErrorService;
 import org.springblade.modules.system.service.ILogService;
 import org.springblade.modules.system.service.ILogUsualService;
+import org.springblade.modules.system.entity.LogApiExt;
 import org.springframework.stereotype.Service;
+
+import javax.servlet.ServletRequestEvent;
+import javax.servlet.ServletRequestListener;
+import javax.servlet.http.HttpServletRequest;
+import java.io.UnsupportedEncodingException;
+import java.util.Base64;
+import java.util.Objects;
 
 /**
  * Created by Blade.
@@ -17,7 +28,19 @@
  */
 @Service
 @AllArgsConstructor
-public class LogServiceImpl implements ILogService {
+public class LogServiceImpl implements ILogService, ServletRequestListener {
+
+	private HttpServletRequest request = null;
+
+	@Override
+	public void requestInitialized(ServletRequestEvent sre) {
+		request = (HttpServletRequest) sre.getServletRequest();
+	}
+
+	@Override
+	public void requestDestroyed(ServletRequestEvent sre) {
+
+	}
 
 	private final ILogUsualService usualService;
 	private final ILogApiService apiService;
@@ -30,12 +53,76 @@
 
 	@Override
 	public Boolean saveApiLog(LogApi log) {
-		return apiService.save(log);
+		LogApiExt api = new LogApiExt();
+		try {
+			String[] tokens = extractAndDecodeHeader();
+			api.setApplicationId(tokens[0]);
+		} catch (UnsupportedEncodingException e) {
+			e.printStackTrace();
+		}
+		api.setTitle(log.getTitle());
+		api.setTime(log.getTime());
+		api.setTenantId(log.getTenantId());
+		api.setServiceId(log.getServiceId());
+		api.setServerIp(log.getServerIp());
+		api.setEnv(log.getEnv());
+		api.setServerHost(log.getServerHost());
+		api.setRemoteIp(log.getRemoteIp());
+		api.setRequestUri(log.getRequestUri());
+		api.setUserAgent(log.getUserAgent());
+		api.setMethod(log.getMethod());
+		api.setMethodName(log.getMethodName());
+		api.setMethodClass(log.getMethodClass());
+		api.setCreateTime(log.getCreateTime());
+		api.setCreateBy(log.getCreateBy());
+		if (log.getRequestUri().equals("/blade-auth/oauth/token")){
+			api.setType("1");
+		}else {
+			api.setType("2");
+		}
+		// 保存
+		return apiService.save(api);
 	}
+
+
 
 	@Override
 	public Boolean saveErrorLog(LogError log) {
 		return errorService.save(log);
 	}
 
+
+	/**
+	 * 解析请求头
+	 * @return
+	 */
+	public String[] extractAndDecodeHeader() throws UnsupportedEncodingException {
+		try {
+			String header = ((HttpServletRequest) Objects.requireNonNull(request)).getHeader("Authorization");
+			header = Func.toStr(header).replace("Basic%20", "Basic ");
+			if (!header.startsWith("Basic ")) {
+				throw new SecureException("未获取到请求头[Authorization]的信息");
+			} else {
+				byte[] base64Token = header.substring(6).getBytes(Charsets.UTF_8_NAME);
+
+				byte[] decoded;
+				try {
+					decoded = Base64.getDecoder().decode(base64Token);
+				} catch (IllegalArgumentException var5) {
+					throw new RuntimeException("客户端令牌解析失败");
+				}
+
+				String token = new String(decoded, Charsets.UTF_8_NAME);
+				int index = token.indexOf(":");
+				if (index == -1) {
+					throw new RuntimeException("客户端令牌不合法");
+				} else {
+					return new String[]{token.substring(0, index), token.substring(index + 1)};
+				}
+			}
+		} catch (Throwable var6) {
+			throw var6;
+		}
+	}
+
 }

--
Gitblit v1.9.3