From bdff67b7b3facdb3bb9f53f56809970c0c2d67a2 Mon Sep 17 00:00:00 2001 From: YunaiV Date: Mon, 20 Apr 2020 19:55:39 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E8=AE=BF=E9=97=AE=E6=97=A5?= =?UTF-8?q?=E5=BF=97=E7=9A=84=20dubbo=20=E5=AE=9E=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- common/mall-spring-boot-starter-web/pom.xml | 29 ++++ .../web/handler/GlobalExceptionHandler.java | 131 ++++++++++++++++++ .../handler/GlobalResponseBodyHandler.java | 31 +++++ .../web/interceptor/AccessLogInterceptor.java | 102 ++++++++++++++ .../cn/iocoder/mall/web/package-info.java | 1 + common/pom.xml | 1 + system/system-application/pom.xml | 5 + .../system/application/SystemApplication.java | 2 +- .../src/main/resources/application.yaml | 4 + .../mall/system/biz/bo/package-info.java | 1 - .../convert/{ => account}/AccountConvert.java | 2 +- .../biz/convert/{ => admin}/AdminConvert.java | 2 +- .../convert/{ => oauth2}/OAuth2Convert.java | 2 +- .../convert/systemlog/SystemLogConvert.java | 15 ++ .../biz/convert/{ => user}/UserConvert.java | 2 +- .../biz/dao/system/AccessLogMapper.java | 15 ++ .../biz/dataobject/system}/AccessLogDO.java | 18 ++- .../biz/dto/system/AccessLogAddDTO.java | 45 ++++++ .../{impl => }/AccountServiceImpl.java | 4 +- .../admin/{impl => }/AdminServiceImpl.java | 4 +- .../OAuth2MobileCodeServiceImpl.java | 2 +- .../oauth2/{impl => }/OAuth2ServiceImpl.java | 6 +- .../biz/service/system/SystemLogService.java | 9 ++ .../service/system/SystemLogServiceImpl.java | 28 ++++ .../user/{impl => }/UserServiceImpl.java | 5 +- .../AdminsOAuth2AuthenticateResponse.java | 28 ++-- system/system-rpc-api/pom.xml | 15 ++ .../mall/system/rpc/api/SystemLogRPC.java | 10 ++ .../mall/system/rpc/request/package-info.java | 1 + .../request/system/AccessLogAddRequest.java | 42 ++++++ system/system-rpc/pom.xml | 25 ++++ .../system/rpc/convert/SystemLogConvert.java | 15 ++ .../mall/system/rpc/rpc/SystemLogRPCImpl.java | 25 ++++ .../src/main/resources/rpc-local.yaml | 14 ++ .../src/main/resources/rpc-test.yaml | 14 ++ system/system-rpc/src/main/resources/rpc.yaml | 17 +++ .../mall/admin/dao/AccessLogMapper.java | 19 --- 37 files changed, 635 insertions(+), 56 deletions(-) create mode 100644 common/mall-spring-boot-starter-web/pom.xml create mode 100644 common/mall-spring-boot-starter-web/src/main/java/cn/iocoder/mall/web/handler/GlobalExceptionHandler.java create mode 100644 common/mall-spring-boot-starter-web/src/main/java/cn/iocoder/mall/web/handler/GlobalResponseBodyHandler.java create mode 100644 common/mall-spring-boot-starter-web/src/main/java/cn/iocoder/mall/web/interceptor/AccessLogInterceptor.java create mode 100644 common/mall-spring-boot-starter-web/src/main/java/cn/iocoder/mall/web/package-info.java delete mode 100644 system/system-biz/src/main/java/cn/iocoder/mall/system/biz/bo/package-info.java rename system/system-biz/src/main/java/cn/iocoder/mall/system/biz/convert/{ => account}/AccountConvert.java (90%) rename system/system-biz/src/main/java/cn/iocoder/mall/system/biz/convert/{ => admin}/AdminConvert.java (86%) rename system/system-biz/src/main/java/cn/iocoder/mall/system/biz/convert/{ => oauth2}/OAuth2Convert.java (88%) create mode 100644 system/system-biz/src/main/java/cn/iocoder/mall/system/biz/convert/systemlog/SystemLogConvert.java rename system/system-biz/src/main/java/cn/iocoder/mall/system/biz/convert/{ => user}/UserConvert.java (93%) create mode 100644 system/system-biz/src/main/java/cn/iocoder/mall/system/biz/dao/system/AccessLogMapper.java rename system/{system-service-impl/src/main/java/cn/iocoder/mall/admin/dataobject => system-biz/src/main/java/cn/iocoder/mall/system/biz/dataobject/system}/AccessLogDO.java (81%) create mode 100644 system/system-biz/src/main/java/cn/iocoder/mall/system/biz/dto/system/AccessLogAddDTO.java rename system/system-biz/src/main/java/cn/iocoder/mall/system/biz/service/account/{impl => }/AccountServiceImpl.java (93%) rename system/system-biz/src/main/java/cn/iocoder/mall/system/biz/service/admin/{impl => }/AdminServiceImpl.java (84%) rename system/system-biz/src/main/java/cn/iocoder/mall/system/biz/service/oauth2/{impl => }/OAuth2MobileCodeServiceImpl.java (98%) rename system/system-biz/src/main/java/cn/iocoder/mall/system/biz/service/oauth2/{impl => }/OAuth2ServiceImpl.java (95%) create mode 100644 system/system-biz/src/main/java/cn/iocoder/mall/system/biz/service/system/SystemLogService.java create mode 100644 system/system-biz/src/main/java/cn/iocoder/mall/system/biz/service/system/SystemLogServiceImpl.java rename system/system-biz/src/main/java/cn/iocoder/mall/system/biz/service/user/{impl => }/UserServiceImpl.java (90%) create mode 100644 system/system-rpc-api/src/main/java/cn/iocoder/mall/system/rpc/api/SystemLogRPC.java create mode 100644 system/system-rpc-api/src/main/java/cn/iocoder/mall/system/rpc/request/package-info.java create mode 100644 system/system-rpc-api/src/main/java/cn/iocoder/mall/system/rpc/request/system/AccessLogAddRequest.java create mode 100644 system/system-rpc/src/main/java/cn/iocoder/mall/system/rpc/convert/SystemLogConvert.java create mode 100644 system/system-rpc/src/main/java/cn/iocoder/mall/system/rpc/rpc/SystemLogRPCImpl.java create mode 100644 system/system-rpc/src/main/resources/rpc-local.yaml create mode 100644 system/system-rpc/src/main/resources/rpc-test.yaml create mode 100644 system/system-rpc/src/main/resources/rpc.yaml delete mode 100644 system/system-service-impl/src/main/java/cn/iocoder/mall/admin/dao/AccessLogMapper.java 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())); - } - -}