diff --git a/common/mall-spring-boot-starter-web/pom.xml b/common/mall-spring-boot-starter-web/pom.xml
new file mode 100644
index 000000000..67d81a9d1
--- /dev/null
+++ b/common/mall-spring-boot-starter-web/pom.xml
@@ -0,0 +1,29 @@
+
+
+
+ common
+ cn.iocoder.mall
+ 1.0-SNAPSHOT
+
+ 4.0.0
+
+ mall-spring-boot-starter-web
+
+
+
+
+ org.springframework.boot
+ spring-boot-configuration-processor
+ true
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+
+
diff --git a/common/mall-spring-boot-starter-web/src/main/java/cn/iocoder/mall/web/handler/GlobalExceptionHandler.java b/common/mall-spring-boot-starter-web/src/main/java/cn/iocoder/mall/web/handler/GlobalExceptionHandler.java
new file mode 100644
index 000000000..17f1f5c5d
--- /dev/null
+++ b/common/mall-spring-boot-starter-web/src/main/java/cn/iocoder/mall/web/handler/GlobalExceptionHandler.java
@@ -0,0 +1,131 @@
+package cn.iocoder.mall.web.handler;
+
+import cn.iocoder.common.framework.constant.SysErrorCodeEnum;
+import cn.iocoder.common.framework.exception.ServiceException;
+import cn.iocoder.common.framework.util.ExceptionUtil;
+import cn.iocoder.common.framework.util.HttpUtil;
+import cn.iocoder.common.framework.util.MallUtil;
+import cn.iocoder.common.framework.vo.CommonResult;
+import cn.iocoder.mall.system.api.SystemLogService;
+import cn.iocoder.mall.system.api.dto.systemlog.AccessLogAddDTO;
+import cn.iocoder.mall.system.api.dto.systemlog.ExceptionLogAddDTO;
+import com.alibaba.fastjson.JSON;
+import io.micrometer.core.instrument.Counter;
+import io.micrometer.core.instrument.Metrics;
+import org.apache.commons.lang3.exception.ExceptionUtils;
+import org.apache.dubbo.config.annotation.Reference;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.util.Assert;
+import org.springframework.web.bind.MissingServletRequestParameterException;
+import org.springframework.web.bind.annotation.ControllerAdvice;
+import org.springframework.web.bind.annotation.ExceptionHandler;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.validation.ConstraintViolationException;
+import java.util.Date;
+
+@ControllerAdvice
+public class GlobalExceptionHandler {
+
+// /**
+// * 异常总数 Metrics
+// */
+// private static final Counter EXCEPTION_COUNTER = Metrics.counter("mall.exception.total");
+
+ private Logger logger = LoggerFactory.getLogger(getClass());
+
+ @Value("${spring.application.name}")
+ private String applicationName;
+
+ @Reference(validation = "true", version = "${dubbo.consumer.AdminAccessLogService.version:1.0.0}")
+ private SystemLogService systemLogService;
+
+ // 逻辑异常
+ @ResponseBody
+ @ExceptionHandler(value = ServiceException.class)
+ public CommonResult serviceExceptionHandler(HttpServletRequest req, ServiceException ex) {
+ logger.debug("[serviceExceptionHandler]", ex);
+ return CommonResult.error(ex.getCode(), ex.getMessage());
+ }
+
+ // Spring MVC 参数不正确
+ @ResponseBody
+ @ExceptionHandler(value = MissingServletRequestParameterException.class)
+ public CommonResult missingServletRequestParameterExceptionHandler(HttpServletRequest req, MissingServletRequestParameterException ex) {
+ logger.warn("[missingServletRequestParameterExceptionHandler]", ex);
+ return CommonResult.error(SysErrorCodeEnum.MISSING_REQUEST_PARAM_ERROR.getCode(), SysErrorCodeEnum.MISSING_REQUEST_PARAM_ERROR.getMessage() + ":" + ex.getMessage());
+ }
+
+ @ResponseBody
+ @ExceptionHandler(value = ConstraintViolationException.class)
+ public CommonResult constraintViolationExceptionHandler(HttpServletRequest req, ConstraintViolationException ex) {
+ logger.info("[constraintViolationExceptionHandler]", ex);
+ // TODO 芋艿,后续要想一个更好的方式。
+ // 拼接详细报错
+ StringBuilder detailMessage = new StringBuilder("\n\n详细错误如下:");
+ ex.getConstraintViolations().forEach(constraintViolation -> detailMessage.append("\n").append(constraintViolation.getMessage()));
+ return CommonResult.error(SysErrorCodeEnum.VALIDATION_REQUEST_PARAM_ERROR.getCode(), SysErrorCodeEnum.VALIDATION_REQUEST_PARAM_ERROR.getMessage()
+ + detailMessage.toString());
+ }
+
+ // TODO 芋艿,应该还有其它的异常,需要进行翻译
+ @ResponseBody
+ @ExceptionHandler(value = Exception.class)
+ public CommonResult exceptionHandler(HttpServletRequest req, Exception e) {
+ logger.error("[exceptionHandler]", e);
+ // 插入异常日志
+ ExceptionLogAddDTO exceptionLog = new ExceptionLogAddDTO();
+ try {
+ // 增加异常计数 metrics
+ EXCEPTION_COUNTER.increment();
+ // 初始化 exceptionLog
+ initExceptionLog(exceptionLog, req, e);
+ // 执行插入 exceptionLog
+ addExceptionLog(exceptionLog);
+ } catch (Throwable th) {
+ logger.error("[exceptionHandler][插入访问日志({}) 发生异常({})", JSON.toJSONString(exceptionLog), ExceptionUtils.getRootCauseMessage(th));
+ }
+ // 返回 ERROR CommonResult
+ return CommonResult.error(SysErrorCodeEnum.SYS_ERROR.getCode(), SysErrorCodeEnum.SYS_ERROR.getMessage());
+ }
+
+ private void initExceptionLog(ExceptionLogAddDTO exceptionLog, HttpServletRequest request, Exception e) {
+ // 设置用户编号
+ exceptionLog.setUserId(MallUtil.getUserId(request));
+ if (exceptionLog.getUserId() == null) {
+ exceptionLog.setUserId(AccessLogAddDTO.USER_ID_NULL);
+ }
+ exceptionLog.setUserType(MallUtil.getUserType(request));
+ // 设置异常字段
+ exceptionLog.setExceptionName(e.getClass().getName());
+ exceptionLog.setExceptionMessage(ExceptionUtil.getMessage(e));
+ exceptionLog.setExceptionRootCauseMessage(ExceptionUtil.getRootCauseMessage(e));
+ exceptionLog.setExceptionStackTrace(ExceptionUtil.getStackTrace(e));
+ StackTraceElement[] stackTraceElements = e.getStackTrace();
+ Assert.notEmpty(stackTraceElements, "异常 stackTraceElements 不能为空");
+ StackTraceElement stackTraceElement = stackTraceElements[0];
+ exceptionLog.setExceptionClassName(stackTraceElement.getClassName());
+ exceptionLog.setExceptionFileName(stackTraceElement.getFileName());
+ exceptionLog.setExceptionMethodName(stackTraceElement.getMethodName());
+ exceptionLog.setExceptionLineNumber(stackTraceElement.getLineNumber());
+ // 设置其它字段
+ exceptionLog.setTraceId(MallUtil.getTraceId())
+ .setApplicationName(applicationName)
+ .setUri(request.getRequestURI()) // TODO 提升:如果想要优化,可以使用 Swagger 的 @ApiOperation 注解。
+ .setQueryString(HttpUtil.buildQueryString(request))
+ .setMethod(request.getMethod())
+ .setUserAgent(HttpUtil.getUserAgent(request))
+ .setIp(HttpUtil.getIp(request))
+ .setExceptionTime(new Date());
+ }
+
+ @Async
+ public void addExceptionLog(ExceptionLogAddDTO exceptionLog) {
+ systemLogService.addExceptionLog(exceptionLog);
+ }
+
+}
diff --git a/common/mall-spring-boot-starter-web/src/main/java/cn/iocoder/mall/web/handler/GlobalResponseBodyHandler.java b/common/mall-spring-boot-starter-web/src/main/java/cn/iocoder/mall/web/handler/GlobalResponseBodyHandler.java
new file mode 100644
index 000000000..5e5c299d6
--- /dev/null
+++ b/common/mall-spring-boot-starter-web/src/main/java/cn/iocoder/mall/web/handler/GlobalResponseBodyHandler.java
@@ -0,0 +1,31 @@
+package cn.iocoder.mall.web.handler;
+
+import cn.iocoder.common.framework.util.MallUtil;
+import cn.iocoder.common.framework.vo.CommonResult;
+import org.springframework.core.MethodParameter;
+import org.springframework.http.MediaType;
+import org.springframework.http.server.ServerHttpRequest;
+import org.springframework.http.server.ServerHttpResponse;
+import org.springframework.http.server.ServletServerHttpRequest;
+import org.springframework.web.bind.annotation.ControllerAdvice;
+import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice;
+
+@ControllerAdvice
+public class GlobalResponseBodyHandler implements ResponseBodyAdvice {
+
+ @Override
+ public boolean supports(MethodParameter returnType, Class converterType) {
+ if (returnType.getMethod() == null) {
+ return false;
+ }
+ return returnType.getMethod().getReturnType() == CommonResult.class;
+ }
+
+ @Override
+ public Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType, Class selectedConverterType,
+ ServerHttpRequest request, ServerHttpResponse response) {
+ MallUtil.setCommonResult(((ServletServerHttpRequest) request).getServletRequest(), (CommonResult) body);
+ return body;
+ }
+
+}
diff --git a/common/mall-spring-boot-starter-web/src/main/java/cn/iocoder/mall/web/interceptor/AccessLogInterceptor.java b/common/mall-spring-boot-starter-web/src/main/java/cn/iocoder/mall/web/interceptor/AccessLogInterceptor.java
new file mode 100644
index 000000000..82157c8d2
--- /dev/null
+++ b/common/mall-spring-boot-starter-web/src/main/java/cn/iocoder/mall/web/interceptor/AccessLogInterceptor.java
@@ -0,0 +1,102 @@
+package cn.iocoder.mall.web.interceptor;
+
+import cn.iocoder.common.framework.util.HttpUtil;
+import cn.iocoder.common.framework.util.MallUtil;
+import cn.iocoder.common.framework.vo.CommonResult;
+import cn.iocoder.mall.system.api.SystemLogService;
+import cn.iocoder.mall.system.api.dto.systemlog.AccessLogAddDTO;
+import com.alibaba.fastjson.JSON;
+import org.apache.commons.lang3.exception.ExceptionUtils;
+import org.apache.dubbo.config.annotation.Reference;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.stereotype.Component;
+import org.springframework.util.Assert;
+import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.Date;
+
+/**
+ * 访问日志拦截器
+ */
+@Component
+public class AccessLogInterceptor extends HandlerInterceptorAdapter {
+
+ private Logger logger = LoggerFactory.getLogger(getClass());
+
+ /**
+ * 开始时间
+ */
+ private static final ThreadLocal START_TIME = new ThreadLocal<>();
+
+ @Reference(validation = "true", version = "${dubbo.consumer.AdminAccessLogService.version:1.0.0}")
+ private SystemLogService systemAccessLogService;
+
+ @Value("${spring.application.name}")
+ private String applicationName;
+
+ @Override
+ public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
+ // 记录当前时间
+ START_TIME.set(new Date());
+ return true;
+ }
+
+ @Override
+ public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
+ AccessLogAddDTO accessLog = new AccessLogAddDTO();
+ try {
+ // 初始化 accessLog
+ initAccessLog(accessLog, request);
+ // 执行插入 accessLog
+ addAccessLog(accessLog);
+ // TODO 提升:暂时不考虑 ELK 的方案。而是基于 MySQL 存储。如果访问日志比较多,需要定期归档。
+ } catch (Throwable th) {
+ logger.error("[afterCompletion][插入访问日志({}) 发生异常({})", JSON.toJSONString(accessLog), ExceptionUtils.getRootCauseMessage(th));
+ } finally {
+ clear();
+ }
+ }
+
+ private void initAccessLog(AccessLogAddDTO accessLog, HttpServletRequest request) {
+ // 设置用户编号
+ accessLog.setUserId(MallUtil.getUserId(request));
+ if (accessLog.getUserId() == null) {
+ accessLog.setUserId(AccessLogAddDTO.USER_ID_NULL);
+ }
+ accessLog.setUserType(MallUtil.getUserType(request));
+ // 设置访问结果
+ CommonResult result = MallUtil.getCommonResult(request);
+ Assert.isTrue(result != null, "result 必须非空");
+ accessLog.setErrorCode(result.getCode())
+ .setErrorMessage(result.getMessage());
+ // 设置其它字段
+ accessLog.setTraceId(MallUtil.getTraceId())
+ .setApplicationName(applicationName)
+ .setUri(request.getRequestURI()) // TODO 提升:如果想要优化,可以使用 Swagger 的 @ApiOperation 注解。
+ .setQueryString(HttpUtil.buildQueryString(request))
+ .setMethod(request.getMethod())
+ .setUserAgent(HttpUtil.getUserAgent(request))
+ .setIp(HttpUtil.getIp(request))
+ .setStartTime(START_TIME.get())
+ .setResponseTime((int) (System.currentTimeMillis() - accessLog.getStartTime().getTime())); // 默认响应时间设为 0
+ }
+
+ @Async // 异步入库
+ public void addAccessLog(AccessLogAddDTO accessLog) {
+ try {
+ systemAccessLogService.addAccessLog(accessLog);
+ } catch (Throwable th) {
+ logger.error("[addAccessLog][插入访问日志({}) 发生异常({})", JSON.toJSONString(accessLog), ExceptionUtils.getRootCauseMessage(th));
+ }
+ }
+
+ private static void clear() {
+ START_TIME.remove();
+ }
+
+}
diff --git a/common/mall-spring-boot-starter-web/src/main/java/cn/iocoder/mall/web/package-info.java b/common/mall-spring-boot-starter-web/src/main/java/cn/iocoder/mall/web/package-info.java
new file mode 100644
index 000000000..91d892c18
--- /dev/null
+++ b/common/mall-spring-boot-starter-web/src/main/java/cn/iocoder/mall/web/package-info.java
@@ -0,0 +1 @@
+package cn.iocoder.mall.web;
diff --git a/common/pom.xml b/common/pom.xml
index cdbe831b2..b99de5b8d 100644
--- a/common/pom.xml
+++ b/common/pom.xml
@@ -16,6 +16,7 @@
mall-spring-boot
common-dependencies
mall-spring-boot-starter-swagger
+ mall-spring-boot-starter-web
diff --git a/system/system-application/pom.xml b/system/system-application/pom.xml
index 631757bc5..f46f0ed7d 100644
--- a/system/system-application/pom.xml
+++ b/system/system-application/pom.xml
@@ -18,6 +18,11 @@
system-rest
1.0-SNAPSHOT
+
+ cn.iocoder.mall
+ system-rpc
+ 1.0-SNAPSHOT
+
diff --git a/system/system-application/src/main/java/cn/iocoder/mall/system/application/SystemApplication.java b/system/system-application/src/main/java/cn/iocoder/mall/system/application/SystemApplication.java
index 6463929b5..0385ef8a3 100644
--- a/system/system-application/src/main/java/cn/iocoder/mall/system/application/SystemApplication.java
+++ b/system/system-application/src/main/java/cn/iocoder/mall/system/application/SystemApplication.java
@@ -11,7 +11,7 @@ public class SystemApplication {
* 设置需要读取的配置文件的名字。
* 基于 {@link org.springframework.boot.context.config.ConfigFileApplicationListener#CONFIG_NAME_PROPERTY} 实现。
*/
- private static final String CONFIG_NAME_VALUE = "biz,rest,application";
+ private static final String CONFIG_NAME_VALUE = "biz,rest,rpc,application";
public static void main(String[] args) {
// 设置环境变量
diff --git a/system/system-application/src/main/resources/application.yaml b/system/system-application/src/main/resources/application.yaml
index 65ece6198..c8cf31ac4 100644
--- a/system/system-application/src/main/resources/application.yaml
+++ b/system/system-application/src/main/resources/application.yaml
@@ -1,3 +1,7 @@
spring:
+ # Application 的配置项
application:
name: admin-application
+ # Profile 的配置项
+ profiles:
+ active: test
diff --git a/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/bo/package-info.java b/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/bo/package-info.java
deleted file mode 100644
index ef2a840a2..000000000
--- a/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/bo/package-info.java
+++ /dev/null
@@ -1 +0,0 @@
-package cn.iocoder.mall.system.biz.bo;
diff --git a/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/convert/AccountConvert.java b/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/convert/account/AccountConvert.java
similarity index 90%
rename from system/system-biz/src/main/java/cn/iocoder/mall/system/biz/convert/AccountConvert.java
rename to system/system-biz/src/main/java/cn/iocoder/mall/system/biz/convert/account/AccountConvert.java
index d1f249bdc..619779537 100644
--- a/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/convert/AccountConvert.java
+++ b/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/convert/account/AccountConvert.java
@@ -1,4 +1,4 @@
-package cn.iocoder.mall.system.biz.convert;
+package cn.iocoder.mall.system.biz.convert.account;
import cn.iocoder.mall.system.biz.bo.account.AccountBO;
import cn.iocoder.mall.system.biz.dataobject.account.AccountDO;
diff --git a/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/convert/AdminConvert.java b/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/convert/admin/AdminConvert.java
similarity index 86%
rename from system/system-biz/src/main/java/cn/iocoder/mall/system/biz/convert/AdminConvert.java
rename to system/system-biz/src/main/java/cn/iocoder/mall/system/biz/convert/admin/AdminConvert.java
index d3e162d01..b176b07a6 100644
--- a/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/convert/AdminConvert.java
+++ b/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/convert/admin/AdminConvert.java
@@ -1,4 +1,4 @@
-package cn.iocoder.mall.system.biz.convert;
+package cn.iocoder.mall.system.biz.convert.admin;
import cn.iocoder.mall.system.biz.bo.admin.AdminBO;
import cn.iocoder.mall.system.biz.dataobject.admin.AdminDO;
diff --git a/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/convert/OAuth2Convert.java b/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/convert/oauth2/OAuth2Convert.java
similarity index 88%
rename from system/system-biz/src/main/java/cn/iocoder/mall/system/biz/convert/OAuth2Convert.java
rename to system/system-biz/src/main/java/cn/iocoder/mall/system/biz/convert/oauth2/OAuth2Convert.java
index 0fdf60483..1e5142a51 100644
--- a/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/convert/OAuth2Convert.java
+++ b/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/convert/oauth2/OAuth2Convert.java
@@ -1,4 +1,4 @@
-package cn.iocoder.mall.system.biz.convert;
+package cn.iocoder.mall.system.biz.convert.oauth2;
import cn.iocoder.mall.system.biz.bo.ouath2.OAuth2AccessTokenBO;
import cn.iocoder.mall.system.biz.dataobject.oauth2.OAuth2AccessTokenDO;
diff --git a/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/convert/systemlog/SystemLogConvert.java b/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/convert/systemlog/SystemLogConvert.java
new file mode 100644
index 000000000..c333cbdcc
--- /dev/null
+++ b/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/convert/systemlog/SystemLogConvert.java
@@ -0,0 +1,15 @@
+package cn.iocoder.mall.system.biz.convert.systemlog;
+
+import cn.iocoder.mall.system.biz.dataobject.system.AccessLogDO;
+import cn.iocoder.mall.system.biz.dto.system.AccessLogAddDTO;
+import org.mapstruct.Mapper;
+import org.mapstruct.factory.Mappers;
+
+@Mapper
+public interface SystemLogConvert {
+
+ SystemLogConvert INSTANCE = Mappers.getMapper(SystemLogConvert.class);
+
+ AccessLogDO convert(AccessLogAddDTO accessLogAddDTO);
+
+}
diff --git a/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/convert/UserConvert.java b/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/convert/user/UserConvert.java
similarity index 93%
rename from system/system-biz/src/main/java/cn/iocoder/mall/system/biz/convert/UserConvert.java
rename to system/system-biz/src/main/java/cn/iocoder/mall/system/biz/convert/user/UserConvert.java
index 5e9874ffd..de98bfe38 100644
--- a/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/convert/UserConvert.java
+++ b/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/convert/user/UserConvert.java
@@ -1,4 +1,4 @@
-package cn.iocoder.mall.system.biz.convert;
+package cn.iocoder.mall.system.biz.convert.user;
import cn.iocoder.mall.system.biz.bo.ouath2.OAuth2AccessTokenBO;
import cn.iocoder.mall.system.biz.bo.user.UserAuthenticateBO;
diff --git a/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/dao/system/AccessLogMapper.java b/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/dao/system/AccessLogMapper.java
new file mode 100644
index 000000000..01e88226d
--- /dev/null
+++ b/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/dao/system/AccessLogMapper.java
@@ -0,0 +1,15 @@
+package cn.iocoder.mall.system.biz.dao.system;
+
+import cn.iocoder.mall.system.biz.dataobject.system.AccessLogDO;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public interface AccessLogMapper extends BaseMapper {
+
+// default IPage selectPage(AccessLogPageDTO accessLogPageDTO) {
+// return selectPage(new Page<>(accessLogPageDTO.getPageNo(), accessLogPageDTO.getPageSize()),
+// new QueryWrapperX().eqIfPresent("user_id", accessLogPageDTO.getUserId()));
+// }
+
+}
diff --git a/system/system-service-impl/src/main/java/cn/iocoder/mall/admin/dataobject/AccessLogDO.java b/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/dataobject/system/AccessLogDO.java
similarity index 81%
rename from system/system-service-impl/src/main/java/cn/iocoder/mall/admin/dataobject/AccessLogDO.java
rename to system/system-biz/src/main/java/cn/iocoder/mall/system/biz/dataobject/system/AccessLogDO.java
index 5447b0862..b6ed5d3f0 100644
--- a/system/system-service-impl/src/main/java/cn/iocoder/mall/admin/dataobject/AccessLogDO.java
+++ b/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/dataobject/system/AccessLogDO.java
@@ -1,10 +1,10 @@
-package cn.iocoder.mall.admin.dataobject;
+package cn.iocoder.mall.system.biz.dataobject.system;
import cn.iocoder.common.framework.dataobject.BaseDO;
import cn.iocoder.common.framework.vo.CommonResult;
-import cn.iocoder.mall.system.api.dto.systemlog.AccessLogAddDTO;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
+import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.util.Date;
@@ -13,10 +13,16 @@ import java.util.Date;
* 访问日志 DO
*/
@Data
+@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
@TableName("access_log")
public class AccessLogDO extends BaseDO {
+ /**
+ * 账号编号 - 空
+ */
+ public static final Integer ACCOUNT_ID_NULL = 0;
+
/**
* 编号
*/
@@ -28,11 +34,11 @@ public class AccessLogDO extends BaseDO {
*/
private String traceId;
/**
- * 用户编号.
+ * 账号编号
*
- * 当管理员为空时,该值为 {@link AccessLogAddDTO#USER_ID_NULL}
+ * 空值 {@link #ACCOUNT_ID_NULL}
*/
- private Integer userId;
+ private Integer accountId;
/**
* 用户类型
*/
@@ -40,7 +46,7 @@ public class AccessLogDO extends BaseDO {
/**
* 应用名
*
- * 目前读取 spring.application.name
+ * 目前读取 `spring.application.name` 配置项
*/
private String applicationName;
/**
diff --git a/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/dto/system/AccessLogAddDTO.java b/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/dto/system/AccessLogAddDTO.java
new file mode 100644
index 000000000..44582399c
--- /dev/null
+++ b/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/dto/system/AccessLogAddDTO.java
@@ -0,0 +1,45 @@
+package cn.iocoder.mall.system.biz.dto.system;
+
+import javax.validation.constraints.NotNull;
+import java.util.Date;
+
+/**
+ * 访问日志添加 DTO
+ */
+public class AccessLogAddDTO {
+
+ /**
+ * 用户编号 - 空
+ */
+ public static final Integer ACCOUNT_ID_NULL = 0;
+
+ @NotNull(message = "链路追踪编号不能为空")
+ private String traceId;
+ /**
+ * 账号编号
+ */
+ private Integer accountId;
+ @NotNull(message = "应用名不能为空")
+ private String applicationName;
+ @NotNull(message = "访问地址不能为空")
+ private String uri;
+ @NotNull(message = "请求参数不能为空")
+ private String queryString;
+ @NotNull(message = "http 请求方法不能为空")
+ private String method;
+ @NotNull(message = "User-Agent 不能为空")
+ private String userAgent;
+ @NotNull(message = "ip 不能为空")
+ private String ip;
+ @NotNull(message = "请求时间不能为空")
+ private Date startTime;
+ @NotNull(message = "响应时长不能为空")
+ private Integer responseTime;
+ @NotNull(message = "错误码不能为空")
+ private Integer errorCode;
+ /**
+ * 错误提示
+ */
+ private String errorMessage;
+
+}
diff --git a/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/service/account/impl/AccountServiceImpl.java b/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/service/account/AccountServiceImpl.java
similarity index 93%
rename from system/system-biz/src/main/java/cn/iocoder/mall/system/biz/service/account/impl/AccountServiceImpl.java
rename to system/system-biz/src/main/java/cn/iocoder/mall/system/biz/service/account/AccountServiceImpl.java
index f4dfbf66d..4ca97697d 100644
--- a/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/service/account/impl/AccountServiceImpl.java
+++ b/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/service/account/AccountServiceImpl.java
@@ -1,8 +1,8 @@
-package cn.iocoder.mall.system.biz.service.account.impl;
+package cn.iocoder.mall.system.biz.service.account;
import cn.iocoder.common.framework.constant.CommonStatusEnum;
import cn.iocoder.mall.system.biz.bo.account.AccountBO;
-import cn.iocoder.mall.system.biz.convert.AccountConvert;
+import cn.iocoder.mall.system.biz.convert.account.AccountConvert;
import cn.iocoder.mall.system.biz.dao.account.AccountMapper;
import cn.iocoder.mall.system.biz.dataobject.account.AccountDO;
import cn.iocoder.mall.system.biz.dto.account.AccountCreateDTO;
diff --git a/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/service/admin/impl/AdminServiceImpl.java b/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/service/admin/AdminServiceImpl.java
similarity index 84%
rename from system/system-biz/src/main/java/cn/iocoder/mall/system/biz/service/admin/impl/AdminServiceImpl.java
rename to system/system-biz/src/main/java/cn/iocoder/mall/system/biz/service/admin/AdminServiceImpl.java
index f2abd65d9..41fc442ca 100644
--- a/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/service/admin/impl/AdminServiceImpl.java
+++ b/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/service/admin/AdminServiceImpl.java
@@ -1,7 +1,7 @@
-package cn.iocoder.mall.system.biz.service.admin.impl;
+package cn.iocoder.mall.system.biz.service.admin;
import cn.iocoder.mall.system.biz.bo.admin.AdminBO;
-import cn.iocoder.mall.system.biz.convert.AdminConvert;
+import cn.iocoder.mall.system.biz.convert.admin.AdminConvert;
import cn.iocoder.mall.system.biz.dao.admin.AdminMapper;
import cn.iocoder.mall.system.biz.dataobject.admin.AdminDO;
import cn.iocoder.mall.system.biz.service.admin.AdminService;
diff --git a/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/service/oauth2/impl/OAuth2MobileCodeServiceImpl.java b/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/service/oauth2/OAuth2MobileCodeServiceImpl.java
similarity index 98%
rename from system/system-biz/src/main/java/cn/iocoder/mall/system/biz/service/oauth2/impl/OAuth2MobileCodeServiceImpl.java
rename to system/system-biz/src/main/java/cn/iocoder/mall/system/biz/service/oauth2/OAuth2MobileCodeServiceImpl.java
index 59d474fac..3859fdf0e 100644
--- a/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/service/oauth2/impl/OAuth2MobileCodeServiceImpl.java
+++ b/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/service/oauth2/OAuth2MobileCodeServiceImpl.java
@@ -1,4 +1,4 @@
-package cn.iocoder.mall.system.biz.service.oauth2.impl;
+package cn.iocoder.mall.system.biz.service.oauth2;
import cn.iocoder.common.framework.constant.SysErrorCodeEnum;
import cn.iocoder.common.framework.util.ServiceExceptionUtil;
diff --git a/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/service/oauth2/impl/OAuth2ServiceImpl.java b/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/service/oauth2/OAuth2ServiceImpl.java
similarity index 95%
rename from system/system-biz/src/main/java/cn/iocoder/mall/system/biz/service/oauth2/impl/OAuth2ServiceImpl.java
rename to system/system-biz/src/main/java/cn/iocoder/mall/system/biz/service/oauth2/OAuth2ServiceImpl.java
index d7a9f757f..bf3394498 100644
--- a/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/service/oauth2/impl/OAuth2ServiceImpl.java
+++ b/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/service/oauth2/OAuth2ServiceImpl.java
@@ -1,11 +1,11 @@
-package cn.iocoder.mall.system.biz.service.oauth2.impl;
+package cn.iocoder.mall.system.biz.service.oauth2;
import cn.iocoder.common.framework.constant.SysErrorCodeEnum;
import cn.iocoder.common.framework.util.ServiceExceptionUtil;
import cn.iocoder.common.framework.util.ValidationUtil;
import cn.iocoder.mall.system.biz.bo.account.AccountBO;
import cn.iocoder.mall.system.biz.bo.ouath2.OAuth2AccessTokenBO;
-import cn.iocoder.mall.system.biz.convert.OAuth2Convert;
+import cn.iocoder.mall.system.biz.convert.oauth2.OAuth2Convert;
import cn.iocoder.mall.system.biz.dao.oauth2.OAuth2AccessTokenMapper;
import cn.iocoder.mall.system.biz.dao.oauth2.OAuth2RefreshTokenMapper;
import cn.iocoder.mall.system.biz.dataobject.oauth2.OAuth2AccessTokenDO;
@@ -14,8 +14,6 @@ import cn.iocoder.mall.system.biz.dto.account.AccountCreateDTO;
import cn.iocoder.mall.system.biz.dto.oatuh2.OAuth2MobileCodeAuthenticateDTO;
import cn.iocoder.mall.system.biz.dto.oatuh2.OAuth2UsernameAuthenticateDTO;
import cn.iocoder.mall.system.biz.service.account.AccountService;
-import cn.iocoder.mall.system.biz.service.oauth2.OAuth2MobileCodeService;
-import cn.iocoder.mall.system.biz.service.oauth2.OAuth2Service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
diff --git a/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/service/system/SystemLogService.java b/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/service/system/SystemLogService.java
new file mode 100644
index 000000000..9bd4b5935
--- /dev/null
+++ b/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/service/system/SystemLogService.java
@@ -0,0 +1,9 @@
+package cn.iocoder.mall.system.biz.service.system;
+
+import cn.iocoder.mall.system.biz.dto.system.AccessLogAddDTO;
+
+public interface SystemLogService {
+
+ void addAccessLog(AccessLogAddDTO accessLogAddDTO);
+
+}
diff --git a/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/service/system/SystemLogServiceImpl.java b/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/service/system/SystemLogServiceImpl.java
new file mode 100644
index 000000000..f9172ce15
--- /dev/null
+++ b/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/service/system/SystemLogServiceImpl.java
@@ -0,0 +1,28 @@
+package cn.iocoder.mall.system.biz.service.system;
+
+import cn.iocoder.mall.system.biz.convert.systemlog.SystemLogConvert;
+import cn.iocoder.mall.system.biz.dao.system.AccessLogMapper;
+import cn.iocoder.mall.system.biz.dataobject.system.AccessLogDO;
+import cn.iocoder.mall.system.biz.dto.system.AccessLogAddDTO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.Date;
+
+@Service
+public class SystemLogServiceImpl implements SystemLogService {
+
+ @Autowired
+ private AccessLogMapper accessLogMapper;
+
+ @Override
+ public void addAccessLog(AccessLogAddDTO accessLogAddDTO) {
+ AccessLogDO logDO = SystemLogConvert.INSTANCE.convert(accessLogAddDTO);
+ if (logDO.getAccountId() == null) {
+ logDO.setAccountId(AccessLogDO.ACCOUNT_ID_NULL);
+ }
+ logDO.setCreateTime(new Date());
+ accessLogMapper.insert(logDO);
+ }
+
+}
diff --git a/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/service/user/impl/UserServiceImpl.java b/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/service/user/UserServiceImpl.java
similarity index 90%
rename from system/system-biz/src/main/java/cn/iocoder/mall/system/biz/service/user/impl/UserServiceImpl.java
rename to system/system-biz/src/main/java/cn/iocoder/mall/system/biz/service/user/UserServiceImpl.java
index 748a27f41..554087a0e 100644
--- a/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/service/user/impl/UserServiceImpl.java
+++ b/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/service/user/UserServiceImpl.java
@@ -1,14 +1,13 @@
-package cn.iocoder.mall.system.biz.service.user.impl;
+package cn.iocoder.mall.system.biz.service.user;
import cn.iocoder.mall.system.biz.bo.ouath2.OAuth2AccessTokenBO;
import cn.iocoder.mall.system.biz.bo.user.UserAuthenticateBO;
import cn.iocoder.mall.system.biz.bo.user.UserBO;
-import cn.iocoder.mall.system.biz.convert.UserConvert;
+import cn.iocoder.mall.system.biz.convert.user.UserConvert;
import cn.iocoder.mall.system.biz.dao.user.UserMapper;
import cn.iocoder.mall.system.biz.dataobject.user.UserDO;
import cn.iocoder.mall.system.biz.dto.oatuh2.OAuth2MobileCodeAuthenticateDTO;
import cn.iocoder.mall.system.biz.service.oauth2.OAuth2Service;
-import cn.iocoder.mall.system.biz.service.user.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
diff --git a/system/system-rest/src/main/java/cn/iocoder/mall/system/rest/response/oauth2/AdminsOAuth2AuthenticateResponse.java b/system/system-rest/src/main/java/cn/iocoder/mall/system/rest/response/oauth2/AdminsOAuth2AuthenticateResponse.java
index a693a7880..3310902c6 100644
--- a/system/system-rest/src/main/java/cn/iocoder/mall/system/rest/response/oauth2/AdminsOAuth2AuthenticateResponse.java
+++ b/system/system-rest/src/main/java/cn/iocoder/mall/system/rest/response/oauth2/AdminsOAuth2AuthenticateResponse.java
@@ -12,6 +12,19 @@ import java.util.Date;
@Accessors(chain = true)
public class AdminsOAuth2AuthenticateResponse {
+ @ApiModel("管理员")
+ @Data
+ public static class Admin {
+
+ @ApiModelProperty(value = "管理员编号", required = true, example = "1")
+ private Integer id;
+
+ @ApiModelProperty(value = "真实名字", required = true, example = "小王")
+ private String name;
+
+ }
+
+ @ApiModel("访问令牌")
@Data
public static class Token {
@@ -26,23 +39,12 @@ public class AdminsOAuth2AuthenticateResponse {
}
- @Data
- public static class Admin {
-
- @ApiModelProperty(value = "管理员编号", required = true, example = "1")
- private Integer id;
-
- @ApiModelProperty(value = "真实名字", required = true, example = "小王")
- private String name;
-
- }
-
/**
- * TODO 晚点测试下 swagger 的表现
+ * 管理员
*/
private Admin admin;
/**
- * TODO 晚点测试下 swagger 的表现
+ * 访问令牌
*/
private Token token;
diff --git a/system/system-rpc-api/pom.xml b/system/system-rpc-api/pom.xml
index 383439704..f3068d633 100644
--- a/system/system-rpc-api/pom.xml
+++ b/system/system-rpc-api/pom.xml
@@ -11,5 +11,20 @@
system-rpc-api
+
+
+
+ cn.iocoder.mall
+ common-framework
+ 1.0-SNAPSHOT
+
+
+
+
+ javax.validation
+ validation-api
+
+
+
diff --git a/system/system-rpc-api/src/main/java/cn/iocoder/mall/system/rpc/api/SystemLogRPC.java b/system/system-rpc-api/src/main/java/cn/iocoder/mall/system/rpc/api/SystemLogRPC.java
new file mode 100644
index 000000000..c970994f3
--- /dev/null
+++ b/system/system-rpc-api/src/main/java/cn/iocoder/mall/system/rpc/api/SystemLogRPC.java
@@ -0,0 +1,10 @@
+package cn.iocoder.mall.system.rpc.api;
+
+import cn.iocoder.common.framework.vo.CommonResult;
+import cn.iocoder.mall.system.rpc.request.system.AccessLogAddRequest;
+
+public interface SystemLogRPC {
+
+ CommonResult addAccessLog(AccessLogAddRequest accessLogAddRequest);
+
+}
diff --git a/system/system-rpc-api/src/main/java/cn/iocoder/mall/system/rpc/request/package-info.java b/system/system-rpc-api/src/main/java/cn/iocoder/mall/system/rpc/request/package-info.java
new file mode 100644
index 000000000..97670befe
--- /dev/null
+++ b/system/system-rpc-api/src/main/java/cn/iocoder/mall/system/rpc/request/package-info.java
@@ -0,0 +1 @@
+package cn.iocoder.mall.system.rpc.request;
diff --git a/system/system-rpc-api/src/main/java/cn/iocoder/mall/system/rpc/request/system/AccessLogAddRequest.java b/system/system-rpc-api/src/main/java/cn/iocoder/mall/system/rpc/request/system/AccessLogAddRequest.java
new file mode 100644
index 000000000..1c3613388
--- /dev/null
+++ b/system/system-rpc-api/src/main/java/cn/iocoder/mall/system/rpc/request/system/AccessLogAddRequest.java
@@ -0,0 +1,42 @@
+package cn.iocoder.mall.system.rpc.request.system;
+
+import javax.validation.constraints.NotNull;
+import java.util.Date;
+
+public class AccessLogAddRequest {
+
+ /**
+ * 用户编号 - 空
+ */
+ public static final Integer ACCOUNT_ID_NULL = 0;
+
+ @NotNull(message = "链路追踪编号不能为空")
+ private String traceId;
+ /**
+ * 账号编号
+ */
+ private Integer accountId;
+ @NotNull(message = "应用名不能为空")
+ private String applicationName;
+ @NotNull(message = "访问地址不能为空")
+ private String uri;
+ @NotNull(message = "请求参数不能为空")
+ private String queryString;
+ @NotNull(message = "http 请求方法不能为空")
+ private String method;
+ @NotNull(message = "User-Agent 不能为空")
+ private String userAgent;
+ @NotNull(message = "ip 不能为空")
+ private String ip;
+ @NotNull(message = "请求时间不能为空")
+ private Date startTime;
+ @NotNull(message = "响应时长不能为空")
+ private Integer responseTime;
+ @NotNull(message = "错误码不能为空")
+ private Integer errorCode;
+ /**
+ * 错误提示
+ */
+ private String errorMessage;
+
+}
diff --git a/system/system-rpc/pom.xml b/system/system-rpc/pom.xml
index 6f4e454bf..4827a0436 100644
--- a/system/system-rpc/pom.xml
+++ b/system/system-rpc/pom.xml
@@ -11,5 +11,30 @@
system-rpc
+
+
+
+ cn.iocoder.mall
+ system-rpc-api
+ 1.0-SNAPSHOT
+
+
+ cn.iocoder.mall
+ system-biz
+ 1.0-SNAPSHOT
+
+
+
+
+ com.alibaba.cloud
+ spring-cloud-starter-dubbo
+
+
+
+
+ com.alibaba.cloud
+ spring-cloud-starter-alibaba-nacos-discovery
+
+
diff --git a/system/system-rpc/src/main/java/cn/iocoder/mall/system/rpc/convert/SystemLogConvert.java b/system/system-rpc/src/main/java/cn/iocoder/mall/system/rpc/convert/SystemLogConvert.java
new file mode 100644
index 000000000..679b1bdf9
--- /dev/null
+++ b/system/system-rpc/src/main/java/cn/iocoder/mall/system/rpc/convert/SystemLogConvert.java
@@ -0,0 +1,15 @@
+package cn.iocoder.mall.system.rpc.convert;
+
+import cn.iocoder.mall.system.biz.dto.system.AccessLogAddDTO;
+import cn.iocoder.mall.system.rpc.request.system.AccessLogAddRequest;
+import org.mapstruct.Mapper;
+import org.mapstruct.factory.Mappers;
+
+@Mapper
+public interface SystemLogConvert {
+
+ SystemLogConvert INSTANCE = Mappers.getMapper(SystemLogConvert.class);
+
+ AccessLogAddDTO convert(AccessLogAddRequest accessLogAddRequest);
+
+}
diff --git a/system/system-rpc/src/main/java/cn/iocoder/mall/system/rpc/rpc/SystemLogRPCImpl.java b/system/system-rpc/src/main/java/cn/iocoder/mall/system/rpc/rpc/SystemLogRPCImpl.java
new file mode 100644
index 000000000..f572fbfcc
--- /dev/null
+++ b/system/system-rpc/src/main/java/cn/iocoder/mall/system/rpc/rpc/SystemLogRPCImpl.java
@@ -0,0 +1,25 @@
+package cn.iocoder.mall.system.rpc.rpc;
+
+import cn.iocoder.common.framework.vo.CommonResult;
+import cn.iocoder.mall.system.biz.dto.system.AccessLogAddDTO;
+import cn.iocoder.mall.system.biz.service.system.SystemLogService;
+import cn.iocoder.mall.system.rpc.api.SystemLogRPC;
+import cn.iocoder.mall.system.rpc.convert.SystemLogConvert;
+import cn.iocoder.mall.system.rpc.request.system.AccessLogAddRequest;
+import org.apache.dubbo.config.annotation.Service;
+import org.springframework.beans.factory.annotation.Autowired;
+
+@Service(version = "dubbo.provider.SystemLogRPC.version", validation = "true")
+public class SystemLogRPCImpl implements SystemLogRPC {
+
+ @Autowired
+ private SystemLogService systemLogService;
+
+ @Override
+ public CommonResult addAccessLog(AccessLogAddRequest accessLogAddRequest) {
+ AccessLogAddDTO accessLogAddDTO = SystemLogConvert.INSTANCE.convert(accessLogAddRequest);
+ systemLogService.addAccessLog(accessLogAddDTO);
+ return CommonResult.success(true);
+ }
+
+}
diff --git a/system/system-rpc/src/main/resources/rpc-local.yaml b/system/system-rpc/src/main/resources/rpc-local.yaml
new file mode 100644
index 000000000..e056170af
--- /dev/null
+++ b/system/system-rpc/src/main/resources/rpc-local.yaml
@@ -0,0 +1,14 @@
+spring:
+ # Spring Cloud 配置项
+ cloud:
+ nacos:
+ # Spring Cloud Nacos Discovery 配置项
+ discovery:
+ server-addr: s1.iocoder.cn:8848 # Nacos 服务器地址
+ namespace: local # Nacos 命名空间
+
+# Dubbo 配置项
+dubbo:
+ # Dubbo 注册中心
+ registry:
+ address: spring-cloud://s1.iocoder.cn:8848 # 指定 Dubbo 服务注册中心的地址
diff --git a/system/system-rpc/src/main/resources/rpc-test.yaml b/system/system-rpc/src/main/resources/rpc-test.yaml
new file mode 100644
index 000000000..d3d0e9e69
--- /dev/null
+++ b/system/system-rpc/src/main/resources/rpc-test.yaml
@@ -0,0 +1,14 @@
+spring:
+ # Spring Cloud 配置项
+ cloud:
+ nacos:
+ # Spring Cloud Nacos Discovery 配置项
+ discovery:
+ server-addr: s1.iocoder.cn:8848 # Nacos 服务器地址
+ namespace: test # Nacos 命名空间
+
+# Dubbo 配置项
+dubbo:
+ # Dubbo 注册中心
+ registry:
+ address: spring-cloud://s1.iocoder.cn:8848 # 指定 Dubbo 服务注册中心的地址
diff --git a/system/system-rpc/src/main/resources/rpc.yaml b/system/system-rpc/src/main/resources/rpc.yaml
new file mode 100644
index 000000000..79c1f0deb
--- /dev/null
+++ b/system/system-rpc/src/main/resources/rpc.yaml
@@ -0,0 +1,17 @@
+# Dubbo 配置项
+dubbo:
+ # Spring Cloud Alibaba Dubbo 专属配置
+ cloud:
+ subscribed-services: '' # 设置订阅的应用列表,默认为 * 订阅所有应用
+ # Dubbo 提供者的协议
+ protocol:
+ name: dubbo
+ port: -1
+ # Dubbo 提供服务的扫描基础包
+ scan:
+ base-packages: cn.iocoder.mall.system.rpc.rpc
+ # Dubbo 服务提供者的配置
+ provider:
+ filter: -exception
+ SystemLogRPC:
+ version: 1.0.0
diff --git a/system/system-service-impl/src/main/java/cn/iocoder/mall/admin/dao/AccessLogMapper.java b/system/system-service-impl/src/main/java/cn/iocoder/mall/admin/dao/AccessLogMapper.java
deleted file mode 100644
index c0b9f84cf..000000000
--- a/system/system-service-impl/src/main/java/cn/iocoder/mall/admin/dao/AccessLogMapper.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package cn.iocoder.mall.admin.dao;
-
-import cn.iocoder.common.framework.mybatis.QueryWrapperX;
-import cn.iocoder.mall.system.api.dto.systemlog.AccessLogPageDTO;
-import cn.iocoder.mall.admin.dataobject.AccessLogDO;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import org.springframework.stereotype.Repository;
-
-@Repository
-public interface AccessLogMapper extends BaseMapper {
-
- default IPage selectPage(AccessLogPageDTO accessLogPageDTO) {
- return selectPage(new Page<>(accessLogPageDTO.getPageNo(), accessLogPageDTO.getPageSize()),
- new QueryWrapperX().eqIfPresent("user_id", accessLogPageDTO.getUserId()));
- }
-
-}