diff --git a/.gitee/ISSUE_TEMPLATE.zh-CN.md b/.gitee/ISSUE_TEMPLATE.zh-CN.md new file mode 100644 index 000000000..efdd1b079 --- /dev/null +++ b/.gitee/ISSUE_TEMPLATE.zh-CN.md @@ -0,0 +1,25 @@ +碰到问题,请在 搜索是否存在相似的 issue。 + +不按照模板提交的 issue,会被系统自动删除。 + +### 基本信息 + +- ruoyi-vue-pro 版本: +- 操作系统: +- 数据库: + +### 你猜测可能的原因 + +(必填)我花费了 2-4 小时自查,发现可能的原因是:xxxxxx + +### 复现步骤 + +第一步, + +第二步, + +第三步, + +### 报错信息 + +带上必要的截图 diff --git a/.github/ISSUE_TEMPLATE/question.md b/.github/ISSUE_TEMPLATE/question.md new file mode 100644 index 000000000..5d1f257e1 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/question.md @@ -0,0 +1,34 @@ +--- +name: 问题反馈 +about: 请详细描述,以便更高快的获得到解决 +title: '' +labels: '' +assignees: '' + +--- + +碰到问题,请在 搜索是否存在相似的 issue。 + +不按照模板提交的 issue,会被系统自动删除。 + +### 基本信息 + +- ruoyi-vue-pro 版本: +- 操作系统: +- 数据库: + +### 你猜测可能的原因 + +(必填)我花费了 2-4 小时自查,发现可能的原因是:xxxxxx + +### 复现步骤 + +第一步, + +第二步, + +第三步, + +### 报错信息 + +带上必要的截图 diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml new file mode 100644 index 000000000..7c765927a --- /dev/null +++ b/.github/workflows/maven.yml @@ -0,0 +1,30 @@ +# This workflow will build a Java project with Maven, and cache/restore any dependencies to improve the workflow execution time +# For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-maven + +name: Java CI with Maven + +on: + push: + branches: [ master ] + # pull_request: + # branches: [ master ] + +jobs: + build: + + runs-on: ubuntu-latest + + strategy: + matrix: + java: [ '8', '11', '17' ] + + steps: + - uses: actions/checkout@v2 + - name: Set up JDK ${{ matrix.Java }} + uses: actions/setup-java@v2 + with: + java-version: ${{ matrix.java }} + distribution: 'temurin' + cache: maven + - name: Build with Maven + run: mvn -B package --file pom.xml -Dmaven.test.skip=true diff --git a/README.md b/README.md index 20de435d7..f72d46699 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,18 @@ -[toc] +以 [ruoyi-vue-pro](https://github.com/YunaiV/ruoyi-vue-pro) 为基础,实现的 Spring Cloud Alibaba 微服务架构。进度如下: -> 友情提示:近期在升级和优化该项目,建议先 Star 本项目。主要在做几个事情: -> -> * 1、微服务技术选型以 Spring Cloud Alibaba 为中心。 -> * 2、修改项目分层,并合并部分服务,简化整体服务的复杂性。 -> * 3、将管理后台从 React 重构到 Vue 框架。 -> -> 交流群:[传送门](http://www.iocoder.cn/mall-user-group/?vip&gitee) +* [x] `gateway` 网关服务 +* [x] `system` 系统服务 +* [x] `infra` 基础设施 +* [ ] `bpm` 工作流服务 +* [ ] `pay` 支付服务 +* [ ] `member` 会员服务 +* [ ] `product` 商品服务 +* [ ] `market` 营销服务 +* [ ] `trade` 交易服务 + +启动文档,可见 地址。 + +---- # 前言 diff --git a/common/common-framework/pom.xml b/common/common-framework/pom.xml deleted file mode 100644 index 0281b812e..000000000 --- a/common/common-framework/pom.xml +++ /dev/null @@ -1,85 +0,0 @@ - - - - common - cn.iocoder.mall - 1.0-SNAPSHOT - - 4.0.0 - - common-framework - - - - - javax.servlet - servlet-api - - - - org.springframework - spring-web - true - - - org.springframework - spring-webmvc - true - - - - io.swagger - swagger-annotations - true - - - - - org.apache.skywalking - apm-toolkit-trace - true - - - - - org.slf4j - slf4j-api - true - - - - - junit - junit - 4.8.1 - test - - - - - org.hibernate - hibernate-validator - true - - - - org.apache.commons - commons-lang3 - - - - com.alibaba - fastjson - true - - - - cn.hutool - hutool-all - - - - - diff --git a/common/common-framework/src/main/java/cn/iocoder/common/framework/enums/CommonStatusEnum.java b/common/common-framework/src/main/java/cn/iocoder/common/framework/enums/CommonStatusEnum.java deleted file mode 100644 index e9f0843bb..000000000 --- a/common/common-framework/src/main/java/cn/iocoder/common/framework/enums/CommonStatusEnum.java +++ /dev/null @@ -1,44 +0,0 @@ -package cn.iocoder.common.framework.enums; - -import cn.iocoder.common.framework.core.IntArrayValuable; - -import java.util.Arrays; - -/** - * 通用状态枚举 - */ -public enum CommonStatusEnum implements IntArrayValuable { - - ENABLE(1, "开启"), - DISABLE(2, "关闭"); - - public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(CommonStatusEnum::getValue).toArray(); - - /** - * 状态值 - */ - private final Integer value; - /** - * 状态名 - */ - private final String name; - - CommonStatusEnum(Integer value, String name) { - this.value = value; - this.name = name; - } - - public Integer getValue() { - return value; - } - - public String getName() { - return name; - } - - @Override - public int[] array() { - return ARRAYS; - } - -} diff --git a/common/common-framework/src/main/java/cn/iocoder/common/framework/enums/UserTypeEnum.java b/common/common-framework/src/main/java/cn/iocoder/common/framework/enums/UserTypeEnum.java deleted file mode 100644 index 7dd694b24..000000000 --- a/common/common-framework/src/main/java/cn/iocoder/common/framework/enums/UserTypeEnum.java +++ /dev/null @@ -1,44 +0,0 @@ -package cn.iocoder.common.framework.enums; - -import cn.iocoder.common.framework.core.IntArrayValuable; - -import java.util.Arrays; - -/** - * 全局用户类型枚举 - */ -public enum UserTypeEnum implements IntArrayValuable { - - USER(1, "用户"), - ADMIN(2, "管理员"); - - public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(UserTypeEnum::getValue).toArray(); - - /** - * 类型 - */ - private final Integer value; - /** - * 类型名 - */ - private final String name; - - UserTypeEnum(Integer value, String name) { - this.value = value; - this.name = name; - } - - public Integer getValue() { - return value; - } - - public String getName() { - return name; - } - - @Override - public int[] array() { - return ARRAYS; - } - -} diff --git a/common/common-framework/src/main/java/cn/iocoder/common/framework/exception/GlobalException.java b/common/common-framework/src/main/java/cn/iocoder/common/framework/exception/GlobalException.java deleted file mode 100644 index a499afa96..000000000 --- a/common/common-framework/src/main/java/cn/iocoder/common/framework/exception/GlobalException.java +++ /dev/null @@ -1,71 +0,0 @@ -package cn.iocoder.common.framework.exception; - -import cn.iocoder.common.framework.exception.enums.GlobalErrorCodeConstants; -import cn.iocoder.common.framework.vo.CommonResult; - -/** - * 全局异常 Exception - */ -public class GlobalException extends RuntimeException { - - /** - * 全局错误码 - * - * @see GlobalErrorCodeConstants - */ - private Integer code; - /** - * 错误提示 - */ - private String message; - /** - * 错误明细,内部调试错误 - * - * 和 {@link CommonResult#getDetailMessage()} 一致的设计 - */ - private String detailMessage; - - /** - * 空构造方法,避免反序列化问题 - */ - public GlobalException() { - } - - public GlobalException(ErrorCode errorCode) { - this.code = errorCode.getCode(); - this.message = errorCode.getMessage(); - } - - public GlobalException(Integer code, String message) { - this.code = code; - this.message = message; - } - - public Integer getCode() { - return code; - } - - public String getDetailMessage() { - return detailMessage; - } - - public GlobalException setDetailMessage(String detailMessage) { - this.detailMessage = detailMessage; - return this; - } - - public GlobalException setCode(Integer code) { - this.code = code; - return this; - } - - public String getMessage() { - return message; - } - - public GlobalException setMessage(String message) { - this.message = message; - return this; - } - -} diff --git a/common/common-framework/src/main/java/cn/iocoder/common/framework/util/CollectionUtils.java b/common/common-framework/src/main/java/cn/iocoder/common/framework/util/CollectionUtils.java deleted file mode 100644 index 865ad3fd4..000000000 --- a/common/common-framework/src/main/java/cn/iocoder/common/framework/util/CollectionUtils.java +++ /dev/null @@ -1,60 +0,0 @@ -package cn.iocoder.common.framework.util; - -import java.util.*; -import java.util.function.Function; -import java.util.stream.Collectors; - -public class CollectionUtils { - - public static boolean isEmpty(Collection collection) { - return collection == null || collection.isEmpty(); - } - - public static boolean isEmpty(Object[] arrays) { - return arrays == null || arrays.length == 0; - } - - public static Set asSet(T... objs) { - return new HashSet<>(Arrays.asList(objs)); - } - - public static List convertList(List from, Function func) { - return from.stream().map(func).collect(Collectors.toList()); - } - - public static Set convertSet(List from, Function func) { - return from.stream().map(func).collect(Collectors.toSet()); - } - - public static Map convertMap(List from, Function keyFunc) { - return from.stream().collect(Collectors.toMap(keyFunc, item -> item)); - } - - public static Map convertMap(List from, Function keyFunc, Function valueFunc) { - return from.stream().collect(Collectors.toMap(keyFunc, valueFunc)); - } - - public static Map> convertMultiMap(List from, Function keyFunc) { - return from.stream().collect(Collectors.groupingBy(keyFunc, - Collectors.mapping(t -> t, Collectors.toList()))); - } - - public static Map> convertMultiMap(List from, Function keyFunc, Function valueFunc) { - return from.stream().collect(Collectors.groupingBy(keyFunc, - Collectors.mapping(valueFunc, Collectors.toList()))); - } - - // 暂时没想好名字,先以 2 结尾噶 - public static Map> convertMultiMap2(List from, Function keyFunc, Function valueFunc) { - return from.stream().collect(Collectors.groupingBy(keyFunc, Collectors.mapping(valueFunc, Collectors.toSet()))); - } - - public static boolean containsAny(Collection source, Collection candidates) { - return org.springframework.util.CollectionUtils.containsAny(source, candidates); - } - - public static T getFirst(List from) { - return !isEmpty(from) ? from.get(0) : null; - } - -} diff --git a/common/common-framework/src/main/java/cn/iocoder/common/framework/util/DateUtil.java b/common/common-framework/src/main/java/cn/iocoder/common/framework/util/DateUtil.java deleted file mode 100644 index a8666ef52..000000000 --- a/common/common-framework/src/main/java/cn/iocoder/common/framework/util/DateUtil.java +++ /dev/null @@ -1,146 +0,0 @@ -package cn.iocoder.common.framework.util; - -import org.springframework.util.Assert; - -import java.text.SimpleDateFormat; -import java.util.Calendar; -import java.util.Date; - -public class DateUtil { - - /** - * 计算当期时间相差的日期 - * - * @param field 日历字段.
eg:Calendar.MONTH,Calendar.DAY_OF_MONTH,
Calendar.HOUR_OF_DAY等. - * @param amount 相差的数值 - * @return 计算后的日志 - */ - public static Date addDate(int field, int amount) { - return addDate(null, field, amount); - } - - /** - * 计算当期时间相差的日期 - * - * @param date 设置时间 - * @param field 日历字段.
eg:Calendar.MONTH,Calendar.DAY_OF_MONTH,
Calendar.HOUR_OF_DAY等. - * @param amount 相差的数值 - * @return 计算后的日志 - */ - public static Date addDate(Date date, int field, int amount) { - if (amount == 0) { - return date; - } - Calendar c = Calendar.getInstance(); - if (date != null) { - c.setTime(date); - } - c.add(field, amount); - return c.getTime(); - } - - /** - * @param date 时间。若为空,则返回空串 - * @param pattern 时间格式化 - * @return 格式化后的时间字符串. - */ - public static String format(Date date, String pattern) { - if (date == null) { - return ""; - } - // TODO 芋艿,后面改成缓存 - return new SimpleDateFormat(pattern).format(date); - } - - /** - * 获取指定天结束时间 - * - * @param date 日期 - * @return 获得该日期的开始 - */ - public static Date getDayBegin(Date date) { - if (date == null) { - return null; - } - Calendar calendar = Calendar.getInstance(); - calendar.setTime(date); - setCalender(calendar, 0, 0, 0, 0); - return calendar.getTime(); - } - - /** - * 获取当天开始时间 - * - * @return 获得该日期的开始 - */ - public static Date getDayBegin() { - return getDayBegin(new Date()); - } - - /** - * 获取指定天结束时间 - * - * @param date 日期 - * @return 获得该日期的结束 - */ - public static Date getDayEnd(Date date) { - if (date == null) { - return null; - } - Calendar calendar = Calendar.getInstance(); - calendar.setTime(date); - setCalender(calendar, 23, 59, 59, 999); - return calendar.getTime(); - } - - /** - * 获取当天结束时间 - * - * @return 获得该日期的开始 - */ - public static Date getDayEnd() { - return getDayEnd(new Date()); - } - - /** - * 设置Calendar的小时、分钟、秒、毫秒 - * - * @param calendar 日历 - * @param hour 小时 - * @param minute 分钟 - * @param second 秒 - * @param milliSecond 毫秒 - */ - public static void setCalender(Calendar calendar, int hour, int minute, int second, int milliSecond) { - calendar.set(Calendar.HOUR_OF_DAY, hour); - calendar.set(Calendar.MINUTE, minute); - calendar.set(Calendar.SECOND, second); - calendar.set(Calendar.MILLISECOND, milliSecond); - } - - /** - * 判断当前时间,是否在该时间范围内 - * - * @param beginTime 开始时间 - * @param endTime 结束时间 - * @return 是否在 - */ - public static boolean isBetween(Date beginTime, Date endTime) { - Assert.notNull(beginTime, "开始时间不能为空"); - Assert.notNull(endTime, "结束时间不能为空"); - Date now = new Date(); - return beginTime.getTime() <= now.getTime() - && now.getTime() <= endTime.getTime(); - } - - public static Date max(Date a, Date b) { - if (a == null) { - return b; - } - if (b == null) { - return a; - } - return a.compareTo(b) > 0 ? a : b; - } - -} diff --git a/common/common-framework/src/main/java/cn/iocoder/common/framework/util/DigestUtils.java b/common/common-framework/src/main/java/cn/iocoder/common/framework/util/DigestUtils.java deleted file mode 100644 index 02f6d21e3..000000000 --- a/common/common-framework/src/main/java/cn/iocoder/common/framework/util/DigestUtils.java +++ /dev/null @@ -1,26 +0,0 @@ -package cn.iocoder.common.framework.util; - -import cn.hutool.crypto.digest.BCrypt; - -/** - * 加解密工具类 - */ -public class DigestUtils { - - public static String genBcryptSalt() { - return BCrypt.gensalt(); - } - - public static String bcrypt(String key, String salt) { - return BCrypt.hashpw(key, salt); - } - - // TODO 稍后移到单元测试 - public static void main(String[] args) { - String salt = genBcryptSalt(); - String password = "buzhidao"; - System.out.println(salt); - System.out.println(bcrypt(password, salt)); - } - -} diff --git a/common/common-framework/src/main/java/cn/iocoder/common/framework/util/ExceptionUtil.java b/common/common-framework/src/main/java/cn/iocoder/common/framework/util/ExceptionUtil.java deleted file mode 100644 index 7fe3b1a86..000000000 --- a/common/common-framework/src/main/java/cn/iocoder/common/framework/util/ExceptionUtil.java +++ /dev/null @@ -1,19 +0,0 @@ -package cn.iocoder.common.framework.util; - -import org.apache.commons.lang3.exception.ExceptionUtils; - -public class ExceptionUtil { - - public static String getMessage(Throwable th) { - return ExceptionUtils.getMessage(th); - } - - public static String getRootCauseMessage(Throwable th) { - return ExceptionUtils.getRootCauseMessage(th); - } - - public static String getStackTrace(Throwable th) { - return ExceptionUtils.getStackTrace(th); - } - -} diff --git a/common/common-framework/src/main/java/cn/iocoder/common/framework/util/HttpUtil.java b/common/common-framework/src/main/java/cn/iocoder/common/framework/util/HttpUtil.java deleted file mode 100644 index 9251ef3da..000000000 --- a/common/common-framework/src/main/java/cn/iocoder/common/framework/util/HttpUtil.java +++ /dev/null @@ -1,319 +0,0 @@ -package cn.iocoder.common.framework.util; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.util.StringUtils; - -import javax.servlet.ServletRequest; -import javax.servlet.http.HttpServletRequest; -import java.io.UnsupportedEncodingException; -import java.net.URLDecoder; -import java.util.Enumeration; - -public class HttpUtil { - - private static final Logger logger = LoggerFactory.getLogger(HttpUtil.class); - - /** - * Standard Servlet 2.3+ spec request attributes for include URI and paths. - *

If included via a RequestDispatcher, the current resource will see the - * originating request. Its own URI and paths are exposed as request attributes. - */ - public static final String INCLUDE_REQUEST_URI_ATTRIBUTE = "javax.servlet.include.request_uri"; - public static final String INCLUDE_CONTEXT_PATH_ATTRIBUTE = "javax.servlet.include.context_path"; -// public static final String INCLUDE_SERVLET_PATH_ATTRIBUTE = "javax.servlet.include.servlet_path"; -// public static final String INCLUDE_PATH_INFO_ATTRIBUTE = "javax.servlet.include.path_info"; -// public static final String INCLUDE_QUERY_STRING_ATTRIBUTE = "javax.servlet.include.query_string"; -// -// /** -// * Standard Servlet 2.4+ spec request attributes for forward URI and paths. -// *

If forwarded to via a RequestDispatcher, the current resource will see its -// * own URI and paths. The originating URI and paths are exposed as request attributes. -// */ -// public static final String FORWARD_REQUEST_URI_ATTRIBUTE = "javax.servlet.forward.request_uri"; -// public static final String FORWARD_CONTEXT_PATH_ATTRIBUTE = "javax.servlet.forward.context_path"; -// public static final String FORWARD_SERVLET_PATH_ATTRIBUTE = "javax.servlet.forward.servlet_path"; -// public static final String FORWARD_PATH_INFO_ATTRIBUTE = "javax.servlet.forward.path_info"; -// public static final String FORWARD_QUERY_STRING_ATTRIBUTE = "javax.servlet.forward.query_string"; - - /** - * Default character encoding to use when request.getCharacterEncoding - * returns null, according to the Servlet spec. - * - * @see javax.servlet.ServletRequest#getCharacterEncoding - */ - public static final String DEFAULT_CHARACTER_ENCODING = "ISO-8859-1"; - - public static String obtainAuthorization(HttpServletRequest request) { - String authorization = request.getHeader("Authorization"); - if (!StringUtils.hasText(authorization)) { - return null; - } - int index = authorization.indexOf("Bearer "); - if (index == -1) { // 未找到 - return null; - } - return authorization.substring(index + 7).trim(); - } - - public static String getIp(HttpServletRequest request) { - // 基于 X-Forwarded-For 获得 - String ip = request.getHeader("X-Forwarded-For"); - if (!StringUtils.isEmpty(ip) && !"unKnown".equalsIgnoreCase(ip)) { - // 多次反向代理后会有多个ip值,第一个 ip 才是真实 ip - int index = ip.indexOf(","); - if (index != -1) { - return ip.substring(0, index); - } else { - return ip; - } - } - // 基于 X-Real-IP 获得 - ip = request.getHeader("X-Real-IP"); - if (!StringUtils.isEmpty(ip) && !"unKnown".equalsIgnoreCase(ip)) { - return ip; - } - // 默认方式 - return request.getRemoteAddr(); - } - - /** - * @param request 请求 - * @return ua - */ - public static String getUserAgent(HttpServletRequest request) { - String ua = request.getHeader("User-Agent"); - return ua != null ? ua : ""; - } - - /** - * 根据request拼接queryString - * - * @return queryString - */ - @SuppressWarnings("unchecked") - public static String buildQueryString(HttpServletRequest request) { - Enumeration es = request.getParameterNames(); - if (!es.hasMoreElements()) { - return ""; - } - String parameterName, parameterValue; - StringBuilder params = new StringBuilder(); - while (es.hasMoreElements()) { - parameterName = es.nextElement(); - parameterValue = request.getParameter(parameterName); - params.append(parameterName).append("=").append(parameterValue).append("&"); - } - return params.deleteCharAt(params.length() - 1).toString(); - } - - /** - * Return the path within the web application for the given request. - * Detects include request URL if called within a RequestDispatcher include. - *

- * For example, for a request to URL - *

- * http://www.somehost.com/myapp/my/url.jsp, - *

- * for an application deployed to /mayapp (the application's context path), this method would return - *

- * /my/url.jsp. - * - * 该方法,是从 Shiro 源码中,扣出来。add by 芋艿 - * - * @param request current HTTP request - * @return the path within the web application - */ - public static String getPathWithinApplication(HttpServletRequest request) { - String contextPath = getContextPath(request); - String requestUri = getRequestUri(request); - if (StringUtils.startsWithIgnoreCase(requestUri, contextPath)) { - // Normal case: URI contains context path. - String path = requestUri.substring(contextPath.length()); - return (StringUtils.hasText(path) ? path : "/"); - } else { - // Special case: rather unusual. - return requestUri; - } - } - - /** - * Return the request URI for the given request, detecting an include request - * URL if called within a RequestDispatcher include. - *

As the value returned by request.getRequestURI() is not - * decoded by the servlet container, this method will decode it. - *

The URI that the web container resolves should be correct, but some - * containers like JBoss/Jetty incorrectly include ";" strings like ";jsessionid" - * in the URI. This method cuts off such incorrect appendices. - * - * @param request current HTTP request - * @return the request URI - */ - public static String getRequestUri(HttpServletRequest request) { - String uri = (String) request.getAttribute(INCLUDE_REQUEST_URI_ATTRIBUTE); - if (uri == null) { - uri = request.getRequestURI(); - } - return normalize(decodeAndCleanUriString(request, uri)); - } - - /** - * Normalize a relative URI path that may have relative values ("/./", - * "/../", and so on ) it it. WARNING - This method is - * useful only for normalizing application-generated paths. It does not - * try to perform security checks for malicious input. - * Normalize operations were was happily taken from org.apache.catalina.util.RequestUtil in - * Tomcat trunk, r939305 - * - * @param path Relative path to be normalized - * @return normalized path - */ - public static String normalize(String path) { - return normalize(path, true); - } - - /** - * Normalize a relative URI path that may have relative values ("/./", - * "/../", and so on ) it it. WARNING - This method is - * useful only for normalizing application-generated paths. It does not - * try to perform security checks for malicious input. - * Normalize operations were was happily taken from org.apache.catalina.util.RequestUtil in - * Tomcat trunk, r939305 - * - * @param path Relative path to be normalized - * @param replaceBackSlash Should '\\' be replaced with '/' - * @return normalized path - */ - private static String normalize(String path, boolean replaceBackSlash) { - - if (path == null) - return null; - - // Create a place for the normalized path - String normalized = path; - - if (replaceBackSlash && normalized.indexOf('\\') >= 0) - normalized = normalized.replace('\\', '/'); - - if (normalized.equals("/.")) - return "/"; - - // Add a leading "/" if necessary - if (!normalized.startsWith("/")) - normalized = "/" + normalized; - - // Resolve occurrences of "//" in the normalized path - while (true) { - int index = normalized.indexOf("//"); - if (index < 0) - break; - normalized = normalized.substring(0, index) + - normalized.substring(index + 1); - } - - // Resolve occurrences of "/./" in the normalized path - while (true) { - int index = normalized.indexOf("/./"); - if (index < 0) - break; - normalized = normalized.substring(0, index) + - normalized.substring(index + 2); - } - - // Resolve occurrences of "/../" in the normalized path - while (true) { - int index = normalized.indexOf("/../"); - if (index < 0) - break; - if (index == 0) - return (null); // Trying to go outside our context - int index2 = normalized.lastIndexOf('/', index - 1); - normalized = normalized.substring(0, index2) + - normalized.substring(index + 3); - } - - // Return the normalized path that we have completed - return (normalized); - } - - /** - * Decode the supplied URI string and strips any extraneous portion after a ';'. - * - * @param request the incoming HttpServletRequest - * @param uri the application's URI string - * @return the supplied URI string stripped of any extraneous portion after a ';'. - */ - private static String decodeAndCleanUriString(HttpServletRequest request, String uri) { - uri = decodeRequestString(request, uri); - int semicolonIndex = uri.indexOf(';'); - return (semicolonIndex != -1 ? uri.substring(0, semicolonIndex) : uri); - } - - /** - * Return the context path for the given request, detecting an include request - * URL if called within a RequestDispatcher include. - *

As the value returned by request.getContextPath() is not - * decoded by the servlet container, this method will decode it. - * - * @param request current HTTP request - * @return the context path - */ - public static String getContextPath(HttpServletRequest request) { - String contextPath = (String) request.getAttribute(INCLUDE_CONTEXT_PATH_ATTRIBUTE); - if (contextPath == null) { - contextPath = request.getContextPath(); - } - if ("/".equals(contextPath)) { - // Invalid case, but happens for includes on Jetty: silently adapt it. - contextPath = ""; - } - return decodeRequestString(request, contextPath); - } - - /** - * Decode the given source string with a URLDecoder. The encoding will be taken - * from the request, falling back to the default "ISO-8859-1". - *

The default implementation uses URLDecoder.decode(input, enc). - * - * @param request current HTTP request - * @param source the String to decode - * @return the decoded String - * @see #DEFAULT_CHARACTER_ENCODING - * @see javax.servlet.ServletRequest#getCharacterEncoding - * @see java.net.URLDecoder#decode(String, String) - * @see java.net.URLDecoder#decode(String) - */ - @SuppressWarnings({"deprecation"}) - public static String decodeRequestString(HttpServletRequest request, String source) { - String enc = determineEncoding(request); - try { - return URLDecoder.decode(source, enc); - } catch (UnsupportedEncodingException ex) { - if (logger.isWarnEnabled()) { - logger.warn("Could not decode request string [" + source + "] with encoding '" + enc + - "': falling back to platform default encoding; exception message: " + ex.getMessage()); - } - return URLDecoder.decode(source); - } - } - - /** - * Determine the encoding for the given request. - * Can be overridden in subclasses. - *

The default implementation checks the request's - * {@link ServletRequest#getCharacterEncoding() character encoding}, and if that - * null, falls back to the {@link #DEFAULT_CHARACTER_ENCODING}. - * - * @param request current HTTP request - * @return the encoding for the request (never null) - * @see javax.servlet.ServletRequest#getCharacterEncoding() - */ - protected static String determineEncoding(HttpServletRequest request) { - String enc = request.getCharacterEncoding(); - if (enc == null) { - enc = DEFAULT_CHARACTER_ENCODING; - } - return enc; - } - -} diff --git a/common/common-framework/src/main/java/cn/iocoder/common/framework/util/MallUtils.java b/common/common-framework/src/main/java/cn/iocoder/common/framework/util/MallUtils.java deleted file mode 100644 index 54c897e0b..000000000 --- a/common/common-framework/src/main/java/cn/iocoder/common/framework/util/MallUtils.java +++ /dev/null @@ -1,30 +0,0 @@ -package cn.iocoder.common.framework.util; - -import org.apache.skywalking.apm.toolkit.trace.TraceContext; - -import java.util.UUID; - -public class MallUtils { - - /** - * 获得链路追踪编号 - * - * 一般来说,通过链路追踪编号,可以将访问日志,错误日志,链路追踪日志,logger 打印日志等,结合在一起,从而进行排错。 - * - * 默认情况下,我们使用 Apache SkyWalking 的 traceId 作为链路追踪编号。当然,可能会存在并未引入 Skywalking 的情况,此时使用 UUID 。 - * - * @return 链路追踪编号 - */ - public static String getTraceId() { - // 通过 SkyWalking 获取链路编号 - try { - String traceId = TraceContext.traceId(); - if (StringUtils.hasText(traceId)) { - return traceId; - } - } catch (Throwable ignore) {} - // TODO 芋艿 多次调用会问题 - return UUID.randomUUID().toString(); - } - -} diff --git a/common/common-framework/src/main/java/cn/iocoder/common/framework/util/MathUtil.java b/common/common-framework/src/main/java/cn/iocoder/common/framework/util/MathUtil.java deleted file mode 100644 index 4aafa732e..000000000 --- a/common/common-framework/src/main/java/cn/iocoder/common/framework/util/MathUtil.java +++ /dev/null @@ -1,33 +0,0 @@ -package cn.iocoder.common.framework.util; - -import java.util.Random; - -public class MathUtil { - - /** - * 随机对象 - */ - private static final Random RANDOM = new Random(); // TODO 后续优化 - - /** - * 随机[min, max]范围内的数字 - * - * @param min 随机开始 - * @param max 随机结束 - * @return 数字 - */ - public static int random(int min, int max) { - if (min == max) { - return min; - } - if (min > max) { - int temp = min; - min = max; - max = temp; - } - // 随即开始 - int diff = max - min + 1; - return RANDOM.nextInt(diff) + min; - } - -} diff --git a/common/common-framework/src/main/java/cn/iocoder/common/framework/util/OSUtils.java b/common/common-framework/src/main/java/cn/iocoder/common/framework/util/OSUtils.java deleted file mode 100644 index 930902c7d..000000000 --- a/common/common-framework/src/main/java/cn/iocoder/common/framework/util/OSUtils.java +++ /dev/null @@ -1,14 +0,0 @@ -package cn.iocoder.common.framework.util; - -import cn.hutool.system.SystemUtil; - -/** - * 操作系统工具类 - */ -public class OSUtils { - - public static String getHostName() { - return SystemUtil.getHostInfo().getName(); - } - -} diff --git a/common/common-framework/src/main/java/cn/iocoder/common/framework/util/StringUtils.java b/common/common-framework/src/main/java/cn/iocoder/common/framework/util/StringUtils.java deleted file mode 100644 index a1da47551..000000000 --- a/common/common-framework/src/main/java/cn/iocoder/common/framework/util/StringUtils.java +++ /dev/null @@ -1,39 +0,0 @@ -package cn.iocoder.common.framework.util; - -import cn.hutool.core.lang.UUID; - -import java.util.*; - -public class StringUtils { - - public static boolean hasText(String str) { - return org.springframework.util.StringUtils.hasText(str); - } - - public static String join(Collection coll, String delim) { - return org.springframework.util.StringUtils.collectionToDelimitedString(coll, delim); - } - - public static List split(String toSplit, String delim) { - String[] stringArray = org.springframework.util.StringUtils.tokenizeToStringArray(toSplit, delim); - return Arrays.asList(stringArray); - } - - public static List splitToInt(String toSplit, String delim) { - String[] stringArray = org.springframework.util.StringUtils.tokenizeToStringArray(toSplit, delim); - List array = new ArrayList<>(stringArray.length); - for (String string : stringArray) { - array.add(Integer.valueOf(string)); - } - return array; - } - - public static String substring(String str, int start) { - return org.apache.commons.lang3.StringUtils.substring(str, start); - } - - public static String uuid(boolean isSimple) { - return UUID.fastUUID().toString(isSimple); - } - -} diff --git a/common/common-framework/src/main/java/cn/iocoder/common/framework/util/ValidationUtil.java b/common/common-framework/src/main/java/cn/iocoder/common/framework/util/ValidationUtil.java deleted file mode 100644 index ff1de11dd..000000000 --- a/common/common-framework/src/main/java/cn/iocoder/common/framework/util/ValidationUtil.java +++ /dev/null @@ -1,29 +0,0 @@ -package cn.iocoder.common.framework.util; - -import java.util.regex.Pattern; - -/** - * 校验工具类 - */ -public class ValidationUtil { - - private static Pattern PATTERN_URL = Pattern.compile("^(https?|ftp|file)://[-a-zA-Z0-9+&@#/%?=~_|!:,.;]*[-a-zA-Z0-9+&@#/%=~_|]"); - - public static boolean isMobile(String mobile) { - if (mobile == null || mobile.length() != 11) { - return false; - } - // TODO 芋艿,后面完善手机校验 - return true; - } - - public static boolean isURL(String url) { - return StringUtils.hasText(url) - && PATTERN_URL.matcher(url).matches(); - } - - public static void main(String[] args) { - System.out.println(isURL("http://www.iocoder.cn")); - } - -} diff --git a/common/common-framework/src/main/java/cn/iocoder/common/framework/vo/CommonResult.java b/common/common-framework/src/main/java/cn/iocoder/common/framework/vo/CommonResult.java deleted file mode 100644 index dfaec09f9..000000000 --- a/common/common-framework/src/main/java/cn/iocoder/common/framework/vo/CommonResult.java +++ /dev/null @@ -1,154 +0,0 @@ -package cn.iocoder.common.framework.vo; - -import cn.iocoder.common.framework.exception.ErrorCode; -import cn.iocoder.common.framework.exception.GlobalException; -import cn.iocoder.common.framework.exception.ServiceException; -import cn.iocoder.common.framework.exception.enums.GlobalErrorCodeConstants; -import com.alibaba.fastjson.annotation.JSONField; -import org.springframework.util.Assert; - -import java.io.Serializable; - -/** - * 通用返回 - * - * @param 数据泛型 - */ -public final class CommonResult implements Serializable { - - /** - * 错误码 - * - * @see ErrorCode#getCode() - */ - private Integer code; - /** - * 返回数据 - */ - private T data; - /** - * 错误提示,用户可阅读 - * - * @see ErrorCode#getMessage() () - */ - private String message; - /** - * 错误明细,内部调试错误 - */ - private String detailMessage; - - /** - * 将传入的 result 对象,转换成另外一个泛型结果的对象 - * - * 因为 A 方法返回的 CommonResult 对象,不满足调用其的 B 方法的返回,所以需要进行转换。 - * - * @param result 传入的 result 对象 - * @param 返回的泛型 - * @return 新的 CommonResult 对象 - */ - public static CommonResult error(CommonResult result) { - return error(result.getCode(), result.getMessage(), result.detailMessage); - } - - public static CommonResult error(Integer code, String message) { - return error(code, message, null); - } - - public static CommonResult error(Integer code, String message, String detailMessage) { - Assert.isTrue(!GlobalErrorCodeConstants.SUCCESS.getCode().equals(code), "code 必须是错误的!"); - CommonResult result = new CommonResult<>(); - result.code = code; - result.message = message; - result.detailMessage = detailMessage; - return result; - } - - public static CommonResult success(T data) { - CommonResult result = new CommonResult<>(); - result.code = GlobalErrorCodeConstants.SUCCESS.getCode(); - result.data = data; - result.message = ""; - return result; - } - - public Integer getCode() { - return code; - } - - public void setCode(Integer code) { - this.code = code; - } - - public String getMessage() { - return message; - } - - public void setMessage(String message) { - this.message = message; - } - - public T getData() { - return data; - } - - public void setData(T data) { - this.data = data; - } - - public String getDetailMessage() { - return detailMessage; - } - - public CommonResult setDetailMessage(String detailMessage) { - this.detailMessage = detailMessage; - return this; - } - - @JSONField(serialize = false) // 避免序列化 - public boolean isSuccess() { - return GlobalErrorCodeConstants.SUCCESS.getCode().equals(code); - } - - @JSONField(serialize = false) // 避免序列化 - public boolean isError() { - return !isSuccess(); - } - - @Override - public String toString() { - return "CommonResult{" + - "code=" + code + - ", data=" + data + - ", message='" + message + '\'' + - ", detailMessage='" + detailMessage + '\'' + - '}'; - } - - // ========= 和 Exception 异常体系集成 ========= - - /** - * 判断是否有异常。如果有,则抛出 {@link GlobalException} 或 {@link ServiceException} 异常 - */ - public void checkError() throws GlobalException, ServiceException { - if (isSuccess()) { - return; - } - // 全局异常 - if (GlobalErrorCodeConstants.isMatch(code)) { - throw new GlobalException(code, message).setDetailMessage(detailMessage); - } - // 业务异常 - throw new ServiceException(code, message).setDetailMessage(detailMessage); - } - - public static CommonResult error(ServiceException serviceException) { - return error(serviceException.getCode(), serviceException.getMessage(), - serviceException.getDetailMessage()); - } - - public static CommonResult error(GlobalException globalException) { - return error(globalException.getCode(), globalException.getMessage(), - globalException.getDetailMessage()); - } - -} diff --git a/common/common-framework/src/main/java/cn/iocoder/common/framework/vo/PageParam.java b/common/common-framework/src/main/java/cn/iocoder/common/framework/vo/PageParam.java deleted file mode 100644 index 6f371430f..000000000 --- a/common/common-framework/src/main/java/cn/iocoder/common/framework/vo/PageParam.java +++ /dev/null @@ -1,46 +0,0 @@ -package cn.iocoder.common.framework.vo; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import org.hibernate.validator.constraints.Range; - -import javax.validation.constraints.Min; -import javax.validation.constraints.NotNull; -import java.io.Serializable; - -@ApiModel("分页参数") -public class PageParam implements Serializable { - - @ApiModelProperty(value = "页码,从 1 开始", required = true,example = "1") - @NotNull(message = "页码不能为空") - @Min(value = 1, message = "页码最小值为 1") - private Integer pageNo; - - @ApiModelProperty(value = "每页条数,最大值为 100", required = true, example = "10") - @NotNull(message = "每页条数不能为空") - @Range(min = 1, max = 100, message = "条数范围为 [1, 100]") - private Integer pageSize; - - public Integer getPageNo() { - return pageNo; - } - - public PageParam setPageNo(Integer pageNo) { - this.pageNo = pageNo; - return this; - } - - public Integer getPageSize() { - return pageSize; - } - - public PageParam setPageSize(Integer pageSize) { - this.pageSize = pageSize; - return this; - } - -// public final int getOffset() { -// return (pageNo - 1) * pageSize; -// } - -} diff --git a/common/common-framework/src/test/java/cn/iocoder/common/framework/util/DateUtilTest.java b/common/common-framework/src/test/java/cn/iocoder/common/framework/util/DateUtilTest.java deleted file mode 100644 index 91f2ddcbe..000000000 --- a/common/common-framework/src/test/java/cn/iocoder/common/framework/util/DateUtilTest.java +++ /dev/null @@ -1,61 +0,0 @@ -package cn.iocoder.common.framework.util; - -import org.junit.Assert; -import org.junit.Ignore; -import org.junit.Test; -import java.util.Date; -import java.util.GregorianCalendar; - -public class DateUtilTest { - - @Test - @Ignore // 暂时忽略,测试不通过,add by 芋艿 - public void testAddDate() { - Assert.assertNull(DateUtil.addDate(0, 0)); - Assert.assertEquals(new Date(1_778_410_800_000L), DateUtil.addDate( - new Date(1_515_585_600_000L), 2, 100)); - } - - @Test - @Ignore // 暂时忽略,测试不通过,add by 芋艿 - public void testFormat() { - Assert.assertEquals("", DateUtil.format(null, null)); - Assert.assertEquals("2018-01-10:12:00:00", DateUtil.format( - new Date(1_515_585_600_000L), "yyyy-MM-dd:HH:mm:ss")); - } - - @Test - @Ignore // 暂时忽略,测试不通过,add by 芋艿 - public void testGetDayBegin() { - Assert.assertNull(DateUtil.getDayBegin(null)); - Assert.assertEquals(new Date(1_515_542_400_000L), - DateUtil.getDayBegin(new Date(1_515_585_600_000L))); - } - - @Test - @Ignore // 暂时忽略,测试不通过,add by 芋艿 - public void testGetDayEnd() { - Assert.assertNull(DateUtil.getDayEnd(null)); - Assert.assertEquals(new Date(1_515_628_799_999L), DateUtil.getDayEnd( - new Date(1_515_585_600_000L))); - } - - @Test - public void testIsBetween() { - Assert.assertTrue(DateUtil.isBetween(DateUtil.getDayBegin(), - DateUtil.getDayEnd())); - Assert.assertFalse(DateUtil.isBetween( - DateUtil.getDayBegin(new Date(0L)), - DateUtil.getDayEnd(new Date(100_000L)))); - } - - @Test - public void testSetCalender() { - final GregorianCalendar calendar = new GregorianCalendar(); - DateUtil.setCalender(calendar, 2, 30, 50, 0); - - Assert.assertEquals(2, calendar.getTime().getHours()); - Assert.assertEquals(30, calendar.getTime().getMinutes()); - Assert.assertEquals(50, calendar.getTime().getSeconds()); - } -} diff --git a/common/mall-security-annotations/pom.xml b/common/mall-security-annotations/pom.xml deleted file mode 100644 index 9b5840ab5..000000000 --- a/common/mall-security-annotations/pom.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - common - cn.iocoder.mall - 1.0-SNAPSHOT - - 4.0.0 - - mall-security-annotations - - - diff --git a/common/mall-security-annotations/src/main/java/cn/iocoder/security/annotations/RequiresAuthenticate.java b/common/mall-security-annotations/src/main/java/cn/iocoder/security/annotations/RequiresAuthenticate.java deleted file mode 100644 index 98d5ba9f8..000000000 --- a/common/mall-security-annotations/src/main/java/cn/iocoder/security/annotations/RequiresAuthenticate.java +++ /dev/null @@ -1,18 +0,0 @@ -package cn.iocoder.security.annotations; - -import java.lang.annotation.*; - -/** - * 要求用户认证(登陆)注解。通过将该注解添加到 Controller 上,会自动校验用户是否登陆。 - * - * 默认请求下,用户访问的 API 接口,无需登陆。主要的考虑是, - * 1. 需要用户登陆的接口,本身会获取在线用户的编号。如果不添加 @RequiresLogin 注解就会报错。 - * 2. 大多数情况下,用户的 API 接口无需登陆。 - * - * ps:同样适用于管理员 Admin - */ -@Documented -@Target({ElementType.METHOD}) // 暂时不支持 ElementType.TYPE ,因为没有场景 -@Retention(RetentionPolicy.RUNTIME) -public @interface RequiresAuthenticate { -} diff --git a/common/mall-security-annotations/src/main/java/cn/iocoder/security/annotations/RequiresNone.java b/common/mall-security-annotations/src/main/java/cn/iocoder/security/annotations/RequiresNone.java deleted file mode 100644 index efc4801a4..000000000 --- a/common/mall-security-annotations/src/main/java/cn/iocoder/security/annotations/RequiresNone.java +++ /dev/null @@ -1,12 +0,0 @@ -package cn.iocoder.security.annotations; - -import java.lang.annotation.*; - -/** - * 通过将该注解添加到 Controller 的方法上,声明无需进行登陆 - */ -@Documented -@Target({ElementType.METHOD}) // 暂时不支持 ElementType.TYPE ,因为没有场景 -@Retention(RetentionPolicy.RUNTIME) -public @interface RequiresNone { -} diff --git a/common/mall-security-annotations/src/main/java/cn/iocoder/security/annotations/RequiresPermissions.java b/common/mall-security-annotations/src/main/java/cn/iocoder/security/annotations/RequiresPermissions.java deleted file mode 100644 index efb21c235..000000000 --- a/common/mall-security-annotations/src/main/java/cn/iocoder/security/annotations/RequiresPermissions.java +++ /dev/null @@ -1,24 +0,0 @@ -package cn.iocoder.security.annotations; - -import java.lang.annotation.*; - -/** - * 参考 Shiro @RequiresPermissions 设计 http://shiro.apache.org/static/1.3.2/apidocs/org/apache/shiro/authz/annotation/RequiresPermissions.html - * - * 通过将该注解添加到 Controller 的方法上,进行授权鉴定 - * - * ps:目前暂时只有管理员 Admin 使用到 - */ -@Documented -@Target({ElementType.METHOD}) // 暂时不支持 ElementType.TYPE ,因为没有场景 -@Retention(RetentionPolicy.RUNTIME) -public @interface RequiresPermissions { - - /** - * 当有多个标识时,必须全部拥有权限,才可以操作 - * - * @return 权限标识数组 - */ - String[] value() default {}; - -} diff --git a/common/mall-spring-boot-starter-cache/pom.xml b/common/mall-spring-boot-starter-cache/pom.xml deleted file mode 100644 index f41982b20..000000000 --- a/common/mall-spring-boot-starter-cache/pom.xml +++ /dev/null @@ -1,36 +0,0 @@ - - - - onemall - cn.iocoder.mall - 1.0-SNAPSHOT - - 4.0.0 - - mall-spring-boot-starter-cache - - - - org.springframework.boot - spring-boot-starter-data-redis - - - - org.redisson - redisson - 3.10.6 - - - - redis.clients - jedis - 3.1.0 - - - - - - - \ No newline at end of file diff --git a/common/mall-spring-boot-starter-cache/src/main/java/cn/iocoder/mall/cache/config/JedisClient.java b/common/mall-spring-boot-starter-cache/src/main/java/cn/iocoder/mall/cache/config/JedisClient.java deleted file mode 100644 index 6a5ef8dd5..000000000 --- a/common/mall-spring-boot-starter-cache/src/main/java/cn/iocoder/mall/cache/config/JedisClient.java +++ /dev/null @@ -1,79 +0,0 @@ -package cn.iocoder.mall.cache.config; - - -import org.springframework.stereotype.Component; -import org.springframework.util.StringUtils; -import redis.clients.jedis.Jedis; -import redis.clients.jedis.JedisSentinelPool; - -import javax.annotation.PostConstruct; -import javax.annotation.Resource; - - -@Component -public class JedisClient { - - @Resource - private static JedisSentinelPool jedisSentinelPool; - - public static String get(String key) { - Jedis jedis = null; - try { - jedis = jedisSentinelPool.getResource(); - return jedis.get(key); - } catch (Exception e) { - } finally { - if (jedis != null) { - jedis.close(); - } - } - return ""; - } - - public static boolean set(String key, String value) { - Jedis jedis = null; - try { - jedis = jedisSentinelPool.getResource(); - String ret = jedis.set(key, value); - return "ok".equalsIgnoreCase(ret); - } catch (Exception e) { - } finally { - if (jedis != null) { - jedis.close(); - } - } - return false; - } - - public static boolean set(String key, String value, int seconds) { - Jedis jedis = null; - try { - jedis = jedisSentinelPool.getResource(); - String ret = jedis.set(key, value); - jedis.expire(key, seconds); - return "ok".equalsIgnoreCase(ret); - } catch (Exception e) { - } finally { - if (jedis != null) { - jedis.close(); - } - } - return false; - } - - public static boolean del(String key) { - Long removedSize = 0L; - Jedis jedis = null; - try { - jedis = jedisSentinelPool.getResource(); - removedSize = jedis.del(key); - } catch (Exception e) { - } finally { - if (jedis != null) { - jedis.close(); - } - } - return removedSize > 0; - } - -} diff --git a/common/mall-spring-boot-starter-cache/src/main/java/cn/iocoder/mall/cache/config/RedissonClient.java b/common/mall-spring-boot-starter-cache/src/main/java/cn/iocoder/mall/cache/config/RedissonClient.java deleted file mode 100644 index baf19fda4..000000000 --- a/common/mall-spring-boot-starter-cache/src/main/java/cn/iocoder/mall/cache/config/RedissonClient.java +++ /dev/null @@ -1,51 +0,0 @@ -package cn.iocoder.mall.cache.config; - - -import org.redisson.Redisson; -import org.redisson.config.Config; -import org.redisson.config.ReadMode; -import org.redisson.config.SentinelServersConfig; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Bean; -import org.springframework.stereotype.Component; - - -import javax.annotation.Resource; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - - -@Component -public class RedissonClient { - - @Value("${spring.redis.database}") - private int database; - - @Value("${spring.redis.sentinel.master}") - private String master; - - @Value("${spring.redis.sentinel.nodes}") - private String nodes; - - /** - * 哨兵模式 redisson 客户端 - * @return - */ - @Bean - public org.redisson.api.RedissonClient redissonClient() { - Config config = new Config(); - List nodes = Arrays.asList(this.nodes.split(",")); - List newNodes = new ArrayList(nodes.size()); - nodes .forEach((index) -> newNodes.add( - index.startsWith("redis://") ? index : "redis://" + index)); - - SentinelServersConfig serverConfig = config.useSentinelServers() - .addSentinelAddress(newNodes.toArray(new String[3])) - .setMasterName(this.master) - .setReadMode(ReadMode.SLAVE) ; - - serverConfig.setDatabase(this.database); - return Redisson.create(config); - } -} diff --git a/common/mall-spring-boot-starter-cache/src/main/java/cn/iocoder/mall/cache/config/SpringDataRedisConfig.java b/common/mall-spring-boot-starter-cache/src/main/java/cn/iocoder/mall/cache/config/SpringDataRedisConfig.java deleted file mode 100644 index 690dc13d6..000000000 --- a/common/mall-spring-boot-starter-cache/src/main/java/cn/iocoder/mall/cache/config/SpringDataRedisConfig.java +++ /dev/null @@ -1,165 +0,0 @@ -package cn.iocoder.mall.cache.config; - -import com.fasterxml.jackson.annotation.JsonAutoDetect; -import com.fasterxml.jackson.annotation.PropertyAccessor; -import com.fasterxml.jackson.databind.ObjectMapper; -import org.redisson.Redisson; -import org.redisson.api.RedissonClient; -import org.redisson.config.Config; -import org.redisson.config.ReadMode; -import org.redisson.config.SentinelServersConfig; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.cache.CacheManager; -import org.springframework.cache.annotation.CachingConfigurerSupport; -import org.springframework.cache.annotation.EnableCaching; -import org.springframework.cache.interceptor.KeyGenerator; -import org.springframework.cache.interceptor.SimpleKeyGenerator; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.data.redis.cache.RedisCacheConfiguration; -import org.springframework.data.redis.cache.RedisCacheManager; -import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory; -import org.springframework.data.redis.core.RedisTemplate; -import org.springframework.data.redis.core.StringRedisTemplate; -import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer; -import org.springframework.data.redis.serializer.RedisSerializationContext; -import org.springframework.data.redis.serializer.RedisSerializer; -import org.springframework.data.redis.serializer.StringRedisSerializer; -import redis.clients.jedis.Jedis; - -import java.lang.reflect.Method; -import java.time.Duration; -import java.util.*; - -import static com.fasterxml.jackson.databind.DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES; - -@Configuration -@EnableCaching -public class SpringDataRedisConfig extends CachingConfigurerSupport { - - @Value("${spring.redis.database}") - private int database; - - @Value("${spring.redis.sentinel.master}") - private String master; - - @Value("${spring.redis.sentinel.nodes}") - private String nodes; - - private static RedisTemplate redisTemplate; - - static { - - } - - public static String get(String key) { - redisTemplate.opsForValue().get(key); - return ""; - } - - public static boolean set(String key, String value) { - redisTemplate.opsForValue().set(key,value); - return false; - } - - public static boolean set(String key, String value, int seconds) { - redisTemplate.opsForValue().set(key,value,seconds); - return false; - } - - - /** - * json序列化 - * @return - */ - @Bean - public RedisSerializer jackson2JsonRedisSerializer() { - //使用Jackson2JsonRedisSerializer来序列化和反序列化redis的value值 - Jackson2JsonRedisSerializer serializer = new Jackson2JsonRedisSerializer(Object.class); - - ObjectMapper mapper = new ObjectMapper(); - mapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); - mapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL); - mapper.configure(FAIL_ON_UNKNOWN_PROPERTIES, false); - serializer.setObjectMapper(mapper); - return serializer; - } - - @Bean - public RedisTemplate redisTemplate(LettuceConnectionFactory lettuceConnectionFactory) { - //StringRedisTemplate的构造方法中默认设置了stringSerializer - RedisTemplate template = new RedisTemplate<>(); - //set key serializer - StringRedisSerializer stringRedisSerializer = new StringRedisSerializer(); - template.setKeySerializer(stringRedisSerializer); - template.setHashKeySerializer(stringRedisSerializer); - - - //set value serializer - template.setDefaultSerializer(jackson2JsonRedisSerializer()); - - template.setConnectionFactory(lettuceConnectionFactory); - template.afterPropertiesSet(); - return template; - } - - @Bean - public StringRedisTemplate stringRedisTemplate(LettuceConnectionFactory lettuceConnectionFactory) { - StringRedisTemplate template = new StringRedisTemplate(); - template.setConnectionFactory(lettuceConnectionFactory); - return template; - } - - @Override - @Bean - public KeyGenerator keyGenerator() { - return new SimpleKeyGenerator() { - - @Override - public Object generate(Object target, Method method, Object... params) { - StringBuilder sb = new StringBuilder(); - sb.append(target.getClass().getName()); - sb.append(".").append(method.getName()); - - StringBuilder paramsSb = new StringBuilder(); - for (Object param : params) { - // 如果不指定,默认生成包含到键值中 - if (param != null) { - paramsSb.append(param.toString()); - } - } - - if (paramsSb.length() > 0) { - sb.append("_").append(paramsSb); - } - return sb.toString(); - } - - }; - - } - - private RedisCacheConfiguration getRedisCacheConfigurationWithTtl(Integer time, int timeType) { - - Duration duration = Duration.ofMillis(time); - if (timeType == 1){//时 - duration = Duration.ofHours(time); - }else if (timeType == 2){//分 - duration = Duration.ofMinutes(time); - }else if (timeType == 3){//秒 - duration = Duration.ofSeconds(time); - } - RedisCacheConfiguration redisCacheConfiguration = RedisCacheConfiguration.defaultCacheConfig(); - redisCacheConfiguration = redisCacheConfiguration - .serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer())) - .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(jackson2JsonRedisSerializer()) - - ) - //超时时间 - .entryTtl(duration); - - return redisCacheConfiguration; - } - -} diff --git a/common/mall-spring-boot-starter-cache/src/main/resources/redis.properties b/common/mall-spring-boot-starter-cache/src/main/resources/redis.properties deleted file mode 100644 index 43529de5d..000000000 --- a/common/mall-spring-boot-starter-cache/src/main/resources/redis.properties +++ /dev/null @@ -1,17 +0,0 @@ -redis.pool.maxIdle=200 -redis.pool.minIdle=10 -#redis.pool.maxActive=600 -redis.pool.maxTotal=1024 -redis.pool.maxWaitMillis=3000 -redis.pool.minEvictableIdleTimeMillis=300000 -redis.pool.numTestsPerEvictionRun=1024 -redis.pool.timeBetweenEvictionRunsMillis=30000 -redis.pool.testOnBorrow=true -redis.pool.testWhileIdle=true -redis.pool.testOnReturn=true - -#Redis 配置 -spring.redis.sentinel.master= -spring.redis.sentinel.nodes= -spring.redis.database= - diff --git a/common/mall-spring-boot-starter-dubbo/pom.xml b/common/mall-spring-boot-starter-dubbo/pom.xml deleted file mode 100644 index 31acd196e..000000000 --- a/common/mall-spring-boot-starter-dubbo/pom.xml +++ /dev/null @@ -1,53 +0,0 @@ - - - - common - cn.iocoder.mall - 1.0-SNAPSHOT - - 4.0.0 - - mall-spring-boot-starter-dubbo - - - - - cn.iocoder.mall - common-framework - - - - - org.springframework.boot - spring-boot-starter-web - true - - - - - - - - - - - org.apache.dubbo - dubbo-spring-boot-starter - - - - - org.slf4j - slf4j-api - - - - - javax.validation - validation-api - - - - diff --git a/common/mall-spring-boot-starter-dubbo/src/main/java/cn/iocoder/mall/dubbo/config/DubboEnvironmentPostProcessor.java b/common/mall-spring-boot-starter-dubbo/src/main/java/cn/iocoder/mall/dubbo/config/DubboEnvironmentPostProcessor.java deleted file mode 100644 index e17fc5974..000000000 --- a/common/mall-spring-boot-starter-dubbo/src/main/java/cn/iocoder/mall/dubbo/config/DubboEnvironmentPostProcessor.java +++ /dev/null @@ -1,66 +0,0 @@ -package cn.iocoder.mall.dubbo.config; - -import cn.iocoder.common.framework.util.OSUtils; -import cn.iocoder.common.framework.util.StringUtils; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.env.EnvironmentPostProcessor; -import org.springframework.core.env.ConfigurableEnvironment; -import org.springframework.core.env.MapPropertySource; -import org.springframework.core.env.MutablePropertySources; -import org.springframework.core.env.PropertySource; -import org.springframework.util.CollectionUtils; - -import java.util.HashMap; -import java.util.Map; - -/** - * Dubbo 配置项的后置处理器,主要目的如下: - * - * 1. 生成 {@link #DUBBO_TAG_PROPERTIES_KEY} 配置项,可用于本地开发环境下的 dubbo.provider.tag 配置项 - */ -public class DubboEnvironmentPostProcessor implements EnvironmentPostProcessor { - - /** - * 默认配置项的 PropertySource 名字 - */ - private static final String PROPERTY_SOURCE_NAME = "mallDubboProperties"; - - /** - * Dubbo 路由标签属性 KEY - */ - private static final String DUBBO_TAG_PROPERTIES_KEY = "DUBBO_TAG"; - - @Override - public void postProcessEnvironment(ConfigurableEnvironment environment, SpringApplication application) { - // 需要修改的配置项 - Map modifyProperties = new HashMap<>(); - // 生成 DUBBO_TAG_PROPERTIES_KEY,使用 hostname - String dubboTag = OSUtils.getHostName(); - if (!StringUtils.hasText(dubboTag)) { - dubboTag = StringUtils.uuid(true); // 兜底,强行生成一个 - } - modifyProperties.put(DUBBO_TAG_PROPERTIES_KEY, dubboTag); - // 添加到 environment 中,排在最优,最低优先级 - addOrReplace(environment.getPropertySources(), modifyProperties); - } - - private void addOrReplace(MutablePropertySources propertySources, Map map) { - if (CollectionUtils.isEmpty(map)) { - return; - } - // 情况一,如果存在 defaultProperties 的 PropertySource,则进行 key 的修改 - if (propertySources.contains(PROPERTY_SOURCE_NAME)) { - PropertySource source = propertySources.get(PROPERTY_SOURCE_NAME); - if (source instanceof MapPropertySource) { - MapPropertySource target = (MapPropertySource) source; - for (String key : map.keySet()) { - target.getSource().put(key, map.get(key)); - } - } - return; - } - // 情况二,不存在 defaultProperties 的 PropertySource,则直接添加到其中 - propertySources.addLast(new MapPropertySource(PROPERTY_SOURCE_NAME, map)); - } - -} diff --git a/common/mall-spring-boot-starter-dubbo/src/main/java/cn/iocoder/mall/dubbo/config/DubboWebAutoConfiguration.java b/common/mall-spring-boot-starter-dubbo/src/main/java/cn/iocoder/mall/dubbo/config/DubboWebAutoConfiguration.java deleted file mode 100644 index e9339d760..000000000 --- a/common/mall-spring-boot-starter-dubbo/src/main/java/cn/iocoder/mall/dubbo/config/DubboWebAutoConfiguration.java +++ /dev/null @@ -1,31 +0,0 @@ -package cn.iocoder.mall.dubbo.config; - -import cn.iocoder.mall.dubbo.core.web.DubboRouterTagWebInterceptor; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.NoSuchBeanDefinitionException; -import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication; -import org.springframework.context.annotation.Configuration; -import org.springframework.web.servlet.config.annotation.InterceptorRegistry; -import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; - -@Configuration -@ConditionalOnWebApplication(type = ConditionalOnWebApplication.Type.SERVLET) -public class DubboWebAutoConfiguration implements WebMvcConfigurer { - - private Logger logger = LoggerFactory.getLogger(DubboWebAutoConfiguration.class); - - // ========== 拦截器相关 ========== - - @Override - public void addInterceptors(InterceptorRegistry registry) { - try { - // 设置为 -1000 的原因,保证在比较前面就处理该逻辑。例如说,认证拦截器; - registry.addInterceptor(new DubboRouterTagWebInterceptor()).order(-1000); - logger.info("[addInterceptors][加载 DubboRouterTagWebInterceptor 拦截器完成]"); - } catch (NoSuchBeanDefinitionException e) { - logger.warn("[addInterceptors][无法获取 DubboRouterTagWebInterceptor 拦截器,无法使用基于 dubbo-tag 请求头进行 Dubbo 标签路由]"); - } - } - -} diff --git a/common/mall-spring-boot-starter-dubbo/src/main/java/cn/iocoder/mall/dubbo/core/router/DubboRouterTagContextHolder.java b/common/mall-spring-boot-starter-dubbo/src/main/java/cn/iocoder/mall/dubbo/core/router/DubboRouterTagContextHolder.java deleted file mode 100644 index 2a658b6b2..000000000 --- a/common/mall-spring-boot-starter-dubbo/src/main/java/cn/iocoder/mall/dubbo/core/router/DubboRouterTagContextHolder.java +++ /dev/null @@ -1,27 +0,0 @@ -package cn.iocoder.mall.dubbo.core.router; - -import cn.iocoder.mall.dubbo.core.filter.DubboProviderRouterTagFilter; - -/** - * Dubbo 路由 Tag 的上下文 - * - * @see DubboProviderRouterTagFilter - * @see cn.iocoder.mall.dubbo.core.web.DubboRouterTagWebInterceptor - */ -public class DubboRouterTagContextHolder { - - private static ThreadLocal tagContext = new ThreadLocal<>(); - - public static void setTag(String tag) { - tagContext.set(tag); - } - - public static String getTag() { - return tagContext.get(); - } - - public static void clear() { - tagContext.remove(); - } - -} diff --git a/common/mall-spring-boot-starter-dubbo/src/main/java/cn/iocoder/mall/dubbo/core/web/DubboRouterTagWebInterceptor.java b/common/mall-spring-boot-starter-dubbo/src/main/java/cn/iocoder/mall/dubbo/core/web/DubboRouterTagWebInterceptor.java deleted file mode 100644 index 17bf0bbc5..000000000 --- a/common/mall-spring-boot-starter-dubbo/src/main/java/cn/iocoder/mall/dubbo/core/web/DubboRouterTagWebInterceptor.java +++ /dev/null @@ -1,45 +0,0 @@ -package cn.iocoder.mall.dubbo.core.web; - -import cn.iocoder.common.framework.util.OSUtils; -import cn.iocoder.common.framework.util.StringUtils; -import cn.iocoder.mall.dubbo.core.cluster.interceptor.DubboConsumerRouterTagClusterInterceptor; -import cn.iocoder.mall.dubbo.core.filter.DubboProviderRouterTagFilter; -import cn.iocoder.mall.dubbo.core.router.DubboRouterTagContextHolder; -import org.springframework.web.servlet.HandlerInterceptor; -import org.springframework.web.servlet.ModelAndView; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -/** - * Dubbo 路由标签的 Web 拦截器,将请求 Header 中的 {@link #HEADER_DUBBO_TAG} 设置到 {@link DubboRouterTagContextHolder} 中。 - * - * @see DubboProviderRouterTagFilter - * @see DubboConsumerRouterTagClusterInterceptor - */ -public class DubboRouterTagWebInterceptor implements HandlerInterceptor { - - private static final String HEADER_DUBBO_TAG = "dubbo-tag"; - - private static final String HOST_NAME_VALUE = "${HOSTNAME}"; - - @Override - public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) { - String tag = request.getHeader(HEADER_DUBBO_TAG); - if (StringUtils.hasText(tag)) { - // 特殊逻辑,解决 IDEA Rest Client 不支持环境变量的读取,所以就服务器来做 - if (HOST_NAME_VALUE.equals(tag)) { - tag = OSUtils.getHostName(); - } - // 设置到 DubboRouterTagContextHolder 上下文 - DubboRouterTagContextHolder.setTag(tag); - } - return true; - } - - @Override - public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) { - DubboRouterTagContextHolder.clear(); - } - -} diff --git a/common/mall-spring-boot-starter-dubbo/src/main/resources/META-INF/dubbo/com.alibaba.dubbo.rpc.Filter b/common/mall-spring-boot-starter-dubbo/src/main/resources/META-INF/dubbo/com.alibaba.dubbo.rpc.Filter deleted file mode 100644 index f81a93f70..000000000 --- a/common/mall-spring-boot-starter-dubbo/src/main/resources/META-INF/dubbo/com.alibaba.dubbo.rpc.Filter +++ /dev/null @@ -1,2 +0,0 @@ -dubboExceptionFilter=cn.iocoder.mall.dubbo.core.filter.DubboProviderExceptionFilter -dubboProviderRouterTagFilter=cn.iocoder.mall.dubbo.core.filter.DubboProviderRouterTagFilter diff --git a/common/mall-spring-boot-starter-dubbo/src/main/resources/META-INF/dubbo/org.apache.dubbo.rpc.cluster.interceptor.ClusterInterceptor b/common/mall-spring-boot-starter-dubbo/src/main/resources/META-INF/dubbo/org.apache.dubbo.rpc.cluster.interceptor.ClusterInterceptor deleted file mode 100644 index bba113398..000000000 --- a/common/mall-spring-boot-starter-dubbo/src/main/resources/META-INF/dubbo/org.apache.dubbo.rpc.cluster.interceptor.ClusterInterceptor +++ /dev/null @@ -1 +0,0 @@ -dubboConsumerRouterTagClusterInterceptor=cn.iocoder.mall.dubbo.core.cluster.interceptor.DubboConsumerRouterTagClusterInterceptor diff --git a/common/mall-spring-boot-starter-dubbo/src/main/resources/META-INF/spring.factories b/common/mall-spring-boot-starter-dubbo/src/main/resources/META-INF/spring.factories deleted file mode 100644 index 4e6ca3aaf..000000000 --- a/common/mall-spring-boot-starter-dubbo/src/main/resources/META-INF/spring.factories +++ /dev/null @@ -1,5 +0,0 @@ -org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ - cn.iocoder.mall.dubbo.config.DubboWebAutoConfiguration - -org.springframework.boot.env.EnvironmentPostProcessor=\ - cn.iocoder.mall.dubbo.config.DubboEnvironmentPostProcessor diff --git a/common/mall-spring-boot-starter-mybatis/pom.xml b/common/mall-spring-boot-starter-mybatis/pom.xml deleted file mode 100644 index becc6ae11..000000000 --- a/common/mall-spring-boot-starter-mybatis/pom.xml +++ /dev/null @@ -1,47 +0,0 @@ - - - - common - cn.iocoder.mall - 1.0-SNAPSHOT - - 4.0.0 - - mall-spring-boot-starter-mybatis - - - - - cn.iocoder.mall - common-framework - - - - - org.mybatis - mybatis - - - org.mybatis.spring.boot - mybatis-spring-boot-starter - - - com.baomidou - mybatis-plus-core - - - com.baomidou - mybatis-plus-boot-starter - - - - - com.alibaba - fastjson - true - - - - diff --git a/common/mall-spring-boot-starter-mybatis/src/main/java/cn/iocoder/mall/mybatis/config/MybatisPlusAutoConfiguration.java b/common/mall-spring-boot-starter-mybatis/src/main/java/cn/iocoder/mall/mybatis/config/MybatisPlusAutoConfiguration.java deleted file mode 100644 index 305f72057..000000000 --- a/common/mall-spring-boot-starter-mybatis/src/main/java/cn/iocoder/mall/mybatis/config/MybatisPlusAutoConfiguration.java +++ /dev/null @@ -1,23 +0,0 @@ -package cn.iocoder.mall.mybatis.config; - -import cn.iocoder.mall.mybatis.core.injector.CustomSqlInject; -import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; -import org.springframework.context.annotation.Bean; -import com.baomidou.mybatisplus.core.injector.ISqlInjector; - -/** - * @author Hccake 2020/8/3 - * @version 1.0 - */ -public class MybatisPlusAutoConfiguration { - - /** - * 自定义方法扩展注入器 - * @return ISqlInjector CustomSqlInject - */ - @Bean - @ConditionalOnMissingBean(ISqlInjector.class) - public ISqlInjector sqlInjector(){ - return new CustomSqlInject(); - } -} diff --git a/common/mall-spring-boot-starter-mybatis/src/main/java/cn/iocoder/mall/mybatis/core/dataobject/BaseDO.java b/common/mall-spring-boot-starter-mybatis/src/main/java/cn/iocoder/mall/mybatis/core/dataobject/BaseDO.java deleted file mode 100644 index fb35f6362..000000000 --- a/common/mall-spring-boot-starter-mybatis/src/main/java/cn/iocoder/mall/mybatis/core/dataobject/BaseDO.java +++ /dev/null @@ -1,45 +0,0 @@ -package cn.iocoder.mall.mybatis.core.dataobject; - -import java.io.Serializable; -import java.util.Date; - -/** - * 基础实体对象 - */ -public class BaseDO implements Serializable { - - /** - * 创建时间 - */ - private Date createTime; - /** - * 最后更新时间 - */ - private Date updateTime; - - @Override - public String toString() { - return "BaseDO{" + - "createTime=" + createTime + - ", updateTime=" + updateTime + - '}'; - } - - public Date getCreateTime() { - return createTime; - } - - public BaseDO setCreateTime(Date createTime) { - this.createTime = createTime; - return this; - } - - public Date getUpdateTime() { - return updateTime; - } - - public BaseDO setUpdateTime(Date updateTime) { - this.updateTime = updateTime; - return this; - } -} diff --git a/common/mall-spring-boot-starter-mybatis/src/main/java/cn/iocoder/mall/mybatis/core/dataobject/DeletableDO.java b/common/mall-spring-boot-starter-mybatis/src/main/java/cn/iocoder/mall/mybatis/core/dataobject/DeletableDO.java deleted file mode 100644 index 9e63947c3..000000000 --- a/common/mall-spring-boot-starter-mybatis/src/main/java/cn/iocoder/mall/mybatis/core/dataobject/DeletableDO.java +++ /dev/null @@ -1,35 +0,0 @@ -package cn.iocoder.mall.mybatis.core.dataobject; - -import com.baomidou.mybatisplus.annotation.TableLogic; - -/** - * extends BaseDO 扩展 delete 操作 - * - * @author Sin - * @time 2019-03-22 22:03 - */ -public class DeletableDO extends BaseDO { - - /** - * 是否删除 - */ - @TableLogic - private Integer deleted; - - @Override - public String toString() { - return "DeletableDO{" + - "deleted=" + deleted + - '}'; - } - - public Integer getDeleted() { - return deleted; - } - - public DeletableDO setDeleted(Integer deleted) { - this.deleted = deleted; - return this; - } - -} diff --git a/common/mall-spring-boot-starter-mybatis/src/main/java/cn/iocoder/mall/mybatis/core/enums/CustomSqlMethodEnum.java b/common/mall-spring-boot-starter-mybatis/src/main/java/cn/iocoder/mall/mybatis/core/enums/CustomSqlMethodEnum.java deleted file mode 100644 index 20079365f..000000000 --- a/common/mall-spring-boot-starter-mybatis/src/main/java/cn/iocoder/mall/mybatis/core/enums/CustomSqlMethodEnum.java +++ /dev/null @@ -1,40 +0,0 @@ -package cn.iocoder.mall.mybatis.core.enums; - -/** - * @author Hccake 2020/8/3 - * @version 1.0 - */ -public enum CustomSqlMethodEnum { - /** - * 批量插入 - */ - INSERT_BATCH("insertByBatch", - "批量插入数据", - ""); - - private final String method; - private final String desc; - private final String sql; - - CustomSqlMethodEnum(String method, String desc, String sql) { - this.method = method; - this.desc = desc; - this.sql = sql; - } - - public String getMethod() { - return method; - } - - public String getDesc() { - return desc; - } - - public String getSql() { - return sql; - } - -} diff --git a/common/mall-spring-boot-starter-mybatis/src/main/java/cn/iocoder/mall/mybatis/core/enums/DeletedStatusEnum.java b/common/mall-spring-boot-starter-mybatis/src/main/java/cn/iocoder/mall/mybatis/core/enums/DeletedStatusEnum.java deleted file mode 100644 index 60dd33625..000000000 --- a/common/mall-spring-boot-starter-mybatis/src/main/java/cn/iocoder/mall/mybatis/core/enums/DeletedStatusEnum.java +++ /dev/null @@ -1,37 +0,0 @@ -package cn.iocoder.mall.mybatis.core.enums; - -import cn.iocoder.mall.mybatis.core.dataobject.DeletableDO; - -/** - * {@link DeletableDO#getDeleted()} delete 状态 - * - * @author Sin - * @time 2019-03-22 21:15 - */ -public enum DeletedStatusEnum { - - DELETED_NO(0, "正常(未删除)"), - DELETED_YES(1, "删除"); - - /** - * 状态值 - */ - private Integer value; - /** - * 状态名 - */ - private String name; - - DeletedStatusEnum(Integer value, String name) { - this.value = value; - this.name = name; - } - - public Integer getValue() { - return value; - } - - public String getName() { - return name; - } -} diff --git a/common/mall-spring-boot-starter-mybatis/src/main/java/cn/iocoder/mall/mybatis/core/injector/CustomSqlInject.java b/common/mall-spring-boot-starter-mybatis/src/main/java/cn/iocoder/mall/mybatis/core/injector/CustomSqlInject.java deleted file mode 100644 index 9cf042af5..000000000 --- a/common/mall-spring-boot-starter-mybatis/src/main/java/cn/iocoder/mall/mybatis/core/injector/CustomSqlInject.java +++ /dev/null @@ -1,23 +0,0 @@ -package cn.iocoder.mall.mybatis.core.injector; - -import cn.iocoder.mall.mybatis.core.injector.method.InsertByBatch; -import com.baomidou.mybatisplus.core.injector.AbstractMethod; -import com.baomidou.mybatisplus.core.injector.DefaultSqlInjector; - -import java.util.List; - -/** - * 自定义 Sql 注入器,继承 MybatisPlus 提供的默认注入器 - * @author Hccake 2020/8/3 - * @version 1.0 - */ -public class CustomSqlInject extends DefaultSqlInjector { - - @Override - public List getMethodList(Class mapperClass) { - List methodList = super.getMethodList(mapperClass); - methodList.add(new InsertByBatch()); - return methodList; - } - -} diff --git a/common/mall-spring-boot-starter-mybatis/src/main/java/cn/iocoder/mall/mybatis/core/injector/method/InsertByBatch.java b/common/mall-spring-boot-starter-mybatis/src/main/java/cn/iocoder/mall/mybatis/core/injector/method/InsertByBatch.java deleted file mode 100644 index 1fb4a78c2..000000000 --- a/common/mall-spring-boot-starter-mybatis/src/main/java/cn/iocoder/mall/mybatis/core/injector/method/InsertByBatch.java +++ /dev/null @@ -1,82 +0,0 @@ -package cn.iocoder.mall.mybatis.core.injector.method; - -import cn.iocoder.mall.mybatis.core.enums.CustomSqlMethodEnum; -import com.baomidou.mybatisplus.annotation.IdType; -import com.baomidou.mybatisplus.core.injector.AbstractMethod; -import com.baomidou.mybatisplus.core.metadata.TableFieldInfo; -import com.baomidou.mybatisplus.core.metadata.TableInfo; -import com.baomidou.mybatisplus.core.metadata.TableInfoHelper; -import com.baomidou.mybatisplus.core.toolkit.StringUtils; -import com.baomidou.mybatisplus.core.toolkit.sql.SqlScriptUtils; -import org.apache.ibatis.executor.keygen.Jdbc3KeyGenerator; -import org.apache.ibatis.executor.keygen.KeyGenerator; -import org.apache.ibatis.executor.keygen.NoKeyGenerator; -import org.apache.ibatis.mapping.MappedStatement; -import org.apache.ibatis.mapping.SqlSource; - -import java.util.List; - -/** - * 批量插入 - * @author Hccake 2020/8/3 - * @version 1.0 - */ -@SuppressWarnings("all") -public class InsertByBatch extends AbstractMethod { - - private final static String ITEM = "item"; - - @Override - public MappedStatement injectMappedStatement(Class mapperClass, Class modelClass, TableInfo tableInfo) { - KeyGenerator keyGenerator = new NoKeyGenerator(); - - CustomSqlMethodEnum sqlMethod = CustomSqlMethodEnum.INSERT_BATCH; - - // ==== 拼接 sql 模板 ============== - StringBuilder columnScriptBuilder = new StringBuilder(LEFT_BRACKET); - StringBuilder valuesScriptBuilder = new StringBuilder(LEFT_BRACKET); - // 主键拼接 - if (tableInfo.havePK()) { - columnScriptBuilder.append(tableInfo.getKeyColumn()).append(COMMA); - valuesScriptBuilder.append(SqlScriptUtils.safeParam(ITEM + DOT + tableInfo.getKeyProperty())).append(COMMA); - } - // 普通字段拼接 - // PS:如有需要可在此实现插入字段过滤 - List fieldList = tableInfo.getFieldList(); - for (TableFieldInfo fieldInfo : fieldList) { - columnScriptBuilder.append(fieldInfo.getColumn()).append(COMMA); - valuesScriptBuilder.append(SqlScriptUtils.safeParam(ITEM + DOT + fieldInfo.getProperty())).append(COMMA); - } - // 替换多余的逗号为括号 - columnScriptBuilder.setCharAt(columnScriptBuilder.length() - 1, ')'); - valuesScriptBuilder.setCharAt(valuesScriptBuilder.length() - 1, ')'); - // sql 模板占位符替换 - String columnScript = columnScriptBuilder.toString(); - String valuesScript = valuesScriptBuilder.toString(); - String sql = String.format(sqlMethod.getSql(), tableInfo.getTableName(), columnScript, valuesScript); - - - // === mybatis 主键逻辑处理:主键生成策略,以及主键回填======= - String keyColumn = null; - String keyProperty = null; - // 表包含主键处理逻辑,如果不包含主键当普通字段处理 - if (StringUtils.isNotBlank(tableInfo.getKeyProperty())) { - if (tableInfo.getIdType() == IdType.AUTO) { - /** 自增主键 */ - keyGenerator = new Jdbc3KeyGenerator(); - keyProperty = tableInfo.getKeyProperty(); - keyColumn = tableInfo.getKeyColumn(); - } else { - if (null != tableInfo.getKeySequence()) { - keyGenerator = TableInfoHelper.genKeyGenerator(sqlMethod.getMethod(), tableInfo, builderAssistant); - keyProperty = tableInfo.getKeyProperty(); - keyColumn = tableInfo.getKeyColumn(); - } - } - } - - // 模板写入 - SqlSource sqlSource = languageDriver.createSqlSource(configuration, sql, modelClass); - return this.addInsertMappedStatement(mapperClass, modelClass, sqlMethod.getMethod(), sqlSource, keyGenerator, keyProperty, keyColumn); - } -} diff --git a/common/mall-spring-boot-starter-mybatis/src/main/java/cn/iocoder/mall/mybatis/core/mapper/CommonMapper.java b/common/mall-spring-boot-starter-mybatis/src/main/java/cn/iocoder/mall/mybatis/core/mapper/CommonMapper.java deleted file mode 100644 index 5eaaddcbf..000000000 --- a/common/mall-spring-boot-starter-mybatis/src/main/java/cn/iocoder/mall/mybatis/core/mapper/CommonMapper.java +++ /dev/null @@ -1,21 +0,0 @@ -package cn.iocoder.mall.mybatis.core.mapper; - -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import org.apache.ibatis.annotations.Param; - -import java.util.Collection; - -/** - * Mapper 层基类 - * @author Hccake 2020/8/3 - * @version 1.0 - */ -public interface CommonMapper extends BaseMapper { - - /** - * 批量插入 - * @param collection 批量插入数据 - * @return ignore - */ - int insertByBatch(@Param("collection") Collection collection); -} diff --git a/common/mall-spring-boot-starter-mybatis/src/main/java/cn/iocoder/mall/mybatis/core/type/JSONTypeHandler.java b/common/mall-spring-boot-starter-mybatis/src/main/java/cn/iocoder/mall/mybatis/core/type/JSONTypeHandler.java deleted file mode 100644 index 38334e556..000000000 --- a/common/mall-spring-boot-starter-mybatis/src/main/java/cn/iocoder/mall/mybatis/core/type/JSONTypeHandler.java +++ /dev/null @@ -1,70 +0,0 @@ -package cn.iocoder.mall.mybatis.core.type; - -import com.alibaba.fastjson.JSON; -import org.apache.ibatis.type.BaseTypeHandler; -import org.apache.ibatis.type.JdbcType; - -import java.sql.CallableStatement; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; - -/** - * TODO 芋艿 - * - * 参考 https://www.cnblogs.com/waterystone/p/5547254.html - * - * 后续,补充下注释和测试类,以及文章。 - * - * @param - */ -public class JSONTypeHandler extends BaseTypeHandler { - - private Class clazz; - - public JSONTypeHandler(Class clazz) { - if (clazz == null) throw new IllegalArgumentException("Type argument cannot be null"); - this.clazz = clazz; - } - - @Override - public void setNonNullParameter(PreparedStatement ps, int i, T parameter, JdbcType jdbcType) throws SQLException { - ps.setString(i, this.toJson(parameter)); - } - - @Override - public T getNullableResult(ResultSet rs, String columnName) throws SQLException { - return this.toObject(rs.getString(columnName), clazz); - } - - @Override - public T getNullableResult(ResultSet rs, int columnIndex) throws SQLException { - return this.toObject(rs.getString(columnIndex), clazz); - } - - @Override - public T getNullableResult(CallableStatement cs, int columnIndex) throws SQLException { - return this.toObject(cs.getString(columnIndex), clazz); - } - - private String toJson(T object) { - try { - return JSON.toJSONString(object); - } catch (Exception e) { - throw new RuntimeException(e); - } - } - - private T toObject(String content, Class clazz) { - if (content != null && !content.isEmpty()) { - try { - return (T) JSON.parseObject(content, clazz); - } catch (Exception e) { - throw new RuntimeException(e); - } - } else { - return null; - } - } - -} diff --git a/common/mall-spring-boot-starter-mybatis/src/main/java/cn/iocoder/mall/mybatis/core/util/PageUtil.java b/common/mall-spring-boot-starter-mybatis/src/main/java/cn/iocoder/mall/mybatis/core/util/PageUtil.java deleted file mode 100644 index 8216c8224..000000000 --- a/common/mall-spring-boot-starter-mybatis/src/main/java/cn/iocoder/mall/mybatis/core/util/PageUtil.java +++ /dev/null @@ -1,35 +0,0 @@ -package cn.iocoder.mall.mybatis.core.util; - -import cn.iocoder.common.framework.util.CollectionUtils; -import cn.iocoder.common.framework.vo.PageParam; -import cn.iocoder.common.framework.vo.SortingField; -import com.baomidou.mybatisplus.core.metadata.OrderItem; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; - -import java.util.Collection; -import java.util.stream.Collectors; - -/** - * 分页工具里 - * - * 目前主要用于 {@link Page} 的构建 - */ -public class PageUtil { - - public static Page build(PageParam pageParam) { - return build(pageParam, null); - } - - public static Page build(PageParam pageParam, Collection sortingFields) { - // 页码 + 数量 - Page page = new Page<>(pageParam.getPageNo(), pageParam.getPageSize()); - // 排序字段 - if (!CollectionUtils.isEmpty(sortingFields)) { - page.addOrder(sortingFields.stream().map(sortingField -> SortingField.ORDER_ASC.equals(sortingField.getOrder()) ? - OrderItem.asc(sortingField.getField()) : OrderItem.desc(sortingField.getField())) - .collect(Collectors.toList())); - } - return page; - } - -} diff --git a/common/mall-spring-boot-starter-redis/pom.xml b/common/mall-spring-boot-starter-redis/pom.xml deleted file mode 100644 index 479f37306..000000000 --- a/common/mall-spring-boot-starter-redis/pom.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - - common - cn.iocoder.mall - 1.0-SNAPSHOT - - 4.0.0 - - mall-spring-boot-starter-redis - - - - org.redisson - redisson-spring-boot-starter - - - - diff --git a/common/mall-spring-boot-starter-redis/src/main/java/cn/iocoder/mall/redis/core/RedisKeyDefine.java b/common/mall-spring-boot-starter-redis/src/main/java/cn/iocoder/mall/redis/core/RedisKeyDefine.java deleted file mode 100644 index 868de21bf..000000000 --- a/common/mall-spring-boot-starter-redis/src/main/java/cn/iocoder/mall/redis/core/RedisKeyDefine.java +++ /dev/null @@ -1,71 +0,0 @@ -package cn.iocoder.mall.redis.core; - -import java.time.Duration; - -/** - * Redis Key 定义类 - */ -public class RedisKeyDefine { - - public enum KeyTypeEnum { - - STRING, - LIST, - HASH, - SET, - ZSET, - STREAM, - PUBSUB; - - } - - /** - * 过期时间 - 永不过期 - */ - public static final Duration TIMEOUT_FOREVER = null; - - /** - * Key 模板 - */ - private final String keyTemplate; - /** - * Key 类型的枚举 - */ - private final KeyTypeEnum keyType; - /** - * Value 类型 - * - * 如果是使用分布式锁,设置为 {@link java.util.concurrent.locks.Lock} 类型 - */ - private final Class valueType; - /** - * 过期时间 - * - * 为空时,表示永不过期 {@link #TIMEOUT_FOREVER} - */ - private final Duration timeout; - - public RedisKeyDefine(String keyTemplate, KeyTypeEnum keyType, Class valueType, Duration timeout) { - this.keyTemplate = keyTemplate; - this.keyType = keyType; - this.valueType = valueType; - this.timeout = timeout; - } - - public String getKeyTemplate() { - return keyTemplate; - } - - public KeyTypeEnum getKeyType() { - return keyType; - } - - public Class getValueType() { - return valueType; - } - - public Duration getTimeout() { - return timeout; - } - -} diff --git a/common/mall-spring-boot-starter-rocketmq/pom.xml b/common/mall-spring-boot-starter-rocketmq/pom.xml deleted file mode 100644 index f5b6d52ac..000000000 --- a/common/mall-spring-boot-starter-rocketmq/pom.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - - common - cn.iocoder.mall - 1.0-SNAPSHOT - - 4.0.0 - - mall-spring-boot-starter-rocketmq - - - - - org.apache.rocketmq - rocketmq-spring-boot-starter - - - - diff --git a/common/mall-spring-boot-starter-security-admin/pom.xml b/common/mall-spring-boot-starter-security-admin/pom.xml deleted file mode 100644 index 5a11b847d..000000000 --- a/common/mall-spring-boot-starter-security-admin/pom.xml +++ /dev/null @@ -1,48 +0,0 @@ - - - - common - cn.iocoder.mall - 1.0-SNAPSHOT - - 4.0.0 - - mall-spring-boot-starter-security-admin - - - - - cn.iocoder.mall - system-service-api - 1.0-SNAPSHOT - - - - - org.springframework.boot - spring-boot-configuration-processor - true - - - - - cn.iocoder.mall - mall-spring-boot-starter-web - 1.0-SNAPSHOT - - - - cn.iocoder.mall - mall-security-annotations - - - - - org.apache.dubbo - dubbo - - - - diff --git a/common/mall-spring-boot-starter-security-admin/src/main/java/cn/iocoder/mall/security/admin/config/AdminSecurityAutoConfiguration.java b/common/mall-spring-boot-starter-security-admin/src/main/java/cn/iocoder/mall/security/admin/config/AdminSecurityAutoConfiguration.java deleted file mode 100644 index c49f6f1d9..000000000 --- a/common/mall-spring-boot-starter-security-admin/src/main/java/cn/iocoder/mall/security/admin/config/AdminSecurityAutoConfiguration.java +++ /dev/null @@ -1,60 +0,0 @@ -package cn.iocoder.mall.security.admin.config; - -import cn.iocoder.mall.security.admin.core.interceptor.AdminDemoInterceptor; -import cn.iocoder.mall.security.admin.core.interceptor.AdminSecurityInterceptor; -import cn.iocoder.mall.web.config.CommonWebAutoConfiguration; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.boot.autoconfigure.AutoConfigureAfter; -import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; -import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication; -import org.springframework.boot.context.properties.EnableConfigurationProperties; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.web.servlet.config.annotation.InterceptorRegistry; -import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; - -@Configuration -@AutoConfigureAfter(CommonWebAutoConfiguration.class) // 在 CommonWebAutoConfiguration 之后自动配置,保证过滤器的顺序 -@ConditionalOnWebApplication(type = ConditionalOnWebApplication.Type.SERVLET) -@EnableConfigurationProperties(AdminSecurityProperties.class) -public class AdminSecurityAutoConfiguration implements WebMvcConfigurer { - - private Logger logger = LoggerFactory.getLogger(getClass()); - - @Bean - @ConditionalOnMissingBean - public AdminSecurityProperties adminSecurityProperties() { - return new AdminSecurityProperties(); - } - - // ========== 拦截器相关 ========== - - @Bean - public AdminSecurityInterceptor adminSecurityInterceptor() { - return new AdminSecurityInterceptor(); - } - - @Bean - public AdminDemoInterceptor adminDemoInterceptor() { - return new AdminDemoInterceptor(); - } - - @Override - public void addInterceptors(InterceptorRegistry registry) { - AdminSecurityProperties properties = this.adminSecurityProperties(); - // AdminSecurityInterceptor 拦截器 - registry.addInterceptor(this.adminSecurityInterceptor()) - .excludePathPatterns(properties.getIgnorePaths()) - .excludePathPatterns(properties.getDefaultIgnorePaths()); - logger.info("[addInterceptors][加载 AdminSecurityInterceptor 拦截器完成]"); - // AdminDemoInterceptor 拦截器 - if (Boolean.TRUE.equals(properties.getDemo())) { - registry.addInterceptor(this.adminDemoInterceptor()) - .excludePathPatterns(properties.getIgnorePaths()) - .excludePathPatterns(properties.getDefaultIgnorePaths()); - logger.info("[addInterceptors][加载 AdminDemoInterceptor 拦截器完成]"); - } - } - -} diff --git a/common/mall-spring-boot-starter-security-admin/src/main/java/cn/iocoder/mall/security/admin/config/AdminSecurityProperties.java b/common/mall-spring-boot-starter-security-admin/src/main/java/cn/iocoder/mall/security/admin/config/AdminSecurityProperties.java deleted file mode 100644 index 7c36f8350..000000000 --- a/common/mall-spring-boot-starter-security-admin/src/main/java/cn/iocoder/mall/security/admin/config/AdminSecurityProperties.java +++ /dev/null @@ -1,59 +0,0 @@ -package cn.iocoder.mall.security.admin.config; - -import org.springframework.boot.context.properties.ConfigurationProperties; - -@ConfigurationProperties("mall.security.admin") -public class AdminSecurityProperties { - - private static final String[] DEFAULT_IGNORE_PATHS = new String[]{ - // Swagger 相关 - "/doc.html", "/swagger-resources", "/swagger-resources/**", "/webjars/**", - // Actuator 相关 - }; - - /** - * 演示模式 - 默认值(关闭) - */ - private static final Boolean DEFAULT_DEMO = false; - - /** - * 自定义忽略 Path - */ - private String[] ignorePaths = new String[0]; - /** - * 默认忽略 Path - */ - private String[] defaultIgnorePaths = DEFAULT_IGNORE_PATHS; - /** - * 是否开启演示模式 - */ - private Boolean demo = DEFAULT_DEMO; - - public String[] getIgnorePaths() { - return ignorePaths; - } - - public AdminSecurityProperties setIgnorePaths(String[] ignorePaths) { - this.ignorePaths = ignorePaths; - return this; - } - - public String[] getDefaultIgnorePaths() { - return defaultIgnorePaths; - } - - public AdminSecurityProperties setDefaultIgnorePaths(String[] defaultIgnorePaths) { - this.defaultIgnorePaths = defaultIgnorePaths; - return this; - } - - public Boolean getDemo() { - return demo; - } - - public AdminSecurityProperties setDemo(Boolean demo) { - this.demo = demo; - return this; - } - -} diff --git a/common/mall-spring-boot-starter-security-admin/src/main/java/cn/iocoder/mall/security/admin/core/context/AdminSecurityContext.java b/common/mall-spring-boot-starter-security-admin/src/main/java/cn/iocoder/mall/security/admin/core/context/AdminSecurityContext.java deleted file mode 100644 index 242797584..000000000 --- a/common/mall-spring-boot-starter-security-admin/src/main/java/cn/iocoder/mall/security/admin/core/context/AdminSecurityContext.java +++ /dev/null @@ -1,18 +0,0 @@ -package cn.iocoder.mall.security.admin.core.context; - -import lombok.Data; -import lombok.experimental.Accessors; - -/** - * Admin Security 上下文 - */ -@Data -@Accessors(chain = true) -public class AdminSecurityContext { - - /** - * 管理员编号 - */ - private Integer adminId; - -} diff --git a/common/mall-spring-boot-starter-security-admin/src/main/java/cn/iocoder/mall/security/admin/core/context/AdminSecurityContextHolder.java b/common/mall-spring-boot-starter-security-admin/src/main/java/cn/iocoder/mall/security/admin/core/context/AdminSecurityContextHolder.java deleted file mode 100644 index 357c3c7d4..000000000 --- a/common/mall-spring-boot-starter-security-admin/src/main/java/cn/iocoder/mall/security/admin/core/context/AdminSecurityContextHolder.java +++ /dev/null @@ -1,34 +0,0 @@ -package cn.iocoder.mall.security.admin.core.context; - -/** - * {@link AdminSecurityContext} Holder - * - * 参考 spring security 的 ThreadLocalSecurityContextHolderStrategy 类,简单实现。 - */ -public class AdminSecurityContextHolder { - - private static final ThreadLocal SECURITY_CONTEXT = new ThreadLocal<>(); - - public static void setContext(AdminSecurityContext context) { - SECURITY_CONTEXT.set(context); - } - - public static AdminSecurityContext getContext() { - AdminSecurityContext ctx = SECURITY_CONTEXT.get(); - // 为空时,设置一个空的进去 - if (ctx == null) { - ctx = new AdminSecurityContext(); - SECURITY_CONTEXT.set(ctx); - } - return ctx; - } - - public static void clear() { - SECURITY_CONTEXT.remove(); - } - - public static Integer getAdminId() { - return getContext().getAdminId(); - } - -} diff --git a/common/mall-spring-boot-starter-security-admin/src/main/java/cn/iocoder/mall/security/admin/core/interceptor/AdminDemoInterceptor.java b/common/mall-spring-boot-starter-security-admin/src/main/java/cn/iocoder/mall/security/admin/core/interceptor/AdminDemoInterceptor.java deleted file mode 100644 index 056395c9e..000000000 --- a/common/mall-spring-boot-starter-security-admin/src/main/java/cn/iocoder/mall/security/admin/core/interceptor/AdminDemoInterceptor.java +++ /dev/null @@ -1,31 +0,0 @@ -package cn.iocoder.mall.security.admin.core.interceptor; - -import cn.iocoder.common.framework.exception.util.ServiceExceptionUtil; -import cn.iocoder.mall.security.admin.core.context.AdminSecurityContextHolder; -import cn.iocoder.mall.systemservice.enums.SystemErrorCodeConstants; -import org.springframework.http.HttpMethod; -import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import java.util.Objects; - -/** - * Admin 演示拦截器 - * - * 这是个比较“奇怪”的拦截器,用于演示的管理员账号,禁止使用 POST 请求,从而实现即达到阉割版的演示的效果,又避免影响了数据 - */ -public class AdminDemoInterceptor extends HandlerInterceptorAdapter { - - @Override - public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) { - // 当 Admin 编号等于 1 时,约定为演示账号 - // TODO 芋艿,后续去优化 - if (Objects.equals(AdminSecurityContextHolder.getAdminId(), 1) - && request.getMethod().equalsIgnoreCase(HttpMethod.POST.toString())) { - throw ServiceExceptionUtil.exception(SystemErrorCodeConstants.PERMISSION_DEMO_PERMISSION_DENY); - } - return true; - } - -} diff --git a/common/mall-spring-boot-starter-security-admin/src/main/java/cn/iocoder/mall/security/admin/core/interceptor/AdminSecurityInterceptor.java b/common/mall-spring-boot-starter-security-admin/src/main/java/cn/iocoder/mall/security/admin/core/interceptor/AdminSecurityInterceptor.java deleted file mode 100644 index 8997f95aa..000000000 --- a/common/mall-spring-boot-starter-security-admin/src/main/java/cn/iocoder/mall/security/admin/core/interceptor/AdminSecurityInterceptor.java +++ /dev/null @@ -1,96 +0,0 @@ -package cn.iocoder.mall.security.admin.core.interceptor; - -import cn.iocoder.common.framework.enums.UserTypeEnum; -import cn.iocoder.common.framework.exception.GlobalException; -import cn.iocoder.common.framework.util.CollectionUtils; -import cn.iocoder.common.framework.util.HttpUtil; -import cn.iocoder.common.framework.exception.util.ServiceExceptionUtil; -import cn.iocoder.common.framework.vo.CommonResult; -import cn.iocoder.mall.security.admin.core.context.AdminSecurityContext; -import cn.iocoder.mall.security.admin.core.context.AdminSecurityContextHolder; -import cn.iocoder.mall.systemservice.rpc.oauth.OAuth2Rpc; -import cn.iocoder.mall.systemservice.rpc.oauth.dto.OAuth2AccessTokenRespDTO; -import cn.iocoder.mall.systemservice.rpc.permission.PermissionRpc; -import cn.iocoder.mall.systemservice.rpc.permission.dto.PermissionCheckDTO; -import cn.iocoder.mall.web.core.util.CommonWebUtil; -import cn.iocoder.security.annotations.RequiresNone; -import cn.iocoder.security.annotations.RequiresPermissions; -import org.apache.dubbo.config.annotation.Reference; -import org.springframework.web.method.HandlerMethod; -import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import java.util.Arrays; - -import static cn.iocoder.common.framework.exception.enums.GlobalErrorCodeConstants.UNAUTHORIZED; -import static cn.iocoder.mall.systemservice.enums.SystemErrorCodeConstants.OAUTH_USER_TYPE_ERROR; - -public class AdminSecurityInterceptor extends HandlerInterceptorAdapter { - - @Reference(version = "${dubbo.consumer.OAuth2Rpc.version}") - private OAuth2Rpc oauth2Rpc; - @Reference(version = "${dubbo.consumer.PermissionRpc.version}") - private PermissionRpc permissionRpc; - - @Override - public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) { - // 获得访问令牌 - Integer adminId = this.obtainAdminId(request); - // 校验认证 - this.checkAuthentication((HandlerMethod) handler, adminId); - // 校验权限 - this.checkPermission((HandlerMethod) handler, adminId); - return true; - } - - private Integer obtainAdminId(HttpServletRequest request) { - String accessToken = HttpUtil.obtainAuthorization(request); - Integer adminId = null; - if (accessToken != null) { - CommonResult checkAccessTokenResult = oauth2Rpc.checkAccessToken(accessToken); - checkAccessTokenResult.checkError(); - // 校验用户类型正确 - if (!UserTypeEnum.ADMIN.getValue().equals(checkAccessTokenResult.getData().getUserType())) { - throw ServiceExceptionUtil.exception(OAUTH_USER_TYPE_ERROR); - } - // 获得用户编号 - adminId = checkAccessTokenResult.getData().getUserId(); - // 设置到 Request 中 - CommonWebUtil.setUserId(request, adminId); - CommonWebUtil.setUserType(request, UserTypeEnum.ADMIN.getValue()); - // 设置到 - AdminSecurityContext adminSecurityContext = new AdminSecurityContext().setAdminId(adminId); - AdminSecurityContextHolder.setContext(adminSecurityContext); - } - return adminId; - } - - private void checkAuthentication(HandlerMethod handlerMethod, Integer adminId) { - boolean requiresAuthenticate = !handlerMethod.hasMethodAnnotation(RequiresNone.class); // 对于 ADMIN 来说,默认需登录 - if (requiresAuthenticate && adminId == null) { - throw new GlobalException(UNAUTHORIZED); - } - } - - private void checkPermission(HandlerMethod handlerMethod, Integer adminId) { - RequiresPermissions requiresPermissions = handlerMethod.getMethodAnnotation(RequiresPermissions.class); - if (requiresPermissions == null) { - return; - } - String[] permissions = requiresPermissions.value(); - if (CollectionUtils.isEmpty(permissions)) { - return; - } - // 权限验证 - permissionRpc.checkPermission(new PermissionCheckDTO().setAdminId(adminId).setPermissions(Arrays.asList(permissions))) - .checkError(); - } - - @Override - public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) { - // 清空 SecurityContext - AdminSecurityContextHolder.clear(); - } - -} diff --git a/common/mall-spring-boot-starter-security-admin/src/main/resources/META-INF/spring.factories b/common/mall-spring-boot-starter-security-admin/src/main/resources/META-INF/spring.factories deleted file mode 100644 index f9774e1c8..000000000 --- a/common/mall-spring-boot-starter-security-admin/src/main/resources/META-INF/spring.factories +++ /dev/null @@ -1,2 +0,0 @@ -org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ - cn.iocoder.mall.security.admin.config.AdminSecurityAutoConfiguration diff --git a/common/mall-spring-boot-starter-security-user/pom.xml b/common/mall-spring-boot-starter-security-user/pom.xml deleted file mode 100644 index c998755a4..000000000 --- a/common/mall-spring-boot-starter-security-user/pom.xml +++ /dev/null @@ -1,47 +0,0 @@ - - - - common - cn.iocoder.mall - 1.0-SNAPSHOT - - 4.0.0 - - mall-spring-boot-starter-security-user - - - - - cn.iocoder.mall - system-service-api - 1.0-SNAPSHOT - - - - - org.springframework.boot - spring-boot-configuration-processor - true - - - - - cn.iocoder.mall - mall-spring-boot-starter-web - - - - cn.iocoder.mall - mall-security-annotations - - - - - org.apache.dubbo - dubbo - - - - diff --git a/common/mall-spring-boot-starter-security-user/src/main/java/cn/iocoder/mall/security/user/config/UserSecurityAutoConfiguration.java b/common/mall-spring-boot-starter-security-user/src/main/java/cn/iocoder/mall/security/user/config/UserSecurityAutoConfiguration.java deleted file mode 100644 index 68d4cdacc..000000000 --- a/common/mall-spring-boot-starter-security-user/src/main/java/cn/iocoder/mall/security/user/config/UserSecurityAutoConfiguration.java +++ /dev/null @@ -1,47 +0,0 @@ -package cn.iocoder.mall.security.user.config; - -import cn.iocoder.mall.security.user.core.interceptor.UserSecurityInterceptor; -import cn.iocoder.mall.web.config.CommonWebAutoConfiguration; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.boot.autoconfigure.AutoConfigureAfter; -import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; -import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication; -import org.springframework.boot.context.properties.EnableConfigurationProperties; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.web.servlet.config.annotation.InterceptorRegistry; -import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; - -@Configuration -@AutoConfigureAfter(CommonWebAutoConfiguration.class) // 在 CommonWebAutoConfiguration 之后自动配置,保证过滤器的顺序 -@ConditionalOnWebApplication(type = ConditionalOnWebApplication.Type.SERVLET) -@EnableConfigurationProperties(UserSecurityProperties.class) -public class UserSecurityAutoConfiguration implements WebMvcConfigurer { - - private Logger logger = LoggerFactory.getLogger(getClass()); - - @Bean - @ConditionalOnMissingBean - public UserSecurityProperties userSecurityProperties() { - return new UserSecurityProperties(); - } - - // ========== 拦截器相关 ========== - - @Bean - public UserSecurityInterceptor userSecurityInterceptor() { - return new UserSecurityInterceptor(); - } - - @Override - public void addInterceptors(InterceptorRegistry registry) { - UserSecurityProperties properties = this.userSecurityProperties(); - // UserSecurityInterceptor 拦截器 - registry.addInterceptor(this.userSecurityInterceptor()) - .excludePathPatterns(properties.getIgnorePaths()) - .excludePathPatterns(properties.getDefaultIgnorePaths());; - logger.info("[addInterceptors][加载 UserSecurityInterceptor 拦截器完成]"); - } - -} diff --git a/common/mall-spring-boot-starter-security-user/src/main/java/cn/iocoder/mall/security/user/config/UserSecurityProperties.java b/common/mall-spring-boot-starter-security-user/src/main/java/cn/iocoder/mall/security/user/config/UserSecurityProperties.java deleted file mode 100644 index 7957b9114..000000000 --- a/common/mall-spring-boot-starter-security-user/src/main/java/cn/iocoder/mall/security/user/config/UserSecurityProperties.java +++ /dev/null @@ -1,41 +0,0 @@ -package cn.iocoder.mall.security.user.config; - -import org.springframework.boot.context.properties.ConfigurationProperties; - -@ConfigurationProperties("mall.security.user") -public class UserSecurityProperties { - - private static final String[] DEFAULT_IGNORE_PATHS = new String[]{ - // Swagger 相关 - "/doc.html", "/swagger-resources", "/swagger-resources/**", "/webjars/**", - // Actuator 相关 - }; - - /** - * 自定义忽略 Path - */ - private String[] ignorePaths = new String[0]; - /** - * 默认忽略 Path - */ - private String[] defaultIgnorePaths = DEFAULT_IGNORE_PATHS; - - public String[] getIgnorePaths() { - return ignorePaths; - } - - public UserSecurityProperties setIgnorePaths(String[] ignorePaths) { - this.ignorePaths = ignorePaths; - return this; - } - - public String[] getDefaultIgnorePaths() { - return defaultIgnorePaths; - } - - public UserSecurityProperties setDefaultIgnorePaths(String[] defaultIgnorePaths) { - this.defaultIgnorePaths = defaultIgnorePaths; - return this; - } - -} diff --git a/common/mall-spring-boot-starter-security-user/src/main/java/cn/iocoder/mall/security/user/core/context/UserSecurityContext.java b/common/mall-spring-boot-starter-security-user/src/main/java/cn/iocoder/mall/security/user/core/context/UserSecurityContext.java deleted file mode 100644 index 12ff0904e..000000000 --- a/common/mall-spring-boot-starter-security-user/src/main/java/cn/iocoder/mall/security/user/core/context/UserSecurityContext.java +++ /dev/null @@ -1,18 +0,0 @@ -package cn.iocoder.mall.security.user.core.context; - -import lombok.Data; -import lombok.experimental.Accessors; - -/** - * User Security 上下文 - */ -@Data -@Accessors(chain = true) -public class UserSecurityContext { - - /** - * 用户编号 - */ - private Integer userId; - -} diff --git a/common/mall-spring-boot-starter-security-user/src/main/java/cn/iocoder/mall/security/user/core/context/UserSecurityContextHolder.java b/common/mall-spring-boot-starter-security-user/src/main/java/cn/iocoder/mall/security/user/core/context/UserSecurityContextHolder.java deleted file mode 100644 index 14702639b..000000000 --- a/common/mall-spring-boot-starter-security-user/src/main/java/cn/iocoder/mall/security/user/core/context/UserSecurityContextHolder.java +++ /dev/null @@ -1,35 +0,0 @@ -package cn.iocoder.mall.security.user.core.context; - -/** - * {@link UserSecurityContext} Holder - * - * 参考 spring security 的 ThreadLocalSecurityContextHolderStrategy 类,简单实现。 - */ -public class UserSecurityContextHolder { - - private static final ThreadLocal SECURITY_CONTEXT = new ThreadLocal(); - - public static void setContext(UserSecurityContext context) { - SECURITY_CONTEXT.set(context); - } - - public static UserSecurityContext getContext() { - UserSecurityContext ctx = SECURITY_CONTEXT.get(); - // 为空时,设置一个空的进去 - if (ctx == null) { - ctx = new UserSecurityContext(); - SECURITY_CONTEXT.set(ctx); - } - return ctx; - } - - public static Integer getUserId() { - UserSecurityContext ctx = SECURITY_CONTEXT.get(); - return ctx != null ? ctx.getUserId() : null; - } - - public static void clear() { - SECURITY_CONTEXT.remove(); - } - -} diff --git a/common/mall-spring-boot-starter-security-user/src/main/java/cn/iocoder/mall/security/user/core/interceptor/UserSecurityInterceptor.java b/common/mall-spring-boot-starter-security-user/src/main/java/cn/iocoder/mall/security/user/core/interceptor/UserSecurityInterceptor.java deleted file mode 100644 index 6e9c40ab3..000000000 --- a/common/mall-spring-boot-starter-security-user/src/main/java/cn/iocoder/mall/security/user/core/interceptor/UserSecurityInterceptor.java +++ /dev/null @@ -1,77 +0,0 @@ -package cn.iocoder.mall.security.user.core.interceptor; - -import cn.iocoder.common.framework.enums.UserTypeEnum; -import cn.iocoder.common.framework.exception.util.ServiceExceptionUtil; -import cn.iocoder.common.framework.util.HttpUtil; -import cn.iocoder.common.framework.vo.CommonResult; -import cn.iocoder.mall.security.user.core.context.UserSecurityContext; -import cn.iocoder.mall.security.user.core.context.UserSecurityContextHolder; -import cn.iocoder.mall.systemservice.rpc.oauth.OAuth2Rpc; -import cn.iocoder.mall.systemservice.rpc.oauth.dto.OAuth2AccessTokenRespDTO; -import cn.iocoder.mall.web.core.util.CommonWebUtil; -import cn.iocoder.security.annotations.RequiresAuthenticate; -import cn.iocoder.security.annotations.RequiresPermissions; -import org.apache.dubbo.config.annotation.Reference; -import org.springframework.web.method.HandlerMethod; -import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import static cn.iocoder.common.framework.exception.enums.GlobalErrorCodeConstants.UNAUTHORIZED; -import static cn.iocoder.mall.systemservice.enums.SystemErrorCodeConstants.OAUTH_USER_TYPE_ERROR; - -public class UserSecurityInterceptor extends HandlerInterceptorAdapter { - - @Reference(version = "${dubbo.consumer.OAuth2Rpc.version}") - private OAuth2Rpc oauth2Rpc; - - @Override - public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) { - // 获得访问令牌 - Integer userId = this.obtainUserId(request); - // 校验认证 - this.checkAuthentication((HandlerMethod) handler, userId); - return true; - } - - private Integer obtainUserId(HttpServletRequest request) { - String accessToken = HttpUtil.obtainAuthorization(request); - Integer userId = null; - if (accessToken != null) { - CommonResult checkAccessTokenResult = oauth2Rpc.checkAccessToken(accessToken); - checkAccessTokenResult.checkError(); - // 校验用户类型正确 - if (!UserTypeEnum.USER.getValue().equals(checkAccessTokenResult.getData().getUserType())) { - throw ServiceExceptionUtil.exception(OAUTH_USER_TYPE_ERROR); - } - // 获得用户编号 - userId = checkAccessTokenResult.getData().getUserId(); - // 设置到 Request 中 - CommonWebUtil.setUserId(request, userId); - CommonWebUtil.setUserType(request, UserTypeEnum.USER.getValue()); - // 设置到 - UserSecurityContext userSecurityContext = new UserSecurityContext().setUserId(userId); - UserSecurityContextHolder.setContext(userSecurityContext); - } - return userId; - } - - private void checkAuthentication(HandlerMethod handlerMethod, Integer userId) { - boolean requiresAuthenticate = false; // 对于 USER 来说,默认无需登录 - if (handlerMethod.hasMethodAnnotation(RequiresAuthenticate.class) - || handlerMethod.hasMethodAnnotation(RequiresPermissions.class)) { // 如果需要权限验证,也认为需要认证 - requiresAuthenticate = true; - } - if (requiresAuthenticate && userId == null) { - throw ServiceExceptionUtil.exception(UNAUTHORIZED); - } - } - - @Override - public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) { - // 清空 SecurityContext - UserSecurityContextHolder.clear(); - } - -} diff --git a/common/mall-spring-boot-starter-security-user/src/main/resources/META-INF/spring.factories b/common/mall-spring-boot-starter-security-user/src/main/resources/META-INF/spring.factories deleted file mode 100644 index 716481f0a..000000000 --- a/common/mall-spring-boot-starter-security-user/src/main/resources/META-INF/spring.factories +++ /dev/null @@ -1,2 +0,0 @@ -org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ - cn.iocoder.mall.security.user.config.UserSecurityAutoConfiguration diff --git a/common/mall-spring-boot-starter-sentry/pom.xml b/common/mall-spring-boot-starter-sentry/pom.xml deleted file mode 100644 index 54c0edd9d..000000000 --- a/common/mall-spring-boot-starter-sentry/pom.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - common - cn.iocoder.mall - 1.0-SNAPSHOT - - 4.0.0 - - mall-spring-boot-starter-sentry - - - - io.sentry - sentry-spring-boot-starter - - - io.sentry - sentry-logback - - - - \ No newline at end of file diff --git a/common/mall-spring-boot-starter-sentry/src/main/java/cn/iocoder/mall/sentry/config/CustomSentryAutoConfiguration.java b/common/mall-spring-boot-starter-sentry/src/main/java/cn/iocoder/mall/sentry/config/CustomSentryAutoConfiguration.java deleted file mode 100644 index 771139bea..000000000 --- a/common/mall-spring-boot-starter-sentry/src/main/java/cn/iocoder/mall/sentry/config/CustomSentryAutoConfiguration.java +++ /dev/null @@ -1,39 +0,0 @@ -package cn.iocoder.mall.sentry.config; - -import cn.iocoder.mall.sentry.resolver.DoNothingExceptionResolver; -import io.sentry.spring.SentryExceptionResolver; -import io.sentry.spring.autoconfigure.SentryAutoConfiguration; -import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; -import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.web.servlet.HandlerExceptionResolver; - -/** - * 自定义的 Sentry 自动配置类 - * - * @author Hccake 2020/8/6 - * @version 1.0 - */ -@ConditionalOnClass({HandlerExceptionResolver.class, SentryExceptionResolver.class}) -@ConditionalOnWebApplication -@ConditionalOnProperty(name = "sentry.enabled", havingValue = "true", matchIfMissing = true) -@Configuration(proxyBeanMethods = false) -public class CustomSentryAutoConfiguration { - - /** - * 用于覆盖原有的 SentryStarter 提供的 SentryExceptionResolver 操作 - * 解决使用 log appender 形式推送错误信息与全局异常捕获导致重复推送的情况 - * - * @return DoNothingExceptionResolver - */ - @Bean - @ConditionalOnClass(SentryAutoConfiguration.class) - @ConditionalOnMissingBean(SentryExceptionResolver.class) - public SentryExceptionResolver doNothingExceptionResolver() { - return new DoNothingExceptionResolver(); - } - -} diff --git a/common/mall-spring-boot-starter-sentry/src/main/java/cn/iocoder/mall/sentry/resolver/DoNothingExceptionResolver.java b/common/mall-spring-boot-starter-sentry/src/main/java/cn/iocoder/mall/sentry/resolver/DoNothingExceptionResolver.java deleted file mode 100644 index 6cd0ac8e7..000000000 --- a/common/mall-spring-boot-starter-sentry/src/main/java/cn/iocoder/mall/sentry/resolver/DoNothingExceptionResolver.java +++ /dev/null @@ -1,32 +0,0 @@ -package cn.iocoder.mall.sentry.resolver; - -import io.sentry.spring.SentryExceptionResolver; -import org.springframework.web.servlet.ModelAndView; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -/** - * 默认什么也不做的 SentryExceptionResolver - * - * @author Hccake 2020/8/6 - * @version 1.0 - */ -public class DoNothingExceptionResolver extends SentryExceptionResolver { - - @Override - public ModelAndView resolveException(HttpServletRequest request, - HttpServletResponse response, - Object handler, - Exception ex) { - // do nothing here - - // null = run other HandlerExceptionResolvers to actually handle the exception - return null; - } - - @Override - public int getOrder() { - return Integer.MIN_VALUE; - } -} \ No newline at end of file diff --git a/common/mall-spring-boot-starter-sentry/src/main/resources/META-INF/spring.factories b/common/mall-spring-boot-starter-sentry/src/main/resources/META-INF/spring.factories deleted file mode 100644 index befade37d..000000000 --- a/common/mall-spring-boot-starter-sentry/src/main/resources/META-INF/spring.factories +++ /dev/null @@ -1,2 +0,0 @@ -org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ -cn.iocoder.mall.sentry.config.CustomSentryAutoConfiguration diff --git a/common/mall-spring-boot-starter-swagger/src/main/java/cn/iocoder/mall/swagger/config/SwaggerAutoConfiguration.java b/common/mall-spring-boot-starter-swagger/src/main/java/cn/iocoder/mall/swagger/config/SwaggerAutoConfiguration.java deleted file mode 100644 index fc7c887a8..000000000 --- a/common/mall-spring-boot-starter-swagger/src/main/java/cn/iocoder/mall/swagger/config/SwaggerAutoConfiguration.java +++ /dev/null @@ -1,57 +0,0 @@ -package cn.iocoder.mall.swagger.config; - -import com.github.xiaoymin.knife4j.spring.annotations.EnableKnife4j; -import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; -import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.boot.context.properties.EnableConfigurationProperties; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import springfox.documentation.builders.ApiInfoBuilder; -import springfox.documentation.builders.PathSelectors; -import springfox.documentation.builders.RequestHandlerSelectors; -import springfox.documentation.service.ApiInfo; -import springfox.documentation.spi.DocumentationType; -import springfox.documentation.spring.web.plugins.Docket; -import springfox.documentation.swagger2.annotations.EnableSwagger2; - -/** - * 简单的 Swagger2 自动配置类 - * - * 较为完善的,可以了解 https://mvnrepository.com/artifact/com.spring4all/spring-boot-starter-swagger - */ -@Configuration -@EnableSwagger2 -@EnableKnife4j -@ConditionalOnClass({Docket.class, ApiInfoBuilder.class}) -@ConditionalOnProperty(prefix = "swagger", value = "enable", matchIfMissing = true) // 允许使用 swagger.enable=false 禁用 Swagger -@EnableConfigurationProperties(SwaggerProperties.class) -public class SwaggerAutoConfiguration { - - @Bean - @ConditionalOnMissingBean - public SwaggerProperties swaggerProperties() { - return new SwaggerProperties(); - } - - @Bean - public Docket createRestApi() { - SwaggerProperties properties = swaggerProperties(); - // 创建 Docket 对象 - return new Docket(DocumentationType.SWAGGER_2) - .apiInfo(apiInfo(properties)) - .select() - .apis(RequestHandlerSelectors.basePackage(properties.getBasePackage())) - .paths(PathSelectors.any()) - .build(); - } - - private ApiInfo apiInfo(SwaggerProperties properties) { - return new ApiInfoBuilder() - .title(properties.getTitle()) - .description(properties.getDescription()) - .version(properties.getVersion()) - .build(); - } - -} diff --git a/common/mall-spring-boot-starter-swagger/src/main/java/cn/iocoder/mall/swagger/config/SwaggerProperties.java b/common/mall-spring-boot-starter-swagger/src/main/java/cn/iocoder/mall/swagger/config/SwaggerProperties.java deleted file mode 100644 index 3c7c5739d..000000000 --- a/common/mall-spring-boot-starter-swagger/src/main/java/cn/iocoder/mall/swagger/config/SwaggerProperties.java +++ /dev/null @@ -1,48 +0,0 @@ -package cn.iocoder.mall.swagger.config; - -import org.springframework.boot.context.properties.ConfigurationProperties; - -@ConfigurationProperties("swagger") -public class SwaggerProperties { - - private String title; - private String description; - private String version; - private String basePackage; - - public String getTitle() { - return title; - } - - public SwaggerProperties setTitle(String title) { - this.title = title; - return this; - } - - public String getDescription() { - return description; - } - - public SwaggerProperties setDescription(String description) { - this.description = description; - return this; - } - - public String getVersion() { - return version; - } - - public SwaggerProperties setVersion(String version) { - this.version = version; - return this; - } - - public String getBasePackage() { - return basePackage; - } - - public SwaggerProperties setBasePackage(String basePackage) { - this.basePackage = basePackage; - return this; - } -} diff --git a/common/mall-spring-boot-starter-swagger/src/main/java/cn/iocoder/mall/swagger/package-info.java b/common/mall-spring-boot-starter-swagger/src/main/java/cn/iocoder/mall/swagger/package-info.java deleted file mode 100644 index e30eadecd..000000000 --- a/common/mall-spring-boot-starter-swagger/src/main/java/cn/iocoder/mall/swagger/package-info.java +++ /dev/null @@ -1,4 +0,0 @@ -/** - * 无情的占位类 - */ -package cn.iocoder.mall.swagger; diff --git a/common/mall-spring-boot-starter-swagger/src/main/resources/META-INF/spring.factories b/common/mall-spring-boot-starter-swagger/src/main/resources/META-INF/spring.factories deleted file mode 100644 index 28fc2dc29..000000000 --- a/common/mall-spring-boot-starter-swagger/src/main/resources/META-INF/spring.factories +++ /dev/null @@ -1,2 +0,0 @@ -org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ - cn.iocoder.mall.swagger.config.SwaggerAutoConfiguration diff --git a/common/mall-spring-boot-starter-system-error-code/pom.xml b/common/mall-spring-boot-starter-system-error-code/pom.xml deleted file mode 100644 index 632b313ef..000000000 --- a/common/mall-spring-boot-starter-system-error-code/pom.xml +++ /dev/null @@ -1,46 +0,0 @@ - - - - common - cn.iocoder.mall - 1.0-SNAPSHOT - - 4.0.0 - - mall-spring-boot-starter-system-error-code - - 错误码 ErrorCode 的自动配置功能,提供如下功能: - 1. 远程读取:项目启动时,从 system-service 服务,读取数据库中的 ErrorCode 错误码,实现错误码的提水可配置; - 2. 自动更新:管理员在管理后台修数据库中的 ErrorCode 错误码时,项目自动从 system-service 服务加载最新的 ErrorCode 错误码; - 3. 自动写入:项目启动时,将项目本地的错误码写到 system-service 服务中,方便管理员在管理后台编辑; - - - - - - cn.iocoder.mall - system-service-api - 1.0-SNAPSHOT - - - - - org.springframework.boot - spring-boot-starter - - - org.springframework.boot - spring-boot-configuration-processor - true - - - - - org.apache.dubbo - dubbo - - - - diff --git a/common/mall-spring-boot-starter-system-error-code/src/main/java/cn/iocoder/mall/system/errorcode/config/ErrorCodeAutoConfiguration.java b/common/mall-spring-boot-starter-system-error-code/src/main/java/cn/iocoder/mall/system/errorcode/config/ErrorCodeAutoConfiguration.java deleted file mode 100644 index 3917bb73c..000000000 --- a/common/mall-spring-boot-starter-system-error-code/src/main/java/cn/iocoder/mall/system/errorcode/config/ErrorCodeAutoConfiguration.java +++ /dev/null @@ -1,26 +0,0 @@ -package cn.iocoder.mall.system.errorcode.config; - -import cn.iocoder.mall.system.errorcode.core.ErrorCodeAutoGenerator; -import cn.iocoder.mall.system.errorcode.core.ErrorCodeRemoteLoader; -import org.springframework.boot.context.properties.EnableConfigurationProperties; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.scheduling.annotation.EnableScheduling; - -@Configuration -@EnableConfigurationProperties(ErrorCodeProperties.class) -@EnableScheduling // 开启调度任务的功能,因为 ErrorCodeRemoteLoader 通过定时刷新错误码 -public class ErrorCodeAutoConfiguration { - - @Bean - public ErrorCodeAutoGenerator errorCodeAutoGenerator(ErrorCodeProperties errorCodeProperties) { - return new ErrorCodeAutoGenerator(errorCodeProperties.getGroup()) - .setErrorCodeConstantsClass(errorCodeProperties.getConstantsClass()); - } - - @Bean - public ErrorCodeRemoteLoader errorCodeRemoteLoader(ErrorCodeProperties errorCodeProperties) { - return new ErrorCodeRemoteLoader(errorCodeProperties.getGroup()); - } - -} diff --git a/common/mall-spring-boot-starter-system-error-code/src/main/java/cn/iocoder/mall/system/errorcode/config/ErrorCodeProperties.java b/common/mall-spring-boot-starter-system-error-code/src/main/java/cn/iocoder/mall/system/errorcode/config/ErrorCodeProperties.java deleted file mode 100644 index 7e9aef0b1..000000000 --- a/common/mall-spring-boot-starter-system-error-code/src/main/java/cn/iocoder/mall/system/errorcode/config/ErrorCodeProperties.java +++ /dev/null @@ -1,39 +0,0 @@ -package cn.iocoder.mall.system.errorcode.config; - -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.validation.annotation.Validated; - -import javax.validation.constraints.NotNull; - -@ConfigurationProperties("mall.error-code") -@Validated -public class ErrorCodeProperties { - - /** - * 应用分组 - */ - @NotNull(message = "应用分组不能为空,请设置 mall.error-code.group 配置项,推荐直接使用 spring. application.name 配置项") - private String group; - /** - * 错误码枚举类 - */ - private String constantsClass; - - public String getGroup() { - return group; - } - - public ErrorCodeProperties setGroup(String group) { - this.group = group; - return this; - } - - public String getConstantsClass() { - return constantsClass; - } - - public ErrorCodeProperties setConstantsClass(String constantsClass) { - this.constantsClass = constantsClass; - return this; - } -} diff --git a/common/mall-spring-boot-starter-system-error-code/src/main/java/cn/iocoder/mall/system/errorcode/core/ErrorCodeAutoGenerator.java b/common/mall-spring-boot-starter-system-error-code/src/main/java/cn/iocoder/mall/system/errorcode/core/ErrorCodeAutoGenerator.java deleted file mode 100644 index 49adbef56..000000000 --- a/common/mall-spring-boot-starter-system-error-code/src/main/java/cn/iocoder/mall/system/errorcode/core/ErrorCodeAutoGenerator.java +++ /dev/null @@ -1,84 +0,0 @@ -package cn.iocoder.mall.system.errorcode.core; - -import cn.iocoder.common.framework.exception.ErrorCode; -import cn.iocoder.common.framework.util.StringUtils; -import cn.iocoder.common.framework.vo.CommonResult; -import cn.iocoder.mall.systemservice.rpc.errorcode.ErrorCodeRpc; -import cn.iocoder.mall.systemservice.rpc.errorcode.dto.ErrorCodeAutoGenerateDTO; -import org.apache.dubbo.config.annotation.Reference; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.boot.context.event.ApplicationReadyEvent; -import org.springframework.context.event.EventListener; -import org.springframework.scheduling.annotation.Async; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -public class ErrorCodeAutoGenerator { - - private Logger logger = LoggerFactory.getLogger(ErrorCodeAutoGenerator.class); - - /** - * 应用分组 - */ - private final String group; - /** - * 错误码枚举类 - */ - private String errorCodeConstantsClass; - - @Reference(version = "${dubbo.consumer.ErrorCodeRpc.version}") - private ErrorCodeRpc errorCodeRpc; - - public ErrorCodeAutoGenerator(String group) { - this.group = group; - } - - public ErrorCodeAutoGenerator setErrorCodeConstantsClass(String errorCodeConstantsClass) { - this.errorCodeConstantsClass = errorCodeConstantsClass; - return this; - } - - @EventListener(ApplicationReadyEvent.class) - @Async // 异步,保证项目的启动过程,毕竟非关键流程 - public void execute() { - // 校验 errorCodeConstantsClass 参数 - if (!StringUtils.hasText(errorCodeConstantsClass)) { - logger.info("[execute][未配置 mall.error-code.constants-class 配置项,不进行自动写入到 system-service 服务]"); - return; - } - Class errorCodeConstantsClazz; - try { - errorCodeConstantsClazz = Class.forName(errorCodeConstantsClass); - } catch (ClassNotFoundException e) { - logger.error("[execute][配置的 ({}) 找不到对应的类]", errorCodeConstantsClass); - return; - } - // 写入 system-service 服务 - logger.info("[execute][自动将 ({}) 类的错误码,准备写入到 system-service 服务]", errorCodeConstantsClass); - List autoGenerateDTOs = new ArrayList<>(); - Arrays.stream(errorCodeConstantsClazz.getFields()).forEach(field -> { - if (field.getType() != ErrorCode.class) { - return; - } - try { - // TODO 芋艿:校验是否重复了; - ErrorCode errorCode = (ErrorCode) field.get(errorCodeConstantsClazz); - autoGenerateDTOs.add(new ErrorCodeAutoGenerateDTO().setGroup(group) - .setCode(errorCode.getCode()).setMessage(errorCode.getMessage())); - } catch (IllegalAccessException e) { - throw new RuntimeException(e); - } - }); - CommonResult autoGenerateErrorCodesResult = errorCodeRpc.autoGenerateErrorCodes(autoGenerateDTOs); - if (autoGenerateErrorCodesResult.isSuccess()) { - logger.info("[execute][自动将 ({}) 类的错误码,成功写入到 system-service 服务]", errorCodeConstantsClass); - } else { - logger.error("[execute][自动将 ({}) 类的错误码,失败写入到 system-service 服务,原因为 ({}/{}/{})]", errorCodeConstantsClass, - autoGenerateErrorCodesResult.getCode(), autoGenerateErrorCodesResult.getMessage(), autoGenerateErrorCodesResult.getDetailMessage()); - } - } - -} diff --git a/common/mall-spring-boot-starter-system-error-code/src/main/java/cn/iocoder/mall/system/errorcode/core/ErrorCodeRemoteLoader.java b/common/mall-spring-boot-starter-system-error-code/src/main/java/cn/iocoder/mall/system/errorcode/core/ErrorCodeRemoteLoader.java deleted file mode 100644 index 527d64491..000000000 --- a/common/mall-spring-boot-starter-system-error-code/src/main/java/cn/iocoder/mall/system/errorcode/core/ErrorCodeRemoteLoader.java +++ /dev/null @@ -1,71 +0,0 @@ -package cn.iocoder.mall.system.errorcode.core; - -import cn.iocoder.common.framework.util.CollectionUtils; -import cn.iocoder.common.framework.util.DateUtil; -import cn.iocoder.common.framework.exception.util.ServiceExceptionUtil; -import cn.iocoder.common.framework.vo.CommonResult; -import cn.iocoder.mall.systemservice.rpc.errorcode.ErrorCodeRpc; -import cn.iocoder.mall.systemservice.rpc.errorcode.vo.ErrorCodeVO; -import org.apache.dubbo.config.annotation.Reference; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.boot.context.event.ApplicationReadyEvent; -import org.springframework.context.event.EventListener; -import org.springframework.scheduling.annotation.Scheduled; - -import java.util.Date; -import java.util.List; - -public class ErrorCodeRemoteLoader { - - private static final int REFRESH_ERROR_CODE_PERIOD = 60 * 1000; - - private Logger logger = LoggerFactory.getLogger(ErrorCodeRemoteLoader.class); - - /** - * 应用分组 - */ - private final String group; - - @Reference(version = "${dubbo.consumer.ErrorCodeRpc.version}") - private ErrorCodeRpc errorCodeRpc; - - private Date maxUpdateTime; - - public ErrorCodeRemoteLoader(String group) { - this.group = group; - } - - @EventListener(ApplicationReadyEvent.class) - public void loadErrorCodes() { - // 从 ErrorCodeRpc 全量加载 ErrorCode 错误码 - CommonResult> listErrorCodesResult = errorCodeRpc.listErrorCodes(group, null); - listErrorCodesResult.checkError(); - logger.info("[loadErrorCodes][从 group({}) 全量加载到 {} 个 ErrorCode 错误码]", group, listErrorCodesResult.getData().size()); - // 写入到 ServiceExceptionUtil 到 - listErrorCodesResult.getData().forEach(errorCodeVO -> { - ServiceExceptionUtil.put(errorCodeVO.getCode(), errorCodeVO.getMessage()); - // 记录下更新时间,方便增量更新 - maxUpdateTime = DateUtil.max(maxUpdateTime, errorCodeVO.getUpdateTime()); - }); - } - - @Scheduled(fixedDelay = REFRESH_ERROR_CODE_PERIOD, initialDelay = REFRESH_ERROR_CODE_PERIOD) - public void refreshErrorCodes() { - // 从 ErrorCodeRpc 增量加载 ErrorCode 错误码 - // TODO 优化点:假设删除错误码的配置,会存在问题; - CommonResult> listErrorCodesResult = errorCodeRpc.listErrorCodes(group, maxUpdateTime); - listErrorCodesResult.checkError(); - if (CollectionUtils.isEmpty(listErrorCodesResult.getData())) { - return; - } - logger.info("[refreshErrorCodes][从 group({}) 增量加载到 {} 个 ErrorCode 错误码]", group, listErrorCodesResult.getData().size()); - // 写入到 ServiceExceptionUtil 到 - listErrorCodesResult.getData().forEach(errorCodeVO -> { - ServiceExceptionUtil.put(errorCodeVO.getCode(), errorCodeVO.getMessage()); - // 记录下更新时间,方便增量更新 - maxUpdateTime = DateUtil.max(maxUpdateTime, errorCodeVO.getUpdateTime()); - }); - } - -} diff --git a/common/mall-spring-boot-starter-system-error-code/src/main/resources/META-INF/spring.factories b/common/mall-spring-boot-starter-system-error-code/src/main/resources/META-INF/spring.factories deleted file mode 100644 index 760e604d3..000000000 --- a/common/mall-spring-boot-starter-system-error-code/src/main/resources/META-INF/spring.factories +++ /dev/null @@ -1,2 +0,0 @@ -org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ - cn.iocoder.mall.system.errorcode.config.ErrorCodeAutoConfiguration diff --git a/common/mall-spring-boot-starter-web/pom.xml b/common/mall-spring-boot-starter-web/pom.xml deleted file mode 100644 index 0d0e71c89..000000000 --- a/common/mall-spring-boot-starter-web/pom.xml +++ /dev/null @@ -1,50 +0,0 @@ - - - - common - cn.iocoder.mall - 1.0-SNAPSHOT - - 4.0.0 - - mall-spring-boot-starter-web - - - - - cn.iocoder.mall - system-service-api - 1.0-SNAPSHOT - true - - - - - org.springframework.boot - spring-boot-configuration-processor - true - - - - - org.springframework.boot - spring-boot-starter-web - - - - - org.apache.dubbo - dubbo - true - - - - - com.alibaba - fastjson - - - - diff --git a/common/mall-spring-boot-starter-web/src/main/java/cn/iocoder/mall/web/config/CommonWebAutoConfiguration.java b/common/mall-spring-boot-starter-web/src/main/java/cn/iocoder/mall/web/config/CommonWebAutoConfiguration.java deleted file mode 100644 index 1c46dd417..000000000 --- a/common/mall-spring-boot-starter-web/src/main/java/cn/iocoder/mall/web/config/CommonWebAutoConfiguration.java +++ /dev/null @@ -1,96 +0,0 @@ -package cn.iocoder.mall.web.config; - -import cn.iocoder.mall.web.core.handler.GlobalExceptionHandler; -import cn.iocoder.mall.web.core.handler.GlobalResponseBodyHandler; -import cn.iocoder.mall.web.core.interceptor.AccessLogInterceptor; -import cn.iocoder.mall.web.core.servlet.CorsFilter; -import com.alibaba.fastjson.serializer.SerializerFeature; -import com.alibaba.fastjson.support.config.FastJsonConfig; -import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.NoSuchBeanDefinitionException; -import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; -import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; -import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication; -import org.springframework.boot.web.servlet.FilterRegistrationBean; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.http.MediaType; -import org.springframework.http.converter.HttpMessageConverter; -import org.springframework.web.servlet.config.annotation.InterceptorRegistry; -import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; - -import java.nio.charset.Charset; -import java.util.Collections; -import java.util.List; - -@Configuration -@ConditionalOnWebApplication(type = ConditionalOnWebApplication.Type.SERVLET) -public class CommonWebAutoConfiguration implements WebMvcConfigurer { - - private Logger logger = LoggerFactory.getLogger(getClass()); - - // ========== 全局处理器 ========== - - @Bean - @ConditionalOnMissingBean(GlobalResponseBodyHandler.class) - public GlobalResponseBodyHandler globalResponseBodyHandler() { - return new GlobalResponseBodyHandler(); - } - - @Bean - @ConditionalOnMissingBean(GlobalExceptionHandler.class) - public GlobalExceptionHandler globalExceptionHandler() { - return new GlobalExceptionHandler(); - } - - // ========== 拦截器相关 ========== - - @Bean - @ConditionalOnClass(name = {"cn.iocoder.mall.systemservice.rpc.systemlog.SystemExceptionLogRpc", "org.apache.dubbo.config.annotation.Reference"}) - @ConditionalOnMissingBean(AccessLogInterceptor.class) - public AccessLogInterceptor accessLogInterceptor() { - return new AccessLogInterceptor(); - } - - @Override - public void addInterceptors(InterceptorRegistry registry) { - try { - registry.addInterceptor(this.accessLogInterceptor()); - logger.info("[addInterceptors][加载 AccessLogInterceptor 拦截器完成]"); - } catch (NoSuchBeanDefinitionException e) { - logger.warn("[addInterceptors][无法获取 AccessLogInterceptor 拦截器,因此不启动 AccessLog 的记录]"); - } - } - - // ========== 过滤器相关 ========== - - @Bean - @ConditionalOnMissingBean - public FilterRegistrationBean corsFilter() { - FilterRegistrationBean registrationBean = new FilterRegistrationBean<>(); - registrationBean.setFilter(new CorsFilter()); - registrationBean.addUrlPatterns("/*"); - return registrationBean; - } - - // ========== MessageConverter 相关 ========== - - @Override - public void configureMessageConverters(List> converters) { - // 创建 FastJsonHttpMessageConverter 对象 - FastJsonHttpMessageConverter fastJsonHttpMessageConverter = new FastJsonHttpMessageConverter(); - // 自定义 FastJson 配置 - FastJsonConfig fastJsonConfig = new FastJsonConfig(); - fastJsonConfig.setCharset(Charset.defaultCharset()); // 设置字符集 - fastJsonConfig.setSerializerFeatures(SerializerFeature.DisableCircularReferenceDetect, // 剔除循环引用 - SerializerFeature.WriteNonStringKeyAsString); // 解决 Integer 作为 Key 时,转换为 String 类型,避免浏览器报错 - fastJsonHttpMessageConverter.setFastJsonConfig(fastJsonConfig); - // 设置支持的 MediaType - fastJsonHttpMessageConverter.setSupportedMediaTypes(Collections.singletonList(MediaType.APPLICATION_JSON)); - // 添加到 converters 中 - converters.add(0, fastJsonHttpMessageConverter); // 注意,添加到最开头,放在 MappingJackson2XmlHttpMessageConverter 前面 - } - -} diff --git a/common/mall-spring-boot-starter-web/src/main/java/cn/iocoder/mall/web/core/constant/CommonMallConstants.java b/common/mall-spring-boot-starter-web/src/main/java/cn/iocoder/mall/web/core/constant/CommonMallConstants.java deleted file mode 100644 index ef9fbbefd..000000000 --- a/common/mall-spring-boot-starter-web/src/main/java/cn/iocoder/mall/web/core/constant/CommonMallConstants.java +++ /dev/null @@ -1,44 +0,0 @@ -package cn.iocoder.mall.web.core.constant; - -public interface CommonMallConstants { - - // 全局请求路径枚举类,用于定义不同用户类型的根请求路径 - /** - * 根路径 - 用户 - */ - @Deprecated - String ROOT_PATH_USER = "/users"; - /** - * 根路径 - 管理员 - */ - @Deprecated - String ROOT_PATH_ADMIN = "/admins"; - - // HTTP Request Attr - /** - * HTTP Request Attr - 用户编号 - * - * 考虑到 mall-spring-boot-starter-web 不依赖 mall-spring-boot-starter-security,但是又希望拿到认证过的用户编号, - * 因此通过 Request 的 Attribute 进行共享 - */ - String REQUEST_ATTR_USER_ID_KEY = "mall_user_id"; - /** - * HTTP Request Attr - 用户类型 - * - * 作用同 {@link #REQUEST_ATTR_USER_ID_KEY} - */ - String REQUEST_ATTR_USER_TYPE_KEY = "mall_user_type"; - - /** - * HTTP Request Attr - Controller 执行返回 - * - * 通过该 Request 的 Attribute,获取到请求执行结果,从而在访问日志中,记录是否成功。 - */ - String REQUEST_ATTR_COMMON_RESULT = "mall_common_result"; - /** - * HTTP Request Attr - 访问开始时间 - */ - String REQUEST_ATTR_ACCESS_START_TIME = "mall_access_start_time"; - - -} diff --git a/common/mall-spring-boot-starter-web/src/main/java/cn/iocoder/mall/web/core/handler/GlobalExceptionHandler.java b/common/mall-spring-boot-starter-web/src/main/java/cn/iocoder/mall/web/core/handler/GlobalExceptionHandler.java deleted file mode 100644 index 976d9c1f7..000000000 --- a/common/mall-spring-boot-starter-web/src/main/java/cn/iocoder/mall/web/core/handler/GlobalExceptionHandler.java +++ /dev/null @@ -1,252 +0,0 @@ -package cn.iocoder.mall.web.core.handler; - -import cn.iocoder.common.framework.exception.GlobalException; -import cn.iocoder.common.framework.exception.ServiceException; -import cn.iocoder.common.framework.exception.enums.GlobalErrorCodeConstants; -import cn.iocoder.common.framework.util.ExceptionUtil; -import cn.iocoder.common.framework.util.HttpUtil; -import cn.iocoder.common.framework.util.MallUtils; -import cn.iocoder.common.framework.vo.CommonResult; -import cn.iocoder.mall.systemservice.rpc.systemlog.SystemExceptionLogRpc; -import cn.iocoder.mall.systemservice.rpc.systemlog.dto.SystemExceptionLogCreateDTO; -import cn.iocoder.mall.web.core.util.CommonWebUtil; -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.util.Assert; -import org.springframework.validation.BindException; -import org.springframework.validation.FieldError; -import org.springframework.web.HttpRequestMethodNotSupportedException; -import org.springframework.web.bind.MethodArgumentNotValidException; -import org.springframework.web.bind.MissingServletRequestParameterException; -import org.springframework.web.bind.annotation.ExceptionHandler; -import org.springframework.web.bind.annotation.RestControllerAdvice; -import org.springframework.web.method.annotation.MethodArgumentTypeMismatchException; -import org.springframework.web.servlet.NoHandlerFoundException; - -import javax.servlet.http.HttpServletRequest; -import javax.validation.ConstraintViolation; -import javax.validation.ConstraintViolationException; -import javax.validation.ValidationException; -import java.util.Date; - -import static cn.iocoder.common.framework.exception.enums.GlobalErrorCodeConstants.*; - -/** - * 全局异常处理器,将 Exception 翻译成 CommonResult + 对应的异常编号 - */ -@RestControllerAdvice -public class GlobalExceptionHandler { - - // TODO 芋艿,应该还有其它的异常,需要进行翻译 - -// /** -// * 异常总数 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; - - // TODO 目前存在一个问题,如果未引入 system-rpc-api 依赖,GlobalExceptionHandler 会报类不存在。未来封装出 Repository 解决该问题 - @Reference(version = "${dubbo.consumer.SystemExceptionLogRpc.version}") - private SystemExceptionLogRpc systemExceptionLogRpc; - - /** - * 处理 SpringMVC 请求参数缺失 - * - * 例如说,接口上设置了 @RequestParam("xx") 参数,结果并未传递 xx 参数 - */ - @ExceptionHandler(value = MissingServletRequestParameterException.class) - public CommonResult missingServletRequestParameterExceptionHandler(MissingServletRequestParameterException ex) { - logger.warn("[missingServletRequestParameterExceptionHandler]", ex); - return CommonResult.error(BAD_REQUEST.getCode(), String.format("请求参数缺失:%s", ex.getParameterName())) - .setDetailMessage(ExceptionUtil.getRootCauseMessage(ex)); - } - - /** - * 处理 SpringMVC 请求参数类型错误 - * - * 例如说,接口上设置了 @RequestParam("xx") 参数为 Integer,结果传递 xx 参数类型为 String - */ - @ExceptionHandler(MethodArgumentTypeMismatchException.class) - public CommonResult methodArgumentTypeMismatchExceptionHandler(MethodArgumentTypeMismatchException ex) { - logger.warn("[missingServletRequestParameterExceptionHandler]", ex); - return CommonResult.error(BAD_REQUEST.getCode(), String.format("请求参数类型错误:%s", ex.getMessage())) - .setDetailMessage(ExceptionUtil.getRootCauseMessage(ex)); - } - - /** - * 处理 SpringMVC 参数校验不正确 - */ - @ExceptionHandler(MethodArgumentNotValidException.class) - public CommonResult methodArgumentNotValidExceptionExceptionHandler(MethodArgumentNotValidException ex) { - logger.warn("[methodArgumentNotValidExceptionExceptionHandler]", ex); - FieldError fieldError = ex.getBindingResult().getFieldError(); - assert fieldError != null; // 断言,避免告警 - return CommonResult.error(BAD_REQUEST.getCode(), String.format("请求参数不正确:%s", fieldError.getDefaultMessage())) - .setDetailMessage(ExceptionUtil.getRootCauseMessage(ex)); - } - - /** - * 处理 SpringMVC 参数绑定不正确,本质上也是通过 Validator 校验 - */ - @ExceptionHandler(BindException.class) - public CommonResult bindExceptionHandler(BindException ex) { - logger.warn("[handleBindException]", ex); - FieldError fieldError = ex.getFieldError(); - assert fieldError != null; // 断言,避免告警 - return CommonResult.error(BAD_REQUEST.getCode(), String.format("请求参数不正确:%s", fieldError.getDefaultMessage())) - .setDetailMessage(ExceptionUtil.getRootCauseMessage(ex)); - } - - /** - * 处理 Validator 校验不通过产生的异常 - */ - @ExceptionHandler(value = ConstraintViolationException.class) - public CommonResult constraintViolationExceptionHandler(ConstraintViolationException ex) { - logger.warn("[constraintViolationExceptionHandler]", ex); - ConstraintViolation constraintViolation = ex.getConstraintViolations().iterator().next(); - return CommonResult.error(BAD_REQUEST.getCode(), String.format("请求参数不正确:%s", constraintViolation.getMessage())) - .setDetailMessage(ExceptionUtil.getRootCauseMessage(ex)); - } - - /** - * 处理 SpringMVC 请求地址不存在 - * - * 注意,它需要设置如下两个配置项: - * 1. spring.mvc.throw-exception-if-no-handler-found 为 true - * 2. spring.mvc.static-path-pattern 为 /statics/** - */ - @ExceptionHandler(NoHandlerFoundException.class) - public CommonResult noHandlerFoundExceptionHandler(NoHandlerFoundException ex) { - logger.warn("[noHandlerFoundExceptionHandler]", ex); - return CommonResult.error(GlobalErrorCodeConstants.NOT_FOUND.getCode(), String.format("请求地址不存在:%s", ex.getRequestURL())) - .setDetailMessage(ExceptionUtil.getRootCauseMessage(ex)); - } - - /** - * 处理 SpringMVC 请求方法不正确 - * - * 例如说,A 接口的方法为 GET 方式,结果请求方法为 POST 方式,导致不匹配 - */ - @ExceptionHandler(HttpRequestMethodNotSupportedException.class) - public CommonResult httpRequestMethodNotSupportedExceptionHandler(HttpRequestMethodNotSupportedException ex) { - logger.warn("[httpRequestMethodNotSupportedExceptionHandler]", ex); - return CommonResult.error(GlobalErrorCodeConstants.METHOD_NOT_ALLOWED.getCode(), String.format("请求方法不正确:%s", ex.getMessage())) - .setDetailMessage(ExceptionUtil.getRootCauseMessage(ex)); - } - - /** - * 处理业务异常 ServiceException - * - * 例如说,商品库存不足,用户手机号已存在。 - */ - @ExceptionHandler(value = ServiceException.class) - public CommonResult serviceExceptionHandler(ServiceException ex) { - logger.info("[serviceExceptionHandler]", ex); - return CommonResult.error(ex.getCode(), ex.getMessage()); - } - - /** - * 处理全局异常 ServiceException - * - * 例如说,Dubbo 请求超时,调用的 Dubbo 服务系统异常 - */ - @ExceptionHandler(value = GlobalException.class) - public CommonResult globalExceptionHandler(HttpServletRequest req, GlobalException ex) { - // 系统异常时,才打印异常日志 - if (INTERNAL_SERVER_ERROR.getCode().equals(ex.getCode())) { - // 插入异常日志 - this.createExceptionLog(req, ex); - // 普通全局异常,打印 info 日志即可 - } else { - logger.info("[globalExceptionHandler]", ex); - } - // 返回 ERROR CommonResult - return CommonResult.error(ex); - } - - /** - * 处理 Dubbo Consumer 本地参数校验时,抛出的 ValidationException 异常 - */ - @ExceptionHandler(value = ValidationException.class) - public CommonResult validationException(ValidationException ex) { - logger.warn("[constraintViolationExceptionHandler]", ex); - // 无法拼接明细的错误信息,因为 Dubbo Consumer 抛出 ValidationException 异常时,是直接的字符串信息,且人类不可读 - return CommonResult.error(BAD_REQUEST.getCode(), "请求参数不正确") - .setDetailMessage(ExceptionUtil.getRootCauseMessage(ex)); - } - - /** - * 处理系统异常,兜底处理所有的一切 - */ - @ExceptionHandler(value = Exception.class) - public CommonResult defaultExceptionHandler(HttpServletRequest req, Throwable ex) { - logger.error("[defaultExceptionHandler]", ex); - // 插入异常日志 - this.createExceptionLog(req, ex); - // 返回 ERROR CommonResult - return CommonResult.error(INTERNAL_SERVER_ERROR.getCode(), INTERNAL_SERVER_ERROR.getMessage()) - .setDetailMessage(ExceptionUtil.getRootCauseMessage(ex)); - } - - public void createExceptionLog(HttpServletRequest req, Throwable e) { - // 插入异常日志 - SystemExceptionLogCreateDTO exceptionLog = new SystemExceptionLogCreateDTO(); - try { - // 增加异常计数 metrics TODO 暂时去掉 -// EXCEPTION_COUNTER.increment(); - // 初始化 exceptionLog - initExceptionLog(exceptionLog, req, e); - // 执行插入 exceptionLog - createExceptionLog(exceptionLog); - } catch (Throwable th) { - logger.error("[createExceptionLog][插入访问日志({}) 发生异常({})", JSON.toJSONString(exceptionLog), ExceptionUtils.getRootCauseMessage(th)); - } - } - - // TODO 优化点:后续可以增加事件 - @Async - public void createExceptionLog(SystemExceptionLogCreateDTO exceptionLog) { - try { - systemExceptionLogRpc.createSystemExceptionLog(exceptionLog); - } catch (Throwable th) { - logger.error("[addAccessLog][插入异常日志({}) 发生异常({})", JSON.toJSONString(exceptionLog), ExceptionUtils.getRootCauseMessage(th)); - } - } - - private void initExceptionLog(SystemExceptionLogCreateDTO exceptionLog, HttpServletRequest request, Throwable e) { - // 设置账号编号 - exceptionLog.setUserId(CommonWebUtil.getUserId(request)); - exceptionLog.setUserType(CommonWebUtil.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(MallUtils.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()); - } - -} diff --git a/common/mall-spring-boot-starter-web/src/main/java/cn/iocoder/mall/web/core/interceptor/AccessLogInterceptor.java b/common/mall-spring-boot-starter-web/src/main/java/cn/iocoder/mall/web/core/interceptor/AccessLogInterceptor.java deleted file mode 100644 index a8f54379c..000000000 --- a/common/mall-spring-boot-starter-web/src/main/java/cn/iocoder/mall/web/core/interceptor/AccessLogInterceptor.java +++ /dev/null @@ -1,90 +0,0 @@ -package cn.iocoder.mall.web.core.interceptor; - -import cn.iocoder.common.framework.util.HttpUtil; -import cn.iocoder.common.framework.util.MallUtils; -import cn.iocoder.common.framework.vo.CommonResult; -import cn.iocoder.mall.systemservice.rpc.systemlog.SystemAccessLogRpc; -import cn.iocoder.mall.systemservice.rpc.systemlog.dto.SystemAccessLogCreateDTO; -import cn.iocoder.mall.web.core.util.CommonWebUtil; -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.web.servlet.handler.HandlerInterceptorAdapter; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import java.util.Date; - -/** - * 访问日志拦截器 - */ -public class AccessLogInterceptor extends HandlerInterceptorAdapter { - - private Logger logger = LoggerFactory.getLogger(getClass()); - - @Reference(version = "${dubbo.consumer.SystemAccessLogRpc.version}") - private SystemAccessLogRpc systemAccessLogRpc; - - @Value("${spring.application.name}") - private String applicationName; - - @Override - public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) { - // 记录当前时间 - CommonWebUtil.setAccessStartTime(request, new Date()); - return true; - } - - @Override - public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) { - SystemAccessLogCreateDTO accessLog = new SystemAccessLogCreateDTO(); - try { - // 初始化 accessLog - initAccessLog(accessLog, request); - // 执行插入 accessLog - addAccessLog(accessLog); - // TODO 提升:暂时不考虑 ELK 的方案。而是基于 MySQL 存储。如果访问日志比较多,需要定期归档。 - } catch (Throwable th) { - logger.error("[afterCompletion][插入访问日志({}) 发生异常({})", JSON.toJSONString(accessLog), ExceptionUtils.getRootCauseMessage(th)); - } - } - - private void initAccessLog(SystemAccessLogCreateDTO accessLog, HttpServletRequest request) { - // 设置账号编号 - accessLog.setUserId(CommonWebUtil.getUserId(request)); - accessLog.setUserType(CommonWebUtil.getUserType(request)); - // 设置访问结果 - CommonResult result = CommonWebUtil.getCommonResult(request); - if (result != null) { - accessLog.setErrorCode(result.getCode()).setErrorMessage(result.getMessage()); - } else { - // 在访问非 onemall 系统提供的 API 时,会存在没有 CommonResult 的情况。例如说,Swagger 提供的接口 - accessLog.setErrorCode(0).setErrorMessage(""); - } - // 设置其它字段 - accessLog.setTraceId(MallUtils.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(CommonWebUtil.getAccessStartTime(request)) - .setResponseTime((int) (System.currentTimeMillis() - accessLog.getStartTime().getTime())); // 默认响应时间设为 0 - } - - // TODO 优化点:后续可以增加事件 - @Async // 异步入库 - public void addAccessLog(SystemAccessLogCreateDTO accessLog) { - try { - systemAccessLogRpc.createSystemAccessLog(accessLog); - } catch (Throwable th) { - logger.error("[addAccessLog][插入访问日志({}) 发生异常({})", JSON.toJSONString(accessLog), ExceptionUtils.getRootCauseMessage(th)); - } - } - -} diff --git a/common/mall-spring-boot-starter-web/src/main/java/cn/iocoder/mall/web/core/servlet/CorsFilter.java b/common/mall-spring-boot-starter-web/src/main/java/cn/iocoder/mall/web/core/servlet/CorsFilter.java deleted file mode 100644 index 75f81057e..000000000 --- a/common/mall-spring-boot-starter-web/src/main/java/cn/iocoder/mall/web/core/servlet/CorsFilter.java +++ /dev/null @@ -1,40 +0,0 @@ -package cn.iocoder.mall.web.core.servlet; - -import javax.servlet.*; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import java.io.IOException; - -/** - * Cors 过滤器 - * - * 未来使用 {@link org.springframework.web.filter.CorsFilter} 替换 - */ -public class CorsFilter implements Filter { - - @Override - public void init(FilterConfig filterConfig) { } - - @Override - public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { - HttpServletResponse resp = (HttpServletResponse) response; - resp.setHeader("Access-Control-Allow-Origin", "*"); - resp.setHeader("Access-Control-Allow-Methods", "*"); - resp.setHeader("Access-Control-Allow-Headers", "*"); - resp.setHeader("Access-Control-Max-Age", "1800"); - // For HTTP OPTIONS verb/method reply with ACCEPTED status code -- per CORS handshake - // 例如说,vue axios 请求时,会自带该逻辑的 - HttpServletRequest req = (HttpServletRequest) request; - if (req.getMethod().equals("OPTIONS")) { - resp.setStatus(HttpServletResponse.SC_ACCEPTED); - return; - } - // 如果是其它请求方法,则继续过滤器。 - chain.doFilter(request, response); - } - - @Override - public void destroy() { - } - -} diff --git a/common/mall-spring-boot-starter-web/src/main/java/cn/iocoder/mall/web/core/util/CommonWebUtil.java b/common/mall-spring-boot-starter-web/src/main/java/cn/iocoder/mall/web/core/util/CommonWebUtil.java deleted file mode 100644 index 41203fa40..000000000 --- a/common/mall-spring-boot-starter-web/src/main/java/cn/iocoder/mall/web/core/util/CommonWebUtil.java +++ /dev/null @@ -1,43 +0,0 @@ -package cn.iocoder.mall.web.core.util; - -import cn.iocoder.common.framework.vo.CommonResult; -import cn.iocoder.mall.web.core.constant.CommonMallConstants; - -import javax.servlet.ServletRequest; -import java.util.Date; - -public class CommonWebUtil { - - public static Integer getUserId(ServletRequest request) { - return (Integer) request.getAttribute(CommonMallConstants.REQUEST_ATTR_USER_ID_KEY); - } - - public static void setUserId(ServletRequest request, Integer userId) { - request.setAttribute(CommonMallConstants.REQUEST_ATTR_USER_ID_KEY, userId); - } - - public static Integer getUserType(ServletRequest request) { - return (Integer) request.getAttribute(CommonMallConstants.REQUEST_ATTR_USER_TYPE_KEY); - } - - public static void setUserType(ServletRequest request, Integer userType) { - request.setAttribute(CommonMallConstants.REQUEST_ATTR_USER_TYPE_KEY, userType); - } - - public static CommonResult getCommonResult(ServletRequest request) { - return (CommonResult) request.getAttribute(CommonMallConstants.REQUEST_ATTR_COMMON_RESULT); - } - - public static void setCommonResult(ServletRequest request, CommonResult result) { - request.setAttribute(CommonMallConstants.REQUEST_ATTR_COMMON_RESULT, result); - } - - public static void setAccessStartTime(ServletRequest request, Date startTime) { - request.setAttribute(CommonMallConstants.REQUEST_ATTR_ACCESS_START_TIME, startTime); - } - - public static Date getAccessStartTime(ServletRequest request) { - return (Date) request.getAttribute(CommonMallConstants.REQUEST_ATTR_ACCESS_START_TIME); - } - -} diff --git a/common/mall-spring-boot-starter-web/src/main/resources/META-INF/spring.factories b/common/mall-spring-boot-starter-web/src/main/resources/META-INF/spring.factories deleted file mode 100644 index b8d5b9558..000000000 --- a/common/mall-spring-boot-starter-web/src/main/resources/META-INF/spring.factories +++ /dev/null @@ -1,2 +0,0 @@ -org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ - cn.iocoder.mall.web.config.CommonWebAutoConfiguration diff --git a/common/mall-spring-boot-starter-xxl-job/src/main/java/cn/iocoder/mall/xxljob/config/XxlJobProperties.java b/common/mall-spring-boot-starter-xxl-job/src/main/java/cn/iocoder/mall/xxljob/config/XxlJobProperties.java deleted file mode 100644 index 9b777a2cc..000000000 --- a/common/mall-spring-boot-starter-xxl-job/src/main/java/cn/iocoder/mall/xxljob/config/XxlJobProperties.java +++ /dev/null @@ -1,172 +0,0 @@ -package cn.iocoder.mall.xxljob.config; - -import org.springframework.boot.context.properties.ConfigurationProperties; - -/** - * XXL-Job 配置类 - */ -@ConfigurationProperties("xxl.job") -public class XxlJobProperties { - - /** - * 是否开启,默认为 true 关闭 - */ - private Boolean enabled = true; - /** - * 访问令牌 - */ - private String accessToken; - /** - * 控制器配置 - */ - private AdminProperties admin; - /** - * 执行器配置 - */ - private ExecutorProperties executor; - - public Boolean getEnabled() { - return enabled; - } - - public void setEnabled(Boolean enabled) { - if (enabled != null) { - this.enabled = enabled; - } - } - - public String getAccessToken() { - return accessToken; - } - - public void setAccessToken(String accessToken) { - if (accessToken != null && accessToken.trim().length() > 0) { - this.accessToken = accessToken; - } - } - - public AdminProperties getAdmin() { - return admin; - } - - public void setAdmin(AdminProperties admin) { - this.admin = admin; - } - - public ExecutorProperties getExecutor() { - return executor; - } - - public void setExecutor(ExecutorProperties executor) { - this.executor = executor; - } - - /** - * XXL-Job 调度器配置类 - */ - public static class AdminProperties { - - /** - * 调度器地址 - */ - private String addresses; - - public String getAddresses() { - return addresses; - } - - public void setAddresses(String addresses) { - this.addresses = addresses; - } - - @Override - public String toString() { - return "AdminProperties{" + - "addresses='" + addresses + '\'' + - '}'; - } - - } - - /** - * XXL-Job 执行器配置类 - */ - public static class ExecutorProperties { - - /** - * 默认端口 - * - * 这里使用 -1 表示随机 - */ - private static final Integer PORT_DEFAULT = -1; - - /** - * 默认日志保留天数 - * - * 默认为 -1,不清理,永久保留 - */ - private static final Integer LOG_RETENTION_DAYS_DEFAULT = -1; - - /** - * 应用名 - */ - private String appName; - /** - * 执行器的 IP - */ - private String ip; - /** - * 执行器的 Port - */ - private Integer port = PORT_DEFAULT; - /** - * 日志地址 - */ - private String logPath; - /** - * 日志保留天数 - */ - private Integer logRetentionDays = LOG_RETENTION_DAYS_DEFAULT; - - public String getAppName() { - return appName; - } - - public void setAppName(String appName) { - this.appName = appName; - } - - public String getLogPath() { - return logPath; - } - - public void setLogPath(String logPath) { - this.logPath = logPath; - } - - public String getIp() { - return ip; - } - - public void setIp(String ip) { - this.ip = ip; - } - - public Integer getPort() { - return port; - } - - public void setPort(Integer port) { - this.port = port; - } - - public Integer getLogRetentionDays() { - return logRetentionDays; - } - - public void setLogRetentionDays(Integer logRetentionDays) { - this.logRetentionDays = logRetentionDays; - } - } - -} diff --git a/common/mall-spring-boot-starter-xxl-job/src/main/resources/META-INF/spring.factories b/common/mall-spring-boot-starter-xxl-job/src/main/resources/META-INF/spring.factories deleted file mode 100644 index 337f8f596..000000000 --- a/common/mall-spring-boot-starter-xxl-job/src/main/resources/META-INF/spring.factories +++ /dev/null @@ -1,2 +0,0 @@ -org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ - cn.iocoder.mall.xxljob.config.XxlJobAutoConfiguration diff --git a/common/mall-spring-boot/pom.xml b/common/mall-spring-boot/pom.xml deleted file mode 100644 index 8d36246d0..000000000 --- a/common/mall-spring-boot/pom.xml +++ /dev/null @@ -1,55 +0,0 @@ - - - - common - cn.iocoder.mall - 1.0-SNAPSHOT - - 4.0.0 - - mall-spring-boot - - - - - cn.iocoder.mall - common-framework - 1.0-SNAPSHOT - - - - - org.springframework.boot - spring-boot-starter - - - - - org.springframework - spring-webmvc - true - - - javax.servlet - servlet-api - true - - - - - org.springframework.boot - spring-boot-actuator-autoconfigure - true - - - - io.micrometer - micrometer-registry-prometheus - true - - - - - diff --git a/common/mall-spring-boot/src/main/resources/META-INF/spring.factories b/common/mall-spring-boot/src/main/resources/META-INF/spring.factories deleted file mode 100644 index c2211a8c9..000000000 --- a/common/mall-spring-boot/src/main/resources/META-INF/spring.factories +++ /dev/null @@ -1,2 +0,0 @@ -org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ - cn.iocoder.mall.spring.boot.metrics.MetricsAutoConfiguration diff --git a/common/pom.xml b/common/pom.xml deleted file mode 100644 index 3596975dc..000000000 --- a/common/pom.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - - onemall - cn.iocoder.mall - 1.0-SNAPSHOT - - 4.0.0 - - common - pom - - common-framework - mall-spring-boot - mall-spring-boot-starter-swagger - mall-spring-boot-starter-web - mall-security-annotations - mall-spring-boot-starter-security-admin - mall-spring-boot-starter-security-user - mall-spring-boot-starter-sentry - mall-spring-boot-starter-mybatis - mall-spring-boot-starter-dubbo - mall-spring-boot-starter-system-error-code - mall-spring-boot-starter-rocketmq - mall-spring-boot-starter-xxl-job - mall-spring-boot-starter-redis - - - - - - cn.iocoder.mall - mall-dependencies - 1.0-SNAPSHOT - pom - import - - - - - diff --git a/docs/README.md b/docs/README.md deleted file mode 100644 index 14792d4a4..000000000 --- a/docs/README.md +++ /dev/null @@ -1,11 +0,0 @@ - -* setup - > 提供安装指南 - * [搭建调试环境](https://gitee.com/zhijiantianya/onemall/docs/setup/quick-start.md) - -* sql - > 提供 SQL 文件 - -* guides - > 提供入门指南 - * TODO diff --git a/http-client.env.json b/http-client.env.json index 725ec1ce1..33c15fee7 100644 --- a/http-client.env.json +++ b/http-client.env.json @@ -1,13 +1,28 @@ { "local": { - "baseUrl": "http://127.0.0.1:18083/management-api/", - "management-api-base-url": "http://127.0.0.1:18083/management-api/", - "accessToken": "yudaoyuanma", + "baseUrl": "http://127.0.0.1:48080/admin-api", + "systemBaseUrl": "http://127.0.0.1:48081/admin-api", + "infaBaseUrl": "http://127.0.0.1:48082/admin-api", - "user-api-base-url": "http://127.0.0.1:18082/user-api/", - "shop-api-base-url": "http://127.0.0.1:18084/shop-api/", - "user-access-token": "yunai", + "token": "test1", + "adminTenentId": "1", + "tag": "${HOSTNAME}", - "dubboTag": "${HOSTNAME}" + "appApi": "http://127.0.0.1:48080/app-api", + "appToken": "test1", + "appTenentId": "1" + }, + "gateway": { + "baseUrl": "http://127.0.0.1:48080/admin-api", + "systemBaseUrl": "http://127.0.0.1:48080/admin-api", + "infaBaseUrl": "http://127.0.0.1:48080/admin-api", + + "token": "test1", + "adminTenentId": "1", + "tag": "${HOSTNAME}", + + "appApi": "http://127.0.0.1:8888/app-api", + "appToken": "test1", + "appTenentId": "1" } } diff --git a/lombok.config b/lombok.config new file mode 100644 index 000000000..a8e8ce67e --- /dev/null +++ b/lombok.config @@ -0,0 +1,4 @@ +config.stopBubbling = true +lombok.tostring.callsuper=CALL +lombok.equalsandhashcode.callsuper=CALL +lombok.accessors.chain=true diff --git a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/ManagementWebApplication.java b/management-web-app/src/main/java/cn/iocoder/mall/managementweb/ManagementWebApplication.java deleted file mode 100644 index 121979533..000000000 --- a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/ManagementWebApplication.java +++ /dev/null @@ -1,13 +0,0 @@ -package cn.iocoder.mall.managementweb; - -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; - -@SpringBootApplication -public class ManagementWebApplication { - - public static void main(String[] args) { - SpringApplication.run(ManagementWebApplication.class, args); - } - -} diff --git a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/client/pay/transaction/PayTransactionClient.java b/management-web-app/src/main/java/cn/iocoder/mall/managementweb/client/pay/transaction/PayTransactionClient.java deleted file mode 100644 index 70fa05444..000000000 --- a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/client/pay/transaction/PayTransactionClient.java +++ /dev/null @@ -1,23 +0,0 @@ -package cn.iocoder.mall.managementweb.client.pay.transaction; - -import cn.iocoder.common.framework.vo.CommonResult; -import cn.iocoder.common.framework.vo.PageResult; -import cn.iocoder.mall.payservice.rpc.transaction.PayTransactionRpc; -import cn.iocoder.mall.payservice.rpc.transaction.dto.PayTransactionPageReqDTO; -import cn.iocoder.mall.payservice.rpc.transaction.dto.PayTransactionRespDTO; -import org.apache.dubbo.config.annotation.DubboReference; -import org.springframework.stereotype.Service; - -@Service -public class PayTransactionClient { - - @DubboReference(version = "${dubbo.consumer.PayTransactionRpc.version}") - private PayTransactionRpc payTransactionRpc; - - public PageResult pagePayTransaction(PayTransactionPageReqDTO pageReqDTO) { - CommonResult> pagePayTransactionResult = payTransactionRpc.pagePayTransaction(pageReqDTO); - pagePayTransactionResult.checkError(); - return pagePayTransactionResult.getData(); - } - -} diff --git a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/admin/AdminController.http b/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/admin/AdminController.http deleted file mode 100644 index 2725d8d4a..000000000 --- a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/admin/AdminController.http +++ /dev/null @@ -1,41 +0,0 @@ -### /admin/page 成功 -GET {{baseUrl}}/admin/page?pageNo=1&pageSize=10 -Content-Type: application/x-www-form-urlencoded -Authorization: Bearer {{accessToken}} - -### /admin/create 成功 -POST {{baseUrl}}/admin/create -Content-Type: application/x-www-form-urlencoded -Authorization: Bearer {{accessToken}} - -username=admin02&password=buzhidao&name=测试管理员&departmentId=1 - -### /admin/update 成功 -POST {{baseUrl}}/admin/update -Content-Type: application/x-www-form-urlencoded -Authorization: Bearer {{accessToken}} - -id=31&username=admin02&password=buzhidao&name=测试管理员&departmentId=1 - -### /admin/update-status 成功 -POST {{baseUrl}}/admin/update-status -Content-Type: application/x-www-form-urlencoded -Authorization: Bearer {{accessToken}} - -adminId=31&status=1 - -### /admin/update-status 失败,参数缺失 -POST {{baseUrl}}/admin/update-status -Content-Type: application/x-www-form-urlencoded -Authorization: Bearer {{accessToken}} - -adminId=31 - -### admin/update-status 失败,地址不存在 -GET {{baseUrl}}/admin/update-status--- -Content-Type: application/x-www-form-urlencoded -Authorization: Bearer {{accessToken}} - -adminId=31&status=sss - -### diff --git a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/admin/AdminController.java b/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/admin/AdminController.java deleted file mode 100644 index 6b530fee4..000000000 --- a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/admin/AdminController.java +++ /dev/null @@ -1,67 +0,0 @@ -package cn.iocoder.mall.managementweb.controller.admin; - -import cn.iocoder.common.framework.util.HttpUtil; -import cn.iocoder.common.framework.vo.CommonResult; -import cn.iocoder.common.framework.vo.PageResult; -import cn.iocoder.mall.managementweb.controller.admin.dto.AdminCreateDTO; -import cn.iocoder.mall.managementweb.controller.admin.dto.AdminPageDTO; -import cn.iocoder.mall.managementweb.controller.admin.dto.AdminUpdateInfoDTO; -import cn.iocoder.mall.managementweb.controller.admin.dto.AdminUpdateStatusDTO; -import cn.iocoder.mall.managementweb.controller.admin.vo.AdminPageItemVO; -import cn.iocoder.mall.managementweb.manager.admin.AdminManager; -import cn.iocoder.mall.security.admin.core.context.AdminSecurityContextHolder; -import cn.iocoder.security.annotations.RequiresPermissions; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -import javax.servlet.http.HttpServletRequest; -import javax.validation.Valid; - -import static cn.iocoder.common.framework.vo.CommonResult.success; - -@Api(tags = "管理员 API") -@RestController -@RequestMapping("/admin") -@Validated -public class AdminController { - - @Autowired - private AdminManager adminManager; - - @ApiOperation(value = "管理员分页") - @GetMapping("/page") - @RequiresPermissions("system:admin:page") - public CommonResult> page(AdminPageDTO adminPageDTO) { - return success(adminManager.pageAdmin(adminPageDTO)); - } - - @ApiOperation(value = "创建管理员") - @PostMapping("/create") - @RequiresPermissions("system:admin:create") - public CommonResult createAdmin(AdminCreateDTO createDTO, HttpServletRequest request) { - return success(adminManager.createAdmin(createDTO, AdminSecurityContextHolder.getAdminId(), HttpUtil.getIp(request))); - } - - @PostMapping("/update") - @ApiOperation(value = "更新管理员") - @RequiresPermissions("system:admin:update") - public CommonResult updateAdmin(AdminUpdateInfoDTO updateInfoDTO) { - adminManager.updateAdmin(updateInfoDTO); - return success(true); - } - - @PostMapping("/update-status") - @ApiOperation(value = "更新管理员状态") - @RequiresPermissions("system:admin:update-status") - public CommonResult updateAdminStatus(@Valid AdminUpdateStatusDTO updateStatusDTO) { - adminManager.updateAdminStatus(updateStatusDTO); - return success(true); - } - -} diff --git a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/admin/DepartmentController.http b/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/admin/DepartmentController.http deleted file mode 100644 index 64cc93945..000000000 --- a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/admin/DepartmentController.http +++ /dev/null @@ -1,39 +0,0 @@ -### /department/create 成功 -POST {{baseUrl}}/department/create -Content-Type: application/x-www-form-urlencoded -Authorization: Bearer {{accessToken}} -dubbo-tag: {{dubboTag}} - -name=测试部门&pid=0&sort=0 - -### /department/update 成功 -POST {{baseUrl}}/department/update -Content-Type: application/x-www-form-urlencoded -Authorization: Bearer {{accessToken}} - -id=1&name=测试部门&pid=0&sort=0 - -### /resource/delete 成功 -POST {{baseUrl}}/department/delete -Content-Type: application/x-www-form-urlencoded -Authorization: Bearer {{accessToken}} - -id=1 - -### /department/get 成功 -GET {{baseUrl}}/department/get?departmentId=1 -Content-Type: application/x-www-form-urlencoded -Authorization: Bearer {{accessToken}} - -### /department/list 成功 -GET {{baseUrl}}/department/list?departmentIds=1,13 -Content-Type: application/x-www-form-urlencoded -Authorization: Bearer {{accessToken}} - -### /department/tree 成功 -GET {{baseUrl}}/department/tree -Content-Type: application/x-www-form-urlencoded -Authorization: Bearer {{accessToken}} - -### - diff --git a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/admin/DepartmentController.java b/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/admin/DepartmentController.java deleted file mode 100644 index 6a1b92499..000000000 --- a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/admin/DepartmentController.java +++ /dev/null @@ -1,81 +0,0 @@ -package cn.iocoder.mall.managementweb.controller.admin; - -import cn.iocoder.common.framework.vo.CommonResult; -import cn.iocoder.mall.managementweb.controller.admin.dto.DepartmentCreateDTO; -import cn.iocoder.mall.managementweb.controller.admin.dto.DepartmentUpdateDTO; -import cn.iocoder.mall.managementweb.controller.admin.vo.DepartmentTreeNodeVO; -import cn.iocoder.mall.managementweb.controller.admin.vo.DepartmentVO; -import cn.iocoder.mall.managementweb.manager.admin.DepartmentManager; -import cn.iocoder.security.annotations.RequiresPermissions; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiImplicitParam; -import io.swagger.annotations.ApiOperation; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.*; - -import javax.validation.Valid; -import java.util.List; - -import static cn.iocoder.common.framework.vo.CommonResult.success; - -/** -* 部门 Controller -*/ -@RestController -@RequestMapping("/department") -@Api(tags = "部门") -@Validated -public class DepartmentController { - - @Autowired - private DepartmentManager departmentManager; - - @PostMapping("/create") - @ApiOperation("创建部门") - @RequiresPermissions("system:department:create") - public CommonResult createDepartment(@Valid DepartmentCreateDTO createDTO) { - return success(departmentManager.createDepartment(createDTO)); - } - - @PostMapping("/update") - @ApiOperation("更新部门") - @RequiresPermissions("system:department:update") - public CommonResult updateDepartment(@Valid DepartmentUpdateDTO updateDTO) { - departmentManager.updateDepartment(updateDTO); - return success(true); - } - - @PostMapping("/delete") - @ApiOperation("删除部门") - @ApiImplicitParam(name = "departmentId", value = "部门编号", required = true) - @RequiresPermissions("system:department:delete") - public CommonResult deleteDepartment(@RequestParam("departmentId") Integer departmentId) { - departmentManager.deleteDepartment(departmentId); - return success(true); - } - - @GetMapping("/get") - @ApiOperation("获得部门") - @ApiImplicitParam(name = "departmentId", value = "部门编号", required = true) - @RequiresPermissions("system:department:tree") - public CommonResult getDepartment(@RequestParam("departmentId") Integer departmentId) { - return success(departmentManager.getDepartment(departmentId)); - } - - @GetMapping("/list") - @ApiOperation("获得部门列表") - @ApiImplicitParam(name = "departmentIds", value = "部门编号列表", required = true) - @RequiresPermissions("system:department:tree") - public CommonResult> listDepartments(@RequestParam("departmentIds") List departmentIds) { - return success(departmentManager.listDepartments(departmentIds)); - } - - @GetMapping("/tree") - @ApiOperation("获得部门树") - @RequiresPermissions("system:department:tree") - public CommonResult> treeDepartment() { - return success(departmentManager.treeDepartment()); - } - -} diff --git a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/admin/dto/AdminCreateDTO.java b/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/admin/dto/AdminCreateDTO.java deleted file mode 100644 index 45c6a4f20..000000000 --- a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/admin/dto/AdminCreateDTO.java +++ /dev/null @@ -1,38 +0,0 @@ -package cn.iocoder.mall.managementweb.controller.admin.dto; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; -import lombok.experimental.Accessors; -import org.hibernate.validator.constraints.Length; - -import javax.validation.constraints.NotEmpty; -import javax.validation.constraints.NotNull; -import javax.validation.constraints.Pattern; - -@ApiModel("管理员创建 DTO") -@Data -@Accessors(chain = true) -public class AdminCreateDTO { - - @ApiModelProperty(value = "真实名字", required = true, example = "小王") - @NotEmpty(message = "真实名字不能为空") - @Length(max = 10, message = "真实名字长度最大为 10 位") - private String name; - - @ApiModelProperty(value = "部门编号", required = true, example = "1") - @NotNull(message = "部门不能为空") - private Integer departmentId; - - @ApiModelProperty(value = "登陆账号", required = true, example = "15601691300") - @NotEmpty(message = "登陆账号不能为空") - @Length(min = 5, max = 16, message = "账号长度为 5-16 位") - @Pattern(regexp = "^[A-Za-z0-9]+$", message = "账号格式为数字以及字母") - private String username; - - @ApiModelProperty(value = "密码", required = true, example = "buzhidao") - @NotEmpty(message = "密码不能为空") - @Length(min = 4, max = 16, message = "密码长度为 4-16 位") - private String password; - -} diff --git a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/admin/dto/AdminPageDTO.java b/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/admin/dto/AdminPageDTO.java deleted file mode 100644 index b921afbd0..000000000 --- a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/admin/dto/AdminPageDTO.java +++ /dev/null @@ -1,22 +0,0 @@ -package cn.iocoder.mall.managementweb.controller.admin.dto; - -import cn.iocoder.common.framework.vo.PageParam; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.experimental.Accessors; - -@ApiModel("管理员分页查询 DTO") -@Data -@EqualsAndHashCode(callSuper = true) -@Accessors(chain = true) -public class AdminPageDTO extends PageParam { - - @ApiModelProperty(value = "真实名字,模糊匹配", example = "小王") - private String name; - - @ApiModelProperty(value = "部门编号") - private Integer departmentId; - -} diff --git a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/admin/dto/AdminUpdateInfoDTO.java b/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/admin/dto/AdminUpdateInfoDTO.java deleted file mode 100644 index 929481244..000000000 --- a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/admin/dto/AdminUpdateInfoDTO.java +++ /dev/null @@ -1,42 +0,0 @@ -package cn.iocoder.mall.managementweb.controller.admin.dto; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; -import lombok.experimental.Accessors; -import org.hibernate.validator.constraints.Length; - -import javax.validation.constraints.NotEmpty; -import javax.validation.constraints.NotNull; -import javax.validation.constraints.Pattern; - -@ApiModel("管理员更新信息 DTO") -@Data -@Accessors(chain = true) -public class AdminUpdateInfoDTO { - - @ApiModelProperty(value = "管理员编号", required = true, example = "1") - @NotNull(message = "管理员编号不能为空") - private Integer id; - - @ApiModelProperty(value = "登陆账号", required = true, example = "15601691300") - @NotEmpty(message = "登陆账号不能为空") - @Length(min = 5, max = 16, message = "账号长度为 5-16 位") - @Pattern(regexp = "^[A-Za-z0-9]+$", message = "账号格式为数字以及字母") - private String username; - - @ApiModelProperty(value = "密码", required = true, example = "buzhidao") - @NotEmpty(message = "密码不能为空") - @Length(min = 4, max = 16, message = "密码长度为 4-16 位") - private String password; - - @ApiModelProperty(value = "真实名字", required = true, example = "小王") - @NotEmpty(message = "真实名字不能为空") - @Length(max = 10, message = "真实名字长度最大为 10 位") - private String name; - - @ApiModelProperty(value = "部门编号", required = true, example = "1") - @NotNull(message = "部门不能为空") - private Integer departmentId; - -} diff --git a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/admin/dto/AdminUpdateStatusDTO.java b/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/admin/dto/AdminUpdateStatusDTO.java deleted file mode 100644 index 8a19ad31d..000000000 --- a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/admin/dto/AdminUpdateStatusDTO.java +++ /dev/null @@ -1,26 +0,0 @@ -package cn.iocoder.mall.managementweb.controller.admin.dto; - -import cn.iocoder.common.framework.enums.CommonStatusEnum; -import cn.iocoder.common.framework.validator.InEnum; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; -import lombok.experimental.Accessors; - -import javax.validation.constraints.NotNull; - -@ApiModel("管理员更新状态 DTO") -@Data -@Accessors(chain = true) -public class AdminUpdateStatusDTO { - - @ApiModelProperty(value = "管理员编号", required = true, example = "1") - @NotNull(message = "管理员编号不能为空") - private Integer adminId; - - @ApiModelProperty(value = "状态", required = true, example = "1", notes = "见 CommonStatusEnum 枚举") - @NotNull(message = "状态不能为空") - @InEnum(value = CommonStatusEnum.class, message = "修改状态必须是 {value}") - private Integer status; - -} diff --git a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/admin/dto/DepartmentCreateDTO.java b/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/admin/dto/DepartmentCreateDTO.java deleted file mode 100644 index f85d73213..000000000 --- a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/admin/dto/DepartmentCreateDTO.java +++ /dev/null @@ -1,24 +0,0 @@ -package cn.iocoder.mall.managementweb.controller.admin.dto; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import javax.validation.constraints.NotEmpty; -import javax.validation.constraints.NotNull; - -@ApiModel("部门创建 DTO") -@Data -public class DepartmentCreateDTO { - - @ApiModelProperty(value = "部门名称", required = true, example = "技术部") - @NotEmpty(message = "部门名称不能为空") - private String name; - @ApiModelProperty(value = "排序字段", required = true, example = "1024") - @NotNull(message = "排序字段不能为空") - private Integer sort; - @ApiModelProperty(value = "父级部门编号", required = true, example = "2048") - @NotNull(message = "父级部门编号不能为空") - private Integer pid; - -} diff --git a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/admin/dto/DepartmentUpdateDTO.java b/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/admin/dto/DepartmentUpdateDTO.java deleted file mode 100644 index 5e18118da..000000000 --- a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/admin/dto/DepartmentUpdateDTO.java +++ /dev/null @@ -1,27 +0,0 @@ -package cn.iocoder.mall.managementweb.controller.admin.dto; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import javax.validation.constraints.NotEmpty; -import javax.validation.constraints.NotNull; - -@ApiModel("部门更新 DTO") -@Data -public class DepartmentUpdateDTO { - - @ApiModelProperty(value = "部门编号", required = true, example = "1") - @NotNull(message = "部门编号不能为空") - private Integer id; - @ApiModelProperty(value = "部门名称", required = true, example = "技术部") - @NotEmpty(message = "部门名称不能为空") - private String name; - @ApiModelProperty(value = "排序字段", required = true, example = "1024") - @NotNull(message = "排序字段不能为空") - private Integer sort; - @ApiModelProperty(value = "父级部门编号", required = true, example = "2048") - @NotNull(message = "父级部门编号不能为空") - private Integer pid; - -} diff --git a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/admin/vo/AdminPageItemVO.java b/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/admin/vo/AdminPageItemVO.java deleted file mode 100644 index 5c128d3c6..000000000 --- a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/admin/vo/AdminPageItemVO.java +++ /dev/null @@ -1,62 +0,0 @@ -package cn.iocoder.mall.managementweb.controller.admin.vo; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; -import lombok.experimental.Accessors; - -import java.util.Date; -import java.util.List; - -@ApiModel(value = "分页时,管理员的信息 VO") -@Data -@Accessors(chain = true) -public class AdminPageItemVO { - - @ApiModel("角色") - @Data - @Accessors(chain = true) - public static class Role { - - @ApiModelProperty(value = "角色编号", required = true, example = "1") - private Integer id; - - @ApiModelProperty(value = "角色名", required = true, example = "码神") - private String name; - - } - - @ApiModel("部门") - @Data - @Accessors(chain = true) - public static class Department { - - @ApiModelProperty(value = "部门编号", required = true, example = "1") - private Integer id; - - @ApiModelProperty(value = "部门名称", required = true, example = "研发部") - private String name; - - } - - @ApiModelProperty(value = "管理员编号", required = true, example = "1") - private Integer id; - @ApiModelProperty(value = "真实名字", required = true, example = "小王") - private String name; - @ApiModelProperty(value = "创建时间", required = true, example = "时间戳格式") - private Date createTime; - @ApiModelProperty(value = "在职状态", required = true, example = "1", notes = "见 AdminStatusEnum 枚举") - private Integer status; - @ApiModelProperty(value = "登陆账号", required = true, example = "15601691300") - private String username; - - /** - * 角色列表 - */ - private List roles; - /** - * 所在部门 - */ - private Department department; - -} diff --git a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/admin/vo/AdminVO.java b/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/admin/vo/AdminVO.java deleted file mode 100644 index 960359e62..000000000 --- a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/admin/vo/AdminVO.java +++ /dev/null @@ -1,26 +0,0 @@ -package cn.iocoder.mall.managementweb.controller.admin.vo; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; -import lombok.experimental.Accessors; - -import java.util.Date; - -@ApiModel(value = "管理员 VO") -@Data -@Accessors(chain = true) -public class AdminVO { - - @ApiModelProperty(value = "管理员编号", required = true, example = "1") - private Integer id; - @ApiModelProperty(value = "真实名字", required = true, example = "小王") - private String name; - @ApiModelProperty(value = "创建时间", required = true, example = "时间戳格式") - private Date createTime; - @ApiModelProperty(value = "在职状态", required = true, example = "1", notes = "见 AdminStatusEnum 枚举") - private Integer status; - @ApiModelProperty(value = "登陆账号", required = true, example = "15601691300") - private String username; - -} diff --git a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/admin/vo/DepartmentTreeNodeVO.java b/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/admin/vo/DepartmentTreeNodeVO.java deleted file mode 100644 index 014a256b1..000000000 --- a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/admin/vo/DepartmentTreeNodeVO.java +++ /dev/null @@ -1,30 +0,0 @@ -package cn.iocoder.mall.managementweb.controller.admin.vo; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import java.util.Date; -import java.util.List; - -@ApiModel("部门树节点 VO") -@Data -public class DepartmentTreeNodeVO { - - @ApiModelProperty(value = "部门编号", required = true, example = "1") - private Integer id; - @ApiModelProperty(value = "部门名称", required = true, example = "技术部") - private String name; - @ApiModelProperty(value = "排序字段", required = true, example = "1024") - private Integer sort; - @ApiModelProperty(value = "父级部门编号", required = true, example = "2048") - private Integer pid; - @ApiModelProperty(value = "创建时间", required = true) - private Date createTime; - - /** - * 子节点 - */ - private List children; - -} diff --git a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/admin/vo/DepartmentVO.java b/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/admin/vo/DepartmentVO.java deleted file mode 100644 index a8fa692b7..000000000 --- a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/admin/vo/DepartmentVO.java +++ /dev/null @@ -1,22 +0,0 @@ -package cn.iocoder.mall.managementweb.controller.admin.vo; - -import lombok.*; -import io.swagger.annotations.*; -import java.util.*; - -@ApiModel("部门 VO") -@Data -public class DepartmentVO { - - @ApiModelProperty(value = "部门编号", required = true, example = "1") - private Integer id; - @ApiModelProperty(value = "部门名称", required = true, example = "技术部") - private String name; - @ApiModelProperty(value = "排序字段", required = true, example = "1024") - private Integer sort; - @ApiModelProperty(value = "父级部门编号", required = true, example = "2048") - private Integer pid; - @ApiModelProperty(value = "创建时间", required = true) - private Date createTime; - -} diff --git a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/datadict/DataDictController.java b/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/datadict/DataDictController.java deleted file mode 100644 index 87328d264..000000000 --- a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/datadict/DataDictController.java +++ /dev/null @@ -1,88 +0,0 @@ -package cn.iocoder.mall.managementweb.controller.datadict; - -import cn.iocoder.common.framework.vo.CommonResult; -import cn.iocoder.mall.managementweb.controller.datadict.dto.DataDictCreateDTO; -import cn.iocoder.mall.managementweb.controller.datadict.dto.DataDictUpdateDTO; -import cn.iocoder.mall.managementweb.controller.datadict.vo.DataDictSimpleVO; -import cn.iocoder.mall.managementweb.controller.datadict.vo.DataDictVO; -import cn.iocoder.mall.managementweb.manager.datadict.DataDictManager; -import cn.iocoder.security.annotations.RequiresPermissions; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiImplicitParam; -import io.swagger.annotations.ApiOperation; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.*; - -import javax.validation.Valid; -import java.util.List; - -import static cn.iocoder.common.framework.vo.CommonResult.success; - -/** -* 数据字典 Controller -*/ -@RestController -@RequestMapping("/data-dict") -@Api(tags = "数据字典") -@Validated -public class DataDictController { - - @Autowired - private DataDictManager dataDictManager; - - @PostMapping("/create") - @ApiOperation("创建数据字典") - @RequiresPermissions("system:data-dict:create") - public CommonResult createDataDict(@Valid DataDictCreateDTO createDTO) { - return success(dataDictManager.createDataDict(createDTO)); - } - - @PostMapping("/update") - @ApiOperation("更新数据字典") - @RequiresPermissions("system:data-dict:update") - public CommonResult updateDataDict(@Valid DataDictUpdateDTO updateDTO) { - dataDictManager.updateDataDict(updateDTO); - return success(true); - } - - @PostMapping("/delete") - @ApiOperation("删除数据字典") - @ApiImplicitParam(name = "dataDictId", value = "数据字典编号", required = true) - @RequiresPermissions("system:data-dict:delete") - public CommonResult deleteDataDict(@RequestParam("dataDictId") Integer dataDictId) { - dataDictManager.deleteDataDict(dataDictId); - return success(true); - } - - @GetMapping("/get") - @ApiOperation("获得数据字典") - @ApiImplicitParam(name = "dataDictId", value = "数据字典编号", required = true) - @RequiresPermissions("system:data-dict:list") - public CommonResult getDataDict(@RequestParam("dataDictId") Integer dataDictId) { - return success(dataDictManager.getDataDict(dataDictId)); - } - - @GetMapping("/list") - @ApiOperation("获得数据字典列表") - @ApiImplicitParam(name = "dataDictIds", value = "数据字典编号列表", required = true) - @RequiresPermissions("system:data-dict:list") - public CommonResult> listDataDicts(@RequestParam("dataDictIds") List dataDictIds) { - return success(dataDictManager.listDataDicts(dataDictIds)); - } - - @GetMapping("/list-all") - @ApiOperation("获得全部数据字典列表") - @RequiresPermissions("system:data-dict:list") - public CommonResult> listDataDicts() { - return success(dataDictManager.listDataDicts()); - } - - @GetMapping("/list-all-simple") - @ApiOperation(value = "获得全部数据字典列表", notes = "一般用于管理后台缓存数据字典在本地") - // 无需添加权限认证,因为前端全局都需要 - public CommonResult> listSimpleDataDicts() { - return success(dataDictManager.listSimpleDataDicts()); - } - -} diff --git a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/datadict/dto/DataDictCreateDTO.java b/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/datadict/dto/DataDictCreateDTO.java deleted file mode 100644 index 5a5403fd4..000000000 --- a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/datadict/dto/DataDictCreateDTO.java +++ /dev/null @@ -1,29 +0,0 @@ -package cn.iocoder.mall.managementweb.controller.datadict.dto; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import javax.validation.constraints.NotEmpty; -import javax.validation.constraints.NotNull; - -@ApiModel("数据字典创建 DTO") -@Data -public class DataDictCreateDTO { - - @ApiModelProperty(value = "大类枚举值", required = true, example = "gender") - @NotEmpty(message = "大类枚举值不能为空") - private String enumValue; - @ApiModelProperty(value = "小类数值", required = true, example = "1") - @NotEmpty(message = "小类数值不能为空") - private String value; - @ApiModelProperty(value = "展示名", required = true, example = "男") - @NotEmpty(message = "展示名不能为空") - private String displayName; - @ApiModelProperty(value = "排序值", required = true, example = "1") - @NotNull(message = "排序值不能为空") - private Integer sort; - @ApiModelProperty(value = "备注", example = "性别 - 男(嗨)") - private String memo; - -} diff --git a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/datadict/dto/DataDictUpdateDTO.java b/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/datadict/dto/DataDictUpdateDTO.java deleted file mode 100644 index 32c705ab1..000000000 --- a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/datadict/dto/DataDictUpdateDTO.java +++ /dev/null @@ -1,32 +0,0 @@ -package cn.iocoder.mall.managementweb.controller.datadict.dto; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import javax.validation.constraints.NotEmpty; -import javax.validation.constraints.NotNull; - -@ApiModel("数据字典更新 DTO") -@Data -public class DataDictUpdateDTO { - - @ApiModelProperty(value = "编号", required = true, example = "1024") - @NotNull(message = "编号不能为空") - private Integer id; - @ApiModelProperty(value = "大类枚举值", required = true, example = "gender") - @NotEmpty(message = "大类枚举值不能为空") - private String enumValue; - @ApiModelProperty(value = "小类数值", required = true, example = "1") - @NotEmpty(message = "小类数值不能为空") - private String value; - @ApiModelProperty(value = "展示名", required = true, example = "男") - @NotEmpty(message = "展示名不能为空") - private String displayName; - @ApiModelProperty(value = "排序值", required = true, example = "1") - @NotNull(message = "排序值不能为空") - private Integer sort; - @ApiModelProperty(value = "备注", example = "性别 - 男(嗨)") - private String memo; - -} diff --git a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/datadict/vo/DataDictSimpleVO.java b/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/datadict/vo/DataDictSimpleVO.java deleted file mode 100644 index 784b56acc..000000000 --- a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/datadict/vo/DataDictSimpleVO.java +++ /dev/null @@ -1,20 +0,0 @@ -package cn.iocoder.mall.managementweb.controller.datadict.vo; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import javax.validation.constraints.NotEmpty; - -@ApiModel("数据字典精简 VO") -@Data -public class DataDictSimpleVO { - - @ApiModelProperty(value = "大类枚举值", required = true, example = "gender") - private String enumValue; - @ApiModelProperty(value = "小类数值", required = true, example = "1") - private String value; - @ApiModelProperty(value = "展示名", required = true, example = "男") - private String displayName; - -} diff --git a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/datadict/vo/DataDictVO.java b/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/datadict/vo/DataDictVO.java deleted file mode 100644 index 146c8c88a..000000000 --- a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/datadict/vo/DataDictVO.java +++ /dev/null @@ -1,34 +0,0 @@ -package cn.iocoder.mall.managementweb.controller.datadict.vo; - -import lombok.*; -import io.swagger.annotations.*; - -import javax.validation.constraints.NotEmpty; -import javax.validation.constraints.NotNull; -import java.util.*; - -@ApiModel("数据字典 VO") -@Data -public class DataDictVO { - - @ApiModelProperty(value = "编号", required = true, example = "1024") - @NotNull(message = "编号不能为空") - private Integer id; - @ApiModelProperty(value = "大类枚举值", required = true, example = "gender") - @NotEmpty(message = "大类枚举值不能为空") - private String enumValue; - @ApiModelProperty(value = "小类数值", required = true, example = "1") - @NotEmpty(message = "小类数值不能为空") - private String value; - @ApiModelProperty(value = "展示名", required = true, example = "男") - @NotEmpty(message = "展示名不能为空") - private String displayName; - @ApiModelProperty(value = "排序值", required = true, example = "1") - @NotNull(message = "排序值不能为空") - private Integer sort; - @ApiModelProperty(value = "备注", example = "性别 - 男(嗨)") - private String memo; - @ApiModelProperty(value = "创建时间", required = true) - private Date createTime; - -} diff --git a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/errorcode/ErrorCodeController.java b/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/errorcode/ErrorCodeController.java deleted file mode 100644 index de43d18d2..000000000 --- a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/errorcode/ErrorCodeController.java +++ /dev/null @@ -1,73 +0,0 @@ -package cn.iocoder.mall.managementweb.controller.errorcode; - -import cn.iocoder.common.framework.vo.CommonResult; -import cn.iocoder.common.framework.vo.PageResult; -import cn.iocoder.mall.managementweb.controller.errorcode.dto.ErrorCodeCreateDTO; -import cn.iocoder.mall.managementweb.controller.errorcode.dto.ErrorCodePageDTO; -import cn.iocoder.mall.managementweb.controller.errorcode.dto.ErrorCodeUpdateDTO; -import cn.iocoder.mall.managementweb.controller.errorcode.vo.ErrorCodeVO; -import cn.iocoder.mall.managementweb.manager.errorcode.ErrorCodeManager; -import cn.iocoder.security.annotations.RequiresPermissions; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiImplicitParam; -import io.swagger.annotations.ApiOperation; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.*; - -import javax.validation.Valid; - -import static cn.iocoder.common.framework.vo.CommonResult.success; - -/** -* 错误码 Controller -*/ -@RestController -@RequestMapping("/error-code") -@Api(tags = "错误码") -@Validated -public class ErrorCodeController { - - @Autowired - private ErrorCodeManager errorCodeManager; - - @PostMapping("/create") - @ApiOperation("创建错误码") - @RequiresPermissions("system:error-code:create") - public CommonResult createErrorCode(@Valid ErrorCodeCreateDTO createDTO) { - return success(errorCodeManager.createErrorCode(createDTO)); - } - - @PostMapping("/update") - @ApiOperation("更新错误码") - @RequiresPermissions("system:error-code:update") - public CommonResult updateErrorCode(@Valid ErrorCodeUpdateDTO updateDTO) { - errorCodeManager.updateErrorCode(updateDTO); - return success(true); - } - - @PostMapping("/delete") - @ApiOperation("删除错误码") - @ApiImplicitParam(name = "errorCodeId", value = "错误码编号", required = true) - @RequiresPermissions("system:error-code:delete") - public CommonResult deleteErrorCode(@RequestParam("errorCodeId") Integer errorCodeId) { - errorCodeManager.deleteErrorCode(errorCodeId); - return success(true); - } - - @GetMapping("/get") - @ApiOperation("获得错误码") - @ApiImplicitParam(name = "errorCodeId", value = "错误码编号", required = true) - @RequiresPermissions("system:error-code:page") - public CommonResult getErrorCode(@RequestParam("errorCodeId") Integer errorCodeId) { - return success(errorCodeManager.getErrorCode(errorCodeId)); - } - - @GetMapping("/page") - @ApiOperation("获得错误码分页") - @RequiresPermissions("system:error-code:page") - public CommonResult> pageErrorCode(ErrorCodePageDTO pageDTO) { - return success(errorCodeManager.pageErrorCode(pageDTO)); - } - -} diff --git a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/errorcode/dto/ErrorCodeCreateDTO.java b/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/errorcode/dto/ErrorCodeCreateDTO.java deleted file mode 100644 index 4abcdba2d..000000000 --- a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/errorcode/dto/ErrorCodeCreateDTO.java +++ /dev/null @@ -1,26 +0,0 @@ -package cn.iocoder.mall.managementweb.controller.errorcode.dto; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import javax.validation.constraints.NotEmpty; -import javax.validation.constraints.NotNull; - -@ApiModel("错误码创建 DTO") -@Data -public class ErrorCodeCreateDTO { - - @ApiModelProperty(value = "错误码编码", required = true, example = "10086") - @NotNull(message = "错误码编码不能为空") - private Integer code; - @ApiModelProperty(value = "错误码错误提示", required = true, example = "艿艿长的丑") - @NotEmpty(message = "错误码错误提示不能为空") - private String message; - @ApiModelProperty(value = "错误码分组", required = true, example = "user-service") - @NotEmpty(message = "错误码分组不能为空") - private String group; - @ApiModelProperty(value = "错误码备注", example = "我就是一个备注") - private String memo; - -} diff --git a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/errorcode/dto/ErrorCodePageDTO.java b/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/errorcode/dto/ErrorCodePageDTO.java deleted file mode 100644 index 23fbc4046..000000000 --- a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/errorcode/dto/ErrorCodePageDTO.java +++ /dev/null @@ -1,21 +0,0 @@ -package cn.iocoder.mall.managementweb.controller.errorcode.dto; - -import cn.iocoder.common.framework.vo.PageParam; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@ApiModel("错误码分页 DTO") -@Data -@EqualsAndHashCode(callSuper = true) -public class ErrorCodePageDTO extends PageParam { - - @ApiModelProperty(value = "错误码编码", required = true) - private Integer code; - @ApiModelProperty(value = "错误码错误提示", required = true) - private String message; - @ApiModelProperty(value = "错误码分组", required = true) - private String group; - -} diff --git a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/errorcode/dto/ErrorCodeUpdateDTO.java b/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/errorcode/dto/ErrorCodeUpdateDTO.java deleted file mode 100644 index 1ba866760..000000000 --- a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/errorcode/dto/ErrorCodeUpdateDTO.java +++ /dev/null @@ -1,29 +0,0 @@ -package cn.iocoder.mall.managementweb.controller.errorcode.dto; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import javax.validation.constraints.NotEmpty; -import javax.validation.constraints.NotNull; - -@ApiModel("错误码更新 DTO") -@Data -public class ErrorCodeUpdateDTO { - - @ApiModelProperty(value = "错误码编号", required = true, example = "1") - @NotNull(message = "错误码编号不能为空") - private Integer id; - @ApiModelProperty(value = "错误码编码", required = true, example = "10086") - @NotNull(message = "错误码编码不能为空") - private Integer code; - @ApiModelProperty(value = "错误码错误提示", required = true, example = "艿艿长的丑") - @NotEmpty(message = "错误码错误提示不能为空") - private String message; - @ApiModelProperty(value = "错误码分组", required = true, example = "user-service") - @NotEmpty(message = "错误码分组不能为空") - private String group; - @ApiModelProperty(value = "错误码备注", example = "我就是一个备注") - private String memo; - -} diff --git a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/errorcode/vo/ErrorCodeVO.java b/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/errorcode/vo/ErrorCodeVO.java deleted file mode 100644 index c86795cb8..000000000 --- a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/errorcode/vo/ErrorCodeVO.java +++ /dev/null @@ -1,28 +0,0 @@ -package cn.iocoder.mall.managementweb.controller.errorcode.vo; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import java.util.Date; - -@ApiModel("错误码 VO") -@Data -public class ErrorCodeVO { - - @ApiModelProperty(value = "错误码编号", required = true, example = "1") - private Integer id; - @ApiModelProperty(value = "错误码编码", required = true, example = "10086") - private Integer code; - @ApiModelProperty(value = "错误码错误提示", required = true, example = "艿艿长的丑") - private String message; - @ApiModelProperty(value = "错误码类型", required = true, notes = "见 ErrorCodeTypeEnum 枚举", example = "1") - private Integer type; - @ApiModelProperty(value = "错误码分组", required = true, example = "user-service") - private String group; - @ApiModelProperty(value = "错误码备注", example = "我就是一个备注") - private String memo; - @ApiModelProperty(value = "创建时间", required = true) - private Date createTime; - -} diff --git a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/passport/PassportController.http b/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/passport/PassportController.http deleted file mode 100644 index d5527e7e1..000000000 --- a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/passport/PassportController.http +++ /dev/null @@ -1,34 +0,0 @@ -### /passport/login 成功 -POST {{baseUrl}}/passport/login -Content-Type: application/x-www-form-urlencoded - -username=admin&password=buzhidao - -### /passport/login 密码不正确 -POST {{baseUrl}}/passport/login -Content-Type: application/x-www-form-urlencoded - -username=admin&password=1024 - -### /passport/login 少传参数 -POST {{baseUrl}}/passport/login -Content-Type: application/x-www-form-urlencoded - -username=admin - -### /passport/info 成功 -GET {{baseUrl}}/passport/info -Authorization: Bearer {{accessToken}} - -### /passport/tree-admin-menu 成功 -GET {{baseUrl}}/passport/tree-admin-menu -Content-Type: application/x-www-form-urlencoded -Authorization: Bearer {{accessToken}} - -### /passport/list-admin-permission 成功 -GET {{baseUrl}}/passport/list-admin-permission -Content-Type: application/x-www-form-urlencoded -#Authorization: Bearer {{accessToken}} -Authorization: Bearer 36dce986276b4d6c8f9f4f3b89b22810 - -### diff --git a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/passport/PassportController.java b/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/passport/PassportController.java deleted file mode 100644 index 4ebf7ea16..000000000 --- a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/passport/PassportController.java +++ /dev/null @@ -1,67 +0,0 @@ -package cn.iocoder.mall.managementweb.controller.passport; - -import cn.iocoder.common.framework.util.HttpUtil; -import cn.iocoder.common.framework.vo.CommonResult; -import cn.iocoder.mall.managementweb.controller.passport.dto.PassportLoginDTO; -import cn.iocoder.mall.managementweb.controller.passport.vo.PassportAccessTokenVO; -import cn.iocoder.mall.managementweb.controller.passport.vo.PassportAdminMenuTreeNodeVO; -import cn.iocoder.mall.managementweb.controller.passport.vo.PassportAdminVO; -import cn.iocoder.mall.managementweb.manager.passport.PassportManager; -import cn.iocoder.mall.security.admin.core.context.AdminSecurityContextHolder; -import cn.iocoder.security.annotations.RequiresNone; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.*; - -import javax.servlet.http.HttpServletRequest; -import java.util.List; -import java.util.Set; - -import static cn.iocoder.common.framework.vo.CommonResult.success; - -@Api(tags = "管理员 Passport API") -@RestController -@RequestMapping("/passport") -public class PassportController { - - @Autowired - private PassportManager passportManager; - - @PostMapping("/login") - @ApiOperation("账号密码登陆") - @RequiresNone - public CommonResult login(PassportLoginDTO loginDTO, - HttpServletRequest request) { - return success(passportManager.login(loginDTO, HttpUtil.getIp(request))); - } - - @GetMapping("/info") - @ApiOperation(value = "获得当前管理员信息") - public CommonResult getInfo() { - return success(passportManager.getAdmin(AdminSecurityContextHolder.getAdminId())); - } - - @PostMapping("/refresh-token") - @ApiOperation("刷新令牌") - @RequiresNone - public CommonResult refreshToken(@RequestParam("refreshToken") String refreshToken, - HttpServletRequest request) { - return success(passportManager.refreshToken(refreshToken, HttpUtil.getIp(request))); - } - - // TODO 优化点:迁移到 PermissionController - @GetMapping("/tree-admin-menu") - @ApiOperation("获得当前管理员的菜单树") - public CommonResult> treeAdminMenu() { - return success(passportManager.treeAdminMenu(AdminSecurityContextHolder.getAdminId())); - } - - // TODO 优化点:迁移到 PermissionController - @GetMapping("/list-admin-permission") - @ApiOperation("获得当前管理员的权限列表") - public CommonResult> listAdminPermission() { - return success(passportManager.listAdminPermission(AdminSecurityContextHolder.getAdminId())); - } - -} diff --git a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/passport/dto/PassportLoginDTO.java b/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/passport/dto/PassportLoginDTO.java deleted file mode 100644 index 035bd6531..000000000 --- a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/passport/dto/PassportLoginDTO.java +++ /dev/null @@ -1,29 +0,0 @@ -package cn.iocoder.mall.managementweb.controller.passport.dto; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; -import lombok.experimental.Accessors; -import org.hibernate.validator.constraints.Length; - -import javax.validation.constraints.NotEmpty; -import javax.validation.constraints.Pattern; -import java.io.Serializable; - -@ApiModel("管理登录 DTO") -@Data -@Accessors(chain = true) -public class PassportLoginDTO implements Serializable { - - @ApiModelProperty(value = "用户名", required = true, example = "yudaoyuanma") - @NotEmpty(message = "登陆账号不能为空") - @Length(min = 5, max = 16, message = "账号长度为 5-16 位") - @Pattern(regexp = "^[A-Za-z0-9]+$", message = "账号格式为数字以及字母") - private String username; - - @ApiModelProperty(value = "密码", required = true, example = "buzhidao") - @NotEmpty(message = "密码不能为空") - @Length(min = 4, max = 16, message = "密码长度为 4-16 位") - private String password; - -} diff --git a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/passport/vo/PassportAdminMenuTreeNodeVO.java b/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/passport/vo/PassportAdminMenuTreeNodeVO.java deleted file mode 100644 index 35e50b1ad..000000000 --- a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/passport/vo/PassportAdminMenuTreeNodeVO.java +++ /dev/null @@ -1,33 +0,0 @@ -package cn.iocoder.mall.managementweb.controller.passport.vo; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; -import lombok.experimental.Accessors; - -import java.util.List; - -@ApiModel(value = "管理员拥有的菜单树", description = "一般用于首页菜单") -@Data -@Accessors(chain = true) -public class PassportAdminMenuTreeNodeVO { - - @ApiModelProperty(value = "菜单编号", required = true, example = "1") - private Integer id; - @ApiModelProperty(value = "菜单名", required = true, example = "商品管理") - private String name; - @ApiModelProperty(value = "前端路由", required = true, example = "/order/list") - private String route; - @ApiModelProperty(value = "菜单图标", required = true, example = "user") - private String icon; - @ApiModelProperty(value = "前端界面", example = "@/views/example/edit") - private String view; - @ApiModelProperty(value = "父级资源编号", required = true, example = "1", notes = "如果无父资源,则值为 0") - private Integer pid; - - /** - * 子节点数组 - */ - private List children; - -} diff --git a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/passport/vo/PassportAdminVO.java b/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/passport/vo/PassportAdminVO.java deleted file mode 100644 index f2db78162..000000000 --- a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/passport/vo/PassportAdminVO.java +++ /dev/null @@ -1,18 +0,0 @@ -package cn.iocoder.mall.managementweb.controller.passport.vo; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; -import lombok.experimental.Accessors; - -@ApiModel("管理员信息 VO") -@Data -@Accessors(chain = true) -public class PassportAdminVO { - - @ApiModelProperty(value = "真实名字", required = true, example = "小王") - private String name; - @ApiModelProperty(value = "头像", required = true, example = "http://www.iocoder.cn/xxx.jpg") - private String avatar; - -} diff --git a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/pay/PayTransactionController.http b/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/pay/PayTransactionController.http deleted file mode 100644 index 336284158..000000000 --- a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/pay/PayTransactionController.http +++ /dev/null @@ -1,7 +0,0 @@ -### /product-spu/page 成功(全部) -GET {{baseUrl}}/pay/transaction/page?pageNo=1&pageSize=10 -Content-Type: application/x-www-form-urlencoded -Authorization: Bearer {{accessToken}} -dubbo-tag: {{dubboTag}} - -### diff --git a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/pay/PayTransactionController.java b/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/pay/PayTransactionController.java deleted file mode 100644 index 3cf6bca70..000000000 --- a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/pay/PayTransactionController.java +++ /dev/null @@ -1,38 +0,0 @@ -package cn.iocoder.mall.managementweb.controller.pay; - -import cn.iocoder.common.framework.vo.CommonResult; -import cn.iocoder.common.framework.vo.PageResult; -import cn.iocoder.mall.managementweb.controller.pay.vo.transaction.PayTransactionPageReqVO; -import cn.iocoder.mall.managementweb.controller.pay.vo.transaction.PayTransactionRespVO; -import cn.iocoder.mall.managementweb.service.pay.transaction.PayTransactionService; -import cn.iocoder.security.annotations.RequiresPermissions; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -import static cn.iocoder.common.framework.vo.CommonResult.success; - -@Api("支付交易单 API") -@RestController -@RequestMapping("/pay/transaction") -@Validated -@Slf4j -public class PayTransactionController { - - @Autowired - private PayTransactionService payTransactionService; - - @GetMapping("/page") - @RequiresPermissions("pay:transaction:page") - @ApiOperation("获得交易支付单分页") - public CommonResult> pagePayTransaction(PayTransactionPageReqVO pageReqVO) { - // 执行查询 - return success(payTransactionService.pagePayTransaction(pageReqVO)); - } - -} diff --git a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/pay/vo/transaction/PayTransactionPageReqVO.java b/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/pay/vo/transaction/PayTransactionPageReqVO.java deleted file mode 100644 index 43fdf8ee2..000000000 --- a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/pay/vo/transaction/PayTransactionPageReqVO.java +++ /dev/null @@ -1,44 +0,0 @@ -package cn.iocoder.mall.managementweb.controller.pay.vo.transaction; - -import cn.iocoder.common.framework.vo.PageParam; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.experimental.Accessors; -import org.springframework.format.annotation.DateTimeFormat; - -import java.util.Date; - -@ApiModel("支付交易分页 Request VO") -@Data -@EqualsAndHashCode(callSuper = true) -@Accessors(chain = true) -public class PayTransactionPageReqVO extends PageParam { - - @ApiModelProperty(value = "创建时间(开始)", example = "2019-10-10 11:12:13") - @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") - private Date createBeginTime; - @ApiModelProperty(value = "创建时间(结束)", example = "2019-10-10 11:12:13") - @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") - private Date createEndTime; - - @ApiModelProperty(value = "创建时间()", example = "2019-10-10 11:12:13") - @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") - private Date paymentBeginTime; - @ApiModelProperty(value = "创建时间()", example = "2019-10-10 11:12:13") - private Date paymentEndTime; - - @ApiModelProperty(value = "支付状态", example = "1", notes = "参见 PayTransactionStatusEnum 枚举") - private Integer status; - - @ApiModelProperty(value = "是否退款", example = "true") - private Boolean hasRefund; - - @ApiModelProperty(value = "支付渠道", example = "1", notes = "参见 PayChannelEnum 枚举") - private Integer payChannel; - - @ApiModelProperty(value = "商品标题", example = "芋头") - private String orderSubject; - -} diff --git a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/pay/vo/transaction/PayTransactionRespVO.java b/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/pay/vo/transaction/PayTransactionRespVO.java deleted file mode 100644 index bf6974189..000000000 --- a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/pay/vo/transaction/PayTransactionRespVO.java +++ /dev/null @@ -1,74 +0,0 @@ -package cn.iocoder.mall.managementweb.controller.pay.vo.transaction; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; -import lombok.experimental.Accessors; - -import java.util.Date; - -@ApiModel("支付交易单 Response VO") -@Data -@Accessors(chain = true) -public class PayTransactionRespVO { - - @ApiModelProperty(value = "交易编号", required = true, example = "POd4RC6a") - private Integer id; - - @ApiModelProperty(value = "用户编号", required = true, example = "1024") - private Integer userId; - - @ApiModelProperty(value = "应用编号", required = true, example = "POd4RC6a") - private String appId; - - @ApiModelProperty(value = "发起交易的 IP", required = true, example = "192.168.10.1") - private String createIp; - - @ApiModelProperty(value = "订单号不能为空", required = true, example = "1024") - private String orderId; - - @ApiModelProperty(value = "商品名", required = true, example = "芋道源码") - private String orderSubject; - - @ApiModelProperty(value = "订单商品描述", required = true, example = "绵啾啾的") - private String orderDescription; - - @ApiModelProperty(value = "订单商品备注", example = "绵啾啾的") - private String orderMemo; - - @ApiModelProperty(value = "支付金额,单位:分。", required = true, example = "10") - private Integer price; - - @ApiModelProperty(value = "订单状态", required = true, example = "1", notes = "参见 PayTransactionStatusEnum 枚举") - private Integer status; - - @ApiModelProperty(value = "交易过期时间", required = true) - private Date expireTime; - - @ApiModelProperty(value = "回调业务线完成时间") - private Date finishTime; - - @ApiModelProperty(value = "成功支付的交易拓展编号", example = "1024") - private Integer extensionId; - - @ApiModelProperty(value = "支付成功的支付渠道", example = "1", notes = "参见 PayChannelEnum 枚举") - private Integer payChannel; - - @ApiModelProperty(value = "第三方支付成功的时间") - private Date paymentTime; - - @ApiModelProperty(value = "收到第三方系统通知的时间") - private Date notifyTime; - - @ApiModelProperty(value = "第三方的流水号", example = "11122233344444") - private String tradeNo; - - @ApiModelProperty(value = "添加时间", required = true) - private Date createTime; - - // ========== 退款相关 ========== - - @ApiModelProperty(value = "退款总金额,单位:分", example = "100") - private Integer refundTotal; - -} diff --git a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/permission/PermissionController.http b/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/permission/PermissionController.http deleted file mode 100644 index 290bd3da2..000000000 --- a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/permission/PermissionController.http +++ /dev/null @@ -1,11 +0,0 @@ -### /permission/list 成功 -GET {{baseUrl}}/permission/list-role-resource?roleId=1 -Content-Type: application/x-www-form-urlencoded -Authorization: Bearer {{accessToken}} - -### /permission/list-admin-roles 成功 -GET {{baseUrl}}/permission/list-admin-roles?adminId=1 -Content-Type: application/x-www-form-urlencoded -Authorization: Bearer {{accessToken}} - -### diff --git a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/permission/PermissionController.java b/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/permission/PermissionController.java deleted file mode 100644 index a1b7c67cb..000000000 --- a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/permission/PermissionController.java +++ /dev/null @@ -1,66 +0,0 @@ -package cn.iocoder.mall.managementweb.controller.permission; - -import cn.iocoder.common.framework.vo.CommonResult; -import cn.iocoder.mall.managementweb.controller.permission.dto.PermissionAssignAdminRoleDTO; -import cn.iocoder.mall.managementweb.controller.permission.dto.PermissionAssignRoleResourceDTO; -import cn.iocoder.mall.managementweb.manager.permission.PermissionManager; -import cn.iocoder.security.annotations.RequiresPermissions; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiImplicitParam; -import io.swagger.annotations.ApiOperation; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -import java.util.Set; - -import static cn.iocoder.common.framework.vo.CommonResult.success; - -/** - * 权限 Controller - */ -@RestController -@RequestMapping("/permission") -@Api(tags = "权限") -@Validated -public class PermissionController { - - @Autowired - private PermissionManager permissionManager; - - @GetMapping("/list-role-resources") - @ApiOperation("获得角色拥有的资源编号") - @ApiImplicitParam(name = "roleId", value = "角色编号", required = true) - @RequiresPermissions("system:permission:assign-role-resource") - public CommonResult> listRoleResources(Integer roleId) { - return success(permissionManager.listRoleResources(roleId)); - } - - @PostMapping("/assign-role-resource") - @ApiOperation("赋予角色资源") - @RequiresPermissions("system:permission:assign-role-resource") - public CommonResult assignRoleResource(PermissionAssignRoleResourceDTO assignRoleResourceDTO) { - permissionManager.assignRoleResource(assignRoleResourceDTO); - return success(true); - } - - @GetMapping("/list-admin-roles") - @ApiOperation("获得管理员拥有的角色编号列表") - @RequiresPermissions("system:permission:assign-admin-role") - @ApiImplicitParam(name = "adminId", value = "管理员编号", required = true) - public CommonResult> listAdminRoles(Integer adminId) { - return success(permissionManager.listAdminRoles(adminId)); - } - - @PostMapping("/assign-admin-role") - @ApiOperation("赋予用户角色") - @RequiresPermissions("system:permission:assign-admin-role") - public CommonResult assignAdminRole(PermissionAssignAdminRoleDTO assignAdminRoleDTO) { - permissionManager.assignAdminRole(assignAdminRoleDTO); - return success(true); - } - -} diff --git a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/permission/ResourceController.http b/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/permission/ResourceController.http deleted file mode 100644 index 4e23931c8..000000000 --- a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/permission/ResourceController.http +++ /dev/null @@ -1,37 +0,0 @@ -### /resource/create 成功 -POST {{baseUrl}}/resource/create -Content-Type: application/x-www-form-urlencoded -Authorization: Bearer {{accessToken}} - -name=测试菜单&permission=resource:add&type=1&sort=1&pid=0&route=/resource/list&icon=test - -### /admin/update 成功 -POST {{baseUrl}}/resource/update -Content-Type: application/x-www-form-urlencoded -Authorization: Bearer {{accessToken}} - -id=61&name=测试菜单2&permission=resource:add&type=1&sort=1&pid=0&route=/resource/list&icon=test - -### /resource/delete 成功 -POST {{baseUrl}}/resource/delete -Content-Type: application/x-www-form-urlencoded -Authorization: Bearer {{accessToken}} - -resourceId=61 - -### /resource/get 成功 -GET {{baseUrl}}/resource/get?resourceId=61 -Content-Type: application/x-www-form-urlencoded -Authorization: Bearer {{accessToken}} - -### /resource/list 成功 -GET {{baseUrl}}/resource/list?resourceIds=61,63 -Content-Type: application/x-www-form-urlencoded -Authorization: Bearer {{accessToken}} - -### /resource/tree 成功 -GET {{baseUrl}}/resource/tree -Content-Type: application/x-www-form-urlencoded -Authorization: Bearer {{accessToken}} - -### diff --git a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/permission/ResourceController.java b/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/permission/ResourceController.java deleted file mode 100644 index 29e61b371..000000000 --- a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/permission/ResourceController.java +++ /dev/null @@ -1,81 +0,0 @@ -package cn.iocoder.mall.managementweb.controller.permission; - -import cn.iocoder.common.framework.vo.CommonResult; -import cn.iocoder.mall.managementweb.controller.permission.dto.ResourceCreateDTO; -import cn.iocoder.mall.managementweb.controller.permission.dto.ResourceUpdateDTO; -import cn.iocoder.mall.managementweb.controller.permission.vo.ResourceTreeNodeVO; -import cn.iocoder.mall.managementweb.controller.permission.vo.ResourceVO; -import cn.iocoder.mall.managementweb.manager.permission.ResourceManager; -import cn.iocoder.mall.security.admin.core.context.AdminSecurityContextHolder; -import cn.iocoder.security.annotations.RequiresPermissions; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiImplicitParam; -import io.swagger.annotations.ApiOperation; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.*; - -import javax.validation.Valid; -import java.util.List; - -import static cn.iocoder.common.framework.vo.CommonResult.success; - -/** -* 资源 Controller -*/ -@RestController -@RequestMapping("/resource") -@Api(tags = "资源") -@Validated -public class ResourceController { - - @Autowired - private ResourceManager resourceManager; - - @PostMapping("/create") - @ApiOperation("创建资源") - @RequiresPermissions("system:resource:create") - public CommonResult createResource(@Valid ResourceCreateDTO createDTO) { - return success(resourceManager.createResource(createDTO, AdminSecurityContextHolder.getAdminId())); - } - - @PostMapping("/update") - @ApiOperation("更新资源") - @RequiresPermissions("system:resource:update") - public CommonResult updateResource(@Valid ResourceUpdateDTO updateDTO) { - resourceManager.updateResource(updateDTO); - return success(true); - } - - @PostMapping("/delete") - @ApiOperation("删除资源") - @ApiImplicitParam(name = "resourceId", value = "资源编号", required = true) - @RequiresPermissions("system:resource:delete") - public CommonResult deleteResource(@RequestParam("resourceId") Integer resourceId) { - resourceManager.deleteResource(resourceId); - return success(true); - } - - @GetMapping("/get") - @ApiOperation("获得资源") - @RequiresPermissions("system:resource:tree") - public CommonResult getResource(@RequestParam("resourceId") Integer resourceId) { - return success(resourceManager.getResource(resourceId)); - } - - @GetMapping("/list") - @ApiOperation("获得资源列表") - @ApiImplicitParam(name = "resourceIds", value = "资源编号列表", required = true) - @RequiresPermissions("system:resource:tree") - public CommonResult> listResources(@RequestParam("resourceIds") List resourceIds) { - return success(resourceManager.listResources(resourceIds)); - } - - @GetMapping("/tree") - @ApiOperation("获得资源树") - @RequiresPermissions("system:resource:tree") - public CommonResult> treeResource() { - return success(resourceManager.treeResource()); - } - -} diff --git a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/permission/RoleController.http b/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/permission/RoleController.http deleted file mode 100644 index 15855497d..000000000 --- a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/permission/RoleController.http +++ /dev/null @@ -1,44 +0,0 @@ -### /role/create 成功 -POST {{baseUrl}}/role/create -Content-Type: application/x-www-form-urlencoded -Authorization: Bearer {{accessToken}} -#Authorization: Bearer 9d250d9b6c034a6c88bf4034cdf1d4cc - -name=测试角色 - -### /role/update 成功 -POST {{baseUrl}}/role/update -Content-Type: application/x-www-form-urlencoded -Authorization: Bearer {{accessToken}} - -id=14&name=test - -### /resource/delete 成功 -POST {{baseUrl}}/role/delete -Content-Type: application/x-www-form-urlencoded -Authorization: Bearer {{accessToken}} - -roleId=14 - -### /role/get 成功 -GET {{baseUrl}}/role/get?roleId=13 -Content-Type: application/x-www-form-urlencoded -Authorization: Bearer {{accessToken}} - -### /role/list-all 成功 -GET {{baseUrl}}/role/list-all -Content-Type: application/x-www-form-urlencoded -Authorization: Bearer {{accessToken}} - -### /role/list 成功 -GET {{baseUrl}}/role/list?roleIds=1,13 -Content-Type: application/x-www-form-urlencoded -Authorization: Bearer {{accessToken}} - -### /role/page 成功 -GET {{baseUrl}}/role/page?pageNo=1&pageSize=10 -Content-Type: application/x-www-form-urlencoded -Authorization: Bearer {{accessToken}} - -### - diff --git a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/permission/RoleController.java b/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/permission/RoleController.java deleted file mode 100644 index 5c2b6ad23..000000000 --- a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/permission/RoleController.java +++ /dev/null @@ -1,90 +0,0 @@ -package cn.iocoder.mall.managementweb.controller.permission; - -import cn.iocoder.common.framework.vo.CommonResult; -import cn.iocoder.common.framework.vo.PageResult; -import cn.iocoder.mall.managementweb.controller.permission.dto.RoleCreateDTO; -import cn.iocoder.mall.managementweb.controller.permission.dto.RolePageDTO; -import cn.iocoder.mall.managementweb.controller.permission.dto.RoleUpdateDTO; -import cn.iocoder.mall.managementweb.controller.permission.vo.RoleVO; -import cn.iocoder.mall.managementweb.manager.permission.RoleManager; -import cn.iocoder.mall.security.admin.core.context.AdminSecurityContextHolder; -import cn.iocoder.security.annotations.RequiresPermissions; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiImplicitParam; -import io.swagger.annotations.ApiOperation; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.*; - -import javax.validation.Valid; -import java.util.List; - -import static cn.iocoder.common.framework.vo.CommonResult.success; - -/** -* 角色 Controller -*/ -@RestController -@RequestMapping("/role") -@Api(tags = "角色") -@Validated -public class RoleController { - - @Autowired - private RoleManager roleManager; - - @PostMapping("/create") - @ApiOperation("创建角色") - @RequiresPermissions("system:role:create") - public CommonResult createRole(@Valid RoleCreateDTO createDTO) { - return success(roleManager.createRole(createDTO, AdminSecurityContextHolder.getAdminId())); - } - - @PostMapping("/update") - @ApiOperation("更新角色") - @RequiresPermissions("system:role:update") - public CommonResult updateRole(@Valid RoleUpdateDTO updateDTO) { - roleManager.updateRole(updateDTO); - return success(true); - } - - @PostMapping("/delete") - @ApiOperation("删除角色") - @ApiImplicitParam(name = "roleId", value = "角色编号", required = true) - @RequiresPermissions("system:role:delete") - public CommonResult deleteRole(@RequestParam("roleId") Integer roleId) { - roleManager.deleteRole(roleId); - return success(true); - } - - @GetMapping("/get") - @ApiOperation("获得角色") - @ApiImplicitParam(name = "roleId", value = "角色编号", required = true) - @RequiresPermissions("system:admin:page") - public CommonResult role(@RequestParam("roleId") Integer roleId) { - return success(roleManager.getRole(roleId)); - } - - @GetMapping("/list-all") - @ApiOperation("获得所有角色列表") - @RequiresPermissions("system:role:page") - public CommonResult> listAllRoles() { - return success(roleManager.listAllRoles()); - } - - @GetMapping("/list") - @ApiOperation("获得角色列表") - @ApiImplicitParam(name = "roleIds", value = "角色编号列表", required = true) - @RequiresPermissions("system:role:page") - public CommonResult> listRoles(@RequestParam("roleIds") List roleIds) { - return success(roleManager.listRoles(roleIds)); - } - - @GetMapping("/page") - @ApiOperation("获得角色分页") - @RequiresPermissions("system:role:page") - public CommonResult> pageRole(RolePageDTO pageDTO) { - return success(roleManager.pageRole(pageDTO)); - } - -} diff --git a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/permission/dto/PermissionAssignAdminRoleDTO.java b/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/permission/dto/PermissionAssignAdminRoleDTO.java deleted file mode 100644 index 4680a95bf..000000000 --- a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/permission/dto/PermissionAssignAdminRoleDTO.java +++ /dev/null @@ -1,20 +0,0 @@ -package cn.iocoder.mall.managementweb.controller.permission.dto; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import javax.validation.constraints.NotNull; -import java.util.Set; - -@ApiModel("赋予用户角色 DTO") -@Data -public class PermissionAssignAdminRoleDTO { - - @ApiModelProperty(value = "管理员编号", required = true, example = "1") - @NotNull(message = "管理员编号不能为空") - private Integer adminId; - @ApiModelProperty(value = "角色编号列表", example = "1,3,5") - private Set roleIds; - -} diff --git a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/permission/dto/PermissionAssignRoleResourceDTO.java b/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/permission/dto/PermissionAssignRoleResourceDTO.java deleted file mode 100644 index 7742d852b..000000000 --- a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/permission/dto/PermissionAssignRoleResourceDTO.java +++ /dev/null @@ -1,20 +0,0 @@ -package cn.iocoder.mall.managementweb.controller.permission.dto; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import javax.validation.constraints.NotNull; -import java.util.Set; - -@ApiModel("赋予角色资源 DTO") -@Data -public class PermissionAssignRoleResourceDTO { - - @ApiModelProperty(value = "角色名", required = true, example = "1") - @NotNull(message = "角色编号不能为空") - private Integer roleId; - @ApiModelProperty(value = "资源编号列表", example = "1,3,5") - private Set resourceIds; - -} diff --git a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/permission/dto/ResourceCreateDTO.java b/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/permission/dto/ResourceCreateDTO.java deleted file mode 100644 index 987b8e2a7..000000000 --- a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/permission/dto/ResourceCreateDTO.java +++ /dev/null @@ -1,38 +0,0 @@ -package cn.iocoder.mall.managementweb.controller.permission.dto; - -import cn.iocoder.common.framework.validator.InEnum; -import cn.iocoder.mall.systemservice.enums.permission.ResourceTypeEnum; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import javax.validation.constraints.NotEmpty; -import javax.validation.constraints.NotNull; - -@ApiModel("资源创建 DTO") -@Data -public class ResourceCreateDTO { - - @ApiModelProperty(value = "菜单名", required = true, example = "商品管理") - @NotEmpty(message = "菜单名不能为空") - private String name; - @ApiModelProperty(value = "权限标识", example = "resource:add") - private String permission; - @ApiModelProperty(value = "资源类型", required = true, example = "1") - @NotNull(message = "资源类型不能为空") - @InEnum(value = ResourceTypeEnum.class, message = "资源类型必须是 {value}") - private Integer type; - @ApiModelProperty(value = "排序", required = true, example = "1") - @NotNull(message = "排序不能为空") - private Integer sort; - @ApiModelProperty(value = "父级资源编号", required = true, example = "1", notes = "如果无父资源,则值为 0") - @NotNull(message = "父级资源编号不能为空") - private Integer pid; - @ApiModelProperty(value = "前端路由", example = "/resource/list") - private String route; - @ApiModelProperty(value = "菜单图标", example = "add") - private String icon; - @ApiModelProperty(value = "前端界面", example = "@/views/example/edit") - private String view; - -} diff --git a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/permission/dto/ResourceUpdateDTO.java b/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/permission/dto/ResourceUpdateDTO.java deleted file mode 100644 index c4f368802..000000000 --- a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/permission/dto/ResourceUpdateDTO.java +++ /dev/null @@ -1,41 +0,0 @@ -package cn.iocoder.mall.managementweb.controller.permission.dto; - -import cn.iocoder.common.framework.validator.InEnum; -import cn.iocoder.mall.systemservice.enums.permission.ResourceTypeEnum; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import javax.validation.constraints.NotEmpty; -import javax.validation.constraints.NotNull; - -@ApiModel("资源创建 DTO") -@Data -public class ResourceUpdateDTO { - - @ApiModelProperty(value = "资源编号", required = true, example = "1") - @NotNull(message = "资源编号不能为空") - private Integer id; - @ApiModelProperty(value = "菜单名", required = true, example = "商品管理") - @NotEmpty(message = "菜单名不能为空") - private String name; - @ApiModelProperty(value = "权限标识", example = "resource:add") - private String permission; - @ApiModelProperty(value = "资源类型", required = true, example = "1") - @NotNull(message = "资源类型不能为空") - @InEnum(value = ResourceTypeEnum.class, message = "资源类型必须是 {value}") - private Integer type; - @ApiModelProperty(value = "排序", required = true, example = "1") - @NotNull(message = "排序不能为空") - private Integer sort; - @ApiModelProperty(value = "父级资源编号", required = true, example = "1", notes = "如果无父资源,则值为 0") - @NotNull(message = "父级资源编号不能为空") - private Integer pid; - @ApiModelProperty(value = "前端路由", example = "/resource/list") - private String route; - @ApiModelProperty(value = "菜单图标", example = "add") - private String icon; - @ApiModelProperty(value = "前端界面", example = "@/views/example/edit") - private String view; - -} diff --git a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/permission/dto/RoleCreateDTO.java b/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/permission/dto/RoleCreateDTO.java deleted file mode 100644 index 36961c2e0..000000000 --- a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/permission/dto/RoleCreateDTO.java +++ /dev/null @@ -1,19 +0,0 @@ -package cn.iocoder.mall.managementweb.controller.permission.dto; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import javax.validation.constraints.NotEmpty; - -@ApiModel("角色创建 DTO") -@Data -public class RoleCreateDTO { - - @ApiModelProperty(value = "角色名", required = true, example = "管理员") - @NotEmpty(message = "角色名不能为空") - private String name; - @ApiModelProperty(value = "角色编码", example = "ADMIN") - private String code; - -} diff --git a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/permission/dto/RolePageDTO.java b/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/permission/dto/RolePageDTO.java deleted file mode 100644 index db1b5d8f9..000000000 --- a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/permission/dto/RolePageDTO.java +++ /dev/null @@ -1,15 +0,0 @@ -package cn.iocoder.mall.managementweb.controller.permission.dto; - -import cn.iocoder.common.framework.vo.PageParam; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -@ApiModel("角色分页 DTO") -@Data -public class RolePageDTO extends PageParam { - - @ApiModelProperty(value = "角色名", example = "管理", notes = "模糊匹配") - private String name; - -} diff --git a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/permission/dto/RoleUpdateDTO.java b/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/permission/dto/RoleUpdateDTO.java deleted file mode 100644 index 5299f4e64..000000000 --- a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/permission/dto/RoleUpdateDTO.java +++ /dev/null @@ -1,23 +0,0 @@ -package cn.iocoder.mall.managementweb.controller.permission.dto; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import javax.validation.constraints.NotEmpty; -import javax.validation.constraints.NotNull; - -@ApiModel("角色更新 DTO") -@Data -public class RoleUpdateDTO { - - @ApiModelProperty(value = "角色编号", required = true, example = "1") - @NotNull(message = "角色编号不能为空") - private Integer id; - @ApiModelProperty(value = "角色名", required = true, example = "管理员") - @NotEmpty(message = "角色名不能为空") - private String name; - @ApiModelProperty(value = "角色编码", example = "ADMIN") - private String code; - -} diff --git a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/permission/vo/ResourceTreeNodeVO.java b/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/permission/vo/ResourceTreeNodeVO.java deleted file mode 100644 index 6be673b6a..000000000 --- a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/permission/vo/ResourceTreeNodeVO.java +++ /dev/null @@ -1,50 +0,0 @@ -package cn.iocoder.mall.managementweb.controller.permission.vo; - -import cn.iocoder.common.framework.validator.InEnum; -import cn.iocoder.mall.systemservice.enums.permission.ResourceTypeEnum; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import javax.validation.constraints.NotEmpty; -import javax.validation.constraints.NotNull; -import java.util.Date; -import java.util.List; - -@ApiModel("资源树节点 VO") -@Data -public class ResourceTreeNodeVO { - - @ApiModelProperty(value = "资源编号", required = true, example = "1") - @NotNull(message = "资源编号不能为空") - private Integer id; - @ApiModelProperty(value = "菜单名", required = true, example = "商品管理") - @NotEmpty(message = "菜单名不能为空") - private String name; - @ApiModelProperty(value = "权限标识", example = "resource:add") - private String permission; - @ApiModelProperty(value = "资源类型", required = true, example = "1") - @NotNull(message = "资源类型不能为空") - @InEnum(value = ResourceTypeEnum.class, message = "资源类型必须是 {value}") - private Integer type; - @ApiModelProperty(value = "排序", required = true, example = "1") - @NotNull(message = "排序不能为空") - private Integer sort; - @ApiModelProperty(value = "父级资源编号", required = true, example = "1", notes = "如果无父资源,则值为 0") - @NotNull(message = "父级资源编号不能为空") - private Integer pid; - @ApiModelProperty(value = "前端路由", example = "/resource/list") - private String route; - @ApiModelProperty(value = "菜单图标", example = "add") - private String icon; - @ApiModelProperty(value = "前端界面", example = "@/views/example/edit") - private String view; - @ApiModelProperty(value = "添加时间", required = true) - private Date createTime; - - /** - * 子节点 - */ - private List children; - -} diff --git a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/permission/vo/ResourceVO.java b/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/permission/vo/ResourceVO.java deleted file mode 100644 index ab1cf1b55..000000000 --- a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/permission/vo/ResourceVO.java +++ /dev/null @@ -1,43 +0,0 @@ -package cn.iocoder.mall.managementweb.controller.permission.vo; - -import cn.iocoder.common.framework.validator.InEnum; -import cn.iocoder.mall.systemservice.enums.permission.ResourceTypeEnum; -import lombok.*; -import io.swagger.annotations.*; - -import javax.validation.constraints.NotEmpty; -import javax.validation.constraints.NotNull; -import java.util.*; - -@ApiModel("资源 VO") -@Data -public class ResourceVO { - - @ApiModelProperty(value = "资源编号", required = true, example = "1") - @NotNull(message = "资源编号不能为空") - private Integer id; - @ApiModelProperty(value = "菜单名", required = true, example = "商品管理") - @NotEmpty(message = "菜单名不能为空") - private String name; - @ApiModelProperty(value = "权限标识", example = "resource:add") - private String permission; - @ApiModelProperty(value = "资源类型", required = true, example = "1") - @NotNull(message = "资源类型不能为空") - @InEnum(value = ResourceTypeEnum.class, message = "资源类型必须是 {value}") - private Integer type; - @ApiModelProperty(value = "排序", required = true, example = "1") - @NotNull(message = "排序不能为空") - private Integer sort; - @ApiModelProperty(value = "父级资源编号", required = true, example = "1", notes = "如果无父资源,则值为 0") - @NotNull(message = "父级资源编号不能为空") - private Integer pid; - @ApiModelProperty(value = "前端路由", example = "/resource/list") - private String route; - @ApiModelProperty(value = "菜单图标", example = "add") - private String icon; - @ApiModelProperty(value = "前端界面", example = "@/views/example/edit") - private String view; - @ApiModelProperty(value = "添加时间", required = true) - private Date createTime; - -} diff --git a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/permission/vo/RoleVO.java b/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/permission/vo/RoleVO.java deleted file mode 100644 index f3e26fa0e..000000000 --- a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/permission/vo/RoleVO.java +++ /dev/null @@ -1,26 +0,0 @@ -package cn.iocoder.mall.managementweb.controller.permission.vo; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import java.util.Date; - -@ApiModel("角色 VO") -@Data -public class RoleVO { - - @ApiModelProperty(value = "角色编号", required = true, example = "1") - private Integer id; - @ApiModelProperty(value = "角色名", required = true, example = "管理员") - private String name; - @ApiModelProperty(value = "角色编码", example = "ADMIN") - private String code; - @ApiModelProperty(value = "角色类型", required = true, example = "1", notes = "见 RoleTypeEnum 枚举") - private Integer type; - @ApiModelProperty(value = "创建管理员编号", required = true, example = "1") - private Integer createAdminId; - @ApiModelProperty(value = "创建时间", required = true) - private Date createTime; - -} diff --git a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/product/ProductAttrController.http b/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/product/ProductAttrController.http deleted file mode 100644 index c86c14a08..000000000 --- a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/product/ProductAttrController.http +++ /dev/null @@ -1,7 +0,0 @@ -### /product-attr/page 成功(全部) -GET {{baseUrl}}/product-attr/key/page?pageNo=1&pageSize=10 -Content-Type: application/x-www-form-urlencoded -Authorization: Bearer {{accessToken}} - -### - diff --git a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/product/ProductCategoryController.http b/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/product/ProductCategoryController.http deleted file mode 100644 index 7badf2772..000000000 --- a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/product/ProductCategoryController.http +++ /dev/null @@ -1,7 +0,0 @@ -### /product-category/tree 成功 -GET {{baseUrl}}/product-category/tree -Content-Type: application/x-www-form-urlencoded -Authorization: Bearer {{accessToken}} -dubbo-tag: {{dubboTag}} - -### diff --git a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/systemlog/SystemAccessLogController.http b/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/systemlog/SystemAccessLogController.http deleted file mode 100644 index 77a4884dd..000000000 --- a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/systemlog/SystemAccessLogController.http +++ /dev/null @@ -1,7 +0,0 @@ -### /system-access-log/page 成功 -GET {{baseUrl}}/system-access-log/page?pageNo=1&pageSize=10 -Content-Type: application/x-www-form-urlencoded -Authorization: Bearer {{accessToken}} - -### - diff --git a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/systemlog/SystemAccessLogController.java b/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/systemlog/SystemAccessLogController.java deleted file mode 100644 index 9ed71e060..000000000 --- a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/systemlog/SystemAccessLogController.java +++ /dev/null @@ -1,38 +0,0 @@ -package cn.iocoder.mall.managementweb.controller.systemlog; - -import cn.iocoder.common.framework.vo.CommonResult; -import cn.iocoder.common.framework.vo.PageResult; -import cn.iocoder.mall.managementweb.controller.systemlog.dto.SystemAccessLogPageDTO; -import cn.iocoder.mall.managementweb.controller.systemlog.vo.SystemAccessLogVO; -import cn.iocoder.mall.managementweb.manager.systemlog.SystemAccessLogManager; -import cn.iocoder.security.annotations.RequiresPermissions; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -import static cn.iocoder.common.framework.vo.CommonResult.success; - -/** -* 系统访问日志 Controller -*/ -@RestController -@RequestMapping("/system-access-log") -@Api(tags = "系统访问日志") -@Validated -public class SystemAccessLogController { - - @Autowired - private SystemAccessLogManager systemAccessLogManager; - - @GetMapping("/page") - @ApiOperation("获得系统访问日志分页") - @RequiresPermissions("system:system-access-log:page") - public CommonResult> pageSystemAccessLog(SystemAccessLogPageDTO pageDTO) { - return success(systemAccessLogManager.pageSystemAccessLog(pageDTO)); - } - -} diff --git a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/systemlog/SystemExceptionLogController.java b/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/systemlog/SystemExceptionLogController.java deleted file mode 100644 index cbd43b828..000000000 --- a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/systemlog/SystemExceptionLogController.java +++ /dev/null @@ -1,56 +0,0 @@ -package cn.iocoder.mall.managementweb.controller.systemlog; - -import cn.iocoder.common.framework.vo.CommonResult; -import cn.iocoder.common.framework.vo.PageResult; -import cn.iocoder.mall.managementweb.controller.systemlog.dto.SystemExceptionLogPageDTO; -import cn.iocoder.mall.managementweb.controller.systemlog.dto.SystemExceptionLogProcessDTO; -import cn.iocoder.mall.managementweb.controller.systemlog.vo.SystemExceptionLogDetailVO; -import cn.iocoder.mall.managementweb.controller.systemlog.vo.SystemExceptionLogVO; -import cn.iocoder.mall.managementweb.manager.systemlog.SystemExceptionLogManager; -import cn.iocoder.mall.security.admin.core.context.AdminSecurityContextHolder; -import cn.iocoder.security.annotations.RequiresPermissions; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiImplicitParam; -import io.swagger.annotations.ApiOperation; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.*; - -import static cn.iocoder.common.framework.vo.CommonResult.success; - -/** -* 系统异常日志 Controller -*/ -@RestController -@RequestMapping("/system-exception-log") -@Api(tags = "系统异常日志") -@Validated -public class SystemExceptionLogController { - - @Autowired - private SystemExceptionLogManager systemExceptionLogManager; - - @GetMapping("/get") - @ApiOperation("获得系统异常日志明细") - @ApiImplicitParam(name = "logId", value = "系统异常日志编号", required = true) - @RequiresPermissions("system:system-exception-log:page") - public CommonResult getSystemExceptionLogDetail(@RequestParam("logId") Integer logId) { - return success(systemExceptionLogManager.getSystemExceptionLogDetail(logId)); - } - - @GetMapping("/page") - @ApiOperation("获得系统异常日志分页") - @RequiresPermissions("system:system-exception-log:page") - public CommonResult> pageSystemExceptionLog(SystemExceptionLogPageDTO pageDTO) { - return success(systemExceptionLogManager.pageSystemExceptionLog(pageDTO)); - } - - @PostMapping("/process") - @ApiOperation("处理系统异常日志") - @RequiresPermissions("system:system-exception-log:process") - public CommonResult processSystemExceptionLog(SystemExceptionLogProcessDTO processDTO) { - systemExceptionLogManager.processSystemExceptionLog(AdminSecurityContextHolder.getAdminId(), processDTO); - return CommonResult.success(true); - } - -} diff --git a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/systemlog/dto/SystemAccessLogPageDTO.java b/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/systemlog/dto/SystemAccessLogPageDTO.java deleted file mode 100644 index e224a3be8..000000000 --- a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/systemlog/dto/SystemAccessLogPageDTO.java +++ /dev/null @@ -1,19 +0,0 @@ -package cn.iocoder.mall.managementweb.controller.systemlog.dto; - -import cn.iocoder.common.framework.vo.PageParam; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -@ApiModel("系统访问日志分页 DTO") -@Data -public class SystemAccessLogPageDTO extends PageParam { - - @ApiModelProperty(value = "用户编号", example = "1") - private Integer userId; - @ApiModelProperty(value = "用户类型", example = "2") - private Integer userType; - @ApiModelProperty(value = "应用名", example = "xxx-service-application") - private String applicationName; - -} diff --git a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/systemlog/dto/SystemExceptionLogPageDTO.java b/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/systemlog/dto/SystemExceptionLogPageDTO.java deleted file mode 100644 index 376758834..000000000 --- a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/systemlog/dto/SystemExceptionLogPageDTO.java +++ /dev/null @@ -1,21 +0,0 @@ -package cn.iocoder.mall.managementweb.controller.systemlog.dto; - -import cn.iocoder.common.framework.vo.PageParam; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -@ApiModel("系统异常日志分页 DTO") -@Data -public class SystemExceptionLogPageDTO extends PageParam { - - @ApiModelProperty(value = "用户编号", example = "1") - private Integer userId; - @ApiModelProperty(value = "用户类型", example = "2") - private Integer userType; - @ApiModelProperty(value = "应用名", example = "xxx-service-application") - private String applicationName; - @ApiModelProperty(value = "处理状态", notes = "对应 SystemExceptionLogProcessStatusEnum 枚举类", example = "1") - private Integer processStatus; - -} diff --git a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/systemlog/dto/SystemExceptionLogProcessDTO.java b/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/systemlog/dto/SystemExceptionLogProcessDTO.java deleted file mode 100644 index e72382573..000000000 --- a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/systemlog/dto/SystemExceptionLogProcessDTO.java +++ /dev/null @@ -1,19 +0,0 @@ -package cn.iocoder.mall.managementweb.controller.systemlog.dto; - -import cn.iocoder.common.framework.vo.PageParam; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@ApiModel("系统异常日志处理 DTO") -@Data -@EqualsAndHashCode(callSuper = true) -public class SystemExceptionLogProcessDTO extends PageParam { - - @ApiModelProperty(value = "系统异常日志编号", required = true, example = "1") - private Integer logId; - @ApiModelProperty(value = "处理状态", required = true, notes = "对应 SystemExceptionLogProcessStatusEnum 枚举类", example = "1") - private Integer processStatus; - -} diff --git a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/systemlog/vo/SystemAccessLogVO.java b/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/systemlog/vo/SystemAccessLogVO.java deleted file mode 100644 index 5e8fabf31..000000000 --- a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/systemlog/vo/SystemAccessLogVO.java +++ /dev/null @@ -1,40 +0,0 @@ -package cn.iocoder.mall.managementweb.controller.systemlog.vo; - -import lombok.*; -import io.swagger.annotations.*; -import java.util.*; - -@ApiModel("系统访问日志 VO") -@Data -public class SystemAccessLogVO { - - @ApiModelProperty(value = "编号", required = true, example = "1") - private Integer id; - @ApiModelProperty(value = "用户编号", example = "1024") - private Integer userId; - @ApiModelProperty(value = "用户类型", example = "1") - private Integer userType; - @ApiModelProperty(value = "链路追踪编号", example = "89aca178-a370-411c-ae02-3f0d672be4ab") - private String traceId; - @ApiModelProperty(value = "应用名", required = true, example = "user-shop-application") - private String applicationName; - @ApiModelProperty(value = "访问地址", required = true, example = "/management-api/system-access-log/page") - private String uri; - @ApiModelProperty(value = "参数", required = true, example = "pageNo=1&pageSize=10") - private String queryString; - @ApiModelProperty(value = "http 方法", required = true, example = "GET") - private String method; - @ApiModelProperty(value = "userAgent", required = true, example = "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0") - private String userAgent; - @ApiModelProperty(value = "ip", required = true, example = "127.0.0.1") - private String ip; - @ApiModelProperty(value = "请求时间", required = true) - private Date startTime; - @ApiModelProperty(value = "响应时长 -- 毫秒级", required = true, example = "1024") - private Integer responseTime; - @ApiModelProperty(value = "错误码", required = true, example = "0") - private Integer errorCode; - @ApiModelProperty(value = "错误提示", example = "你的昵称过长~") - private String errorMessage; - -} diff --git a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/systemlog/vo/SystemExceptionLogDetailVO.java b/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/systemlog/vo/SystemExceptionLogDetailVO.java deleted file mode 100644 index 7ae71698a..000000000 --- a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/systemlog/vo/SystemExceptionLogDetailVO.java +++ /dev/null @@ -1,76 +0,0 @@ -package cn.iocoder.mall.managementweb.controller.systemlog.vo; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; -import lombok.experimental.Accessors; - -import java.util.Date; - -@ApiModel("系统异常日志明细 DTO") -@Data -public class SystemExceptionLogDetailVO { - - @ApiModel("管理员") - @Data - @Accessors(chain = true) - public static class Admin { - - @ApiModelProperty(value = "管理员编号", required = true, example = "1") - private Integer id; - @ApiModelProperty(value = "真实名字", required = true, example = "小王") - private String name; - - } - - @ApiModelProperty(value = "编号", required = true, example = "1") - private Integer id; - @ApiModelProperty(value = "用户编号", example = "1024") - private Integer userId; - @ApiModelProperty(value = "用户类型", example = "1") - private Integer userType; - @ApiModelProperty(value = "链路追踪编号", example = "89aca178-a370-411c-ae02-3f0d672be4ab") - private String traceId; - @ApiModelProperty(value = "应用名", required = true, example = "user-shop-application") - private String applicationName; - @ApiModelProperty(value = "访问地址", required = true, example = "/management-api/system-access-log/page") - private String uri; - @ApiModelProperty(value = "参数", required = true, example = "pageNo=1&pageSize=10") - private String queryString; - @ApiModelProperty(value = "http 方法", required = true, example = "GET") - private String method; - @ApiModelProperty(value = "userAgent", required = true, example = "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0") - private String userAgent; - @ApiModelProperty(value = "ip", required = true, example = "127.0.0.1") - private String ip; - @ApiModelProperty(value = "异常发生时间", required = true) - private Date exceptionTime; - @ApiModelProperty(value = "异常名, {@link Throwable#getClass()} 的类全名", required = true) - private String exceptionName; - @ApiModelProperty(value = "异常导致的消息, {@link cn.iocoder.common.framework.util.ExceptionUtil#getMessage(Throwable)}", required = true) - private String exceptionMessage; - @ApiModelProperty(value = "异常导致的根消息, {@link cn.iocoder.common.framework.util.ExceptionUtil#getRootCauseMessage(Throwable)}", required = true) - private String exceptionRootCauseMessage; - @ApiModelProperty(value = "异常的栈轨迹, {@link cn.iocoder.common.framework.util.ExceptionUtil#getServiceException(Exception)}", required = true) - private String exceptionStackTrace; - @ApiModelProperty(value = "异常发生的类全名, {@link StackTraceElement#getClassName()}", required = true) - private String exceptionClassName; - @ApiModelProperty(value = "异常发生的类文件, {@link StackTraceElement#getFileName()}", required = true) - private String exceptionFileName; - @ApiModelProperty(value = "异常发生的方法名, {@link StackTraceElement#getMethodName()}", required = true) - private String exceptionMethodName; - @ApiModelProperty(value = "异常发生的方法所在行, {@link StackTraceElement#getLineNumber()}", required = true) - private Integer exceptionLineNumber; - @ApiModelProperty(value = "处理状态", required = true, notes = "对应 SystemExceptionLogProcessStatusEnum 枚举类", example = "1") - private Integer processStatus; - @ApiModelProperty(value = "处理时间") - private Date processTime; - @ApiModelProperty(value = "创建时间", required = true) - private Date createTime; - - /** - * 处理的管理员信息 - */ - private Admin processAdmin; - -} diff --git a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/systemlog/vo/SystemExceptionLogVO.java b/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/systemlog/vo/SystemExceptionLogVO.java deleted file mode 100644 index 49a6a3097..000000000 --- a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/systemlog/vo/SystemExceptionLogVO.java +++ /dev/null @@ -1,58 +0,0 @@ -package cn.iocoder.mall.managementweb.controller.systemlog.vo; - -import lombok.*; -import io.swagger.annotations.*; -import java.util.*; - -@ApiModel("系统异常日志 VO") -@Data -public class SystemExceptionLogVO { - - @ApiModelProperty(value = "编号", required = true, example = "1") - private Integer id; - @ApiModelProperty(value = "用户编号", example = "1024") - private Integer userId; - @ApiModelProperty(value = "用户类型", example = "1") - private Integer userType; - @ApiModelProperty(value = "链路追踪编号", example = "89aca178-a370-411c-ae02-3f0d672be4ab") - private String traceId; - @ApiModelProperty(value = "应用名", required = true, example = "user-shop-application") - private String applicationName; - @ApiModelProperty(value = "访问地址", required = true, example = "/management-api/system-access-log/page") - private String uri; - @ApiModelProperty(value = "参数", required = true, example = "pageNo=1&pageSize=10") - private String queryString; - @ApiModelProperty(value = "http 方法", required = true, example = "GET") - private String method; - @ApiModelProperty(value = "userAgent", required = true, example = "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0") - private String userAgent; - @ApiModelProperty(value = "ip", required = true, example = "127.0.0.1") - private String ip; - @ApiModelProperty(value = "异常发生时间", required = true) - private Date exceptionTime; - @ApiModelProperty(value = "异常名, {@link Throwable#getClass()} 的类全名", required = true) - private String exceptionName; - @ApiModelProperty(value = "异常导致的消息, {@link cn.iocoder.common.framework.util.ExceptionUtil#getMessage(Throwable)}", required = true) - private String exceptionMessage; - @ApiModelProperty(value = "异常导致的根消息, {@link cn.iocoder.common.framework.util.ExceptionUtil#getRootCauseMessage(Throwable)}", required = true) - private String exceptionRootCauseMessage; - @ApiModelProperty(value = "异常的栈轨迹, {@link cn.iocoder.common.framework.util.ExceptionUtil#getServiceException(Exception)}", required = true) - private String exceptionStackTrace; - @ApiModelProperty(value = "异常发生的类全名, {@link StackTraceElement#getClassName()}", required = true) - private String exceptionClassName; - @ApiModelProperty(value = "异常发生的类文件, {@link StackTraceElement#getFileName()}", required = true) - private String exceptionFileName; - @ApiModelProperty(value = "异常发生的方法名, {@link StackTraceElement#getMethodName()}", required = true) - private String exceptionMethodName; - @ApiModelProperty(value = "异常发生的方法所在行, {@link StackTraceElement#getLineNumber()}", required = true) - private Integer exceptionLineNumber; - @ApiModelProperty(value = "处理状态", required = true, notes = "对应 SystemExceptionLogProcessStatusEnum 枚举类", example = "1") - private Integer processStatus; - @ApiModelProperty(value = "处理时间") - private Date processTime; - @ApiModelProperty(value = "处理管理员编号", example = "1024") - private Integer processAdminId; - @ApiModelProperty(value = "创建时间", required = true) - private Date createTime; - -} diff --git a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/convert/admin/AdminConvert.java b/management-web-app/src/main/java/cn/iocoder/mall/managementweb/convert/admin/AdminConvert.java deleted file mode 100644 index 1b5ce7db5..000000000 --- a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/convert/admin/AdminConvert.java +++ /dev/null @@ -1,41 +0,0 @@ -package cn.iocoder.mall.managementweb.convert.admin; - -import cn.iocoder.common.framework.vo.PageResult; -import cn.iocoder.mall.managementweb.controller.admin.dto.AdminUpdateInfoDTO; -import cn.iocoder.mall.managementweb.controller.admin.dto.AdminUpdateStatusDTO; -import cn.iocoder.mall.managementweb.controller.admin.vo.AdminPageItemVO; -import cn.iocoder.mall.systemservice.rpc.admin.dto.AdminCreateDTO; -import cn.iocoder.mall.systemservice.rpc.admin.dto.AdminPageDTO; -import cn.iocoder.mall.systemservice.rpc.admin.dto.AdminUpdateDTO; -import cn.iocoder.mall.systemservice.rpc.admin.vo.AdminVO; -import cn.iocoder.mall.systemservice.rpc.admin.vo.DepartmentVO; -import cn.iocoder.mall.systemservice.rpc.permission.vo.RoleVO; -import org.mapstruct.Mapper; -import org.mapstruct.Mapping; -import org.mapstruct.factory.Mappers; - -import java.util.List; - -@Mapper -public interface AdminConvert { - - AdminConvert INSTANCE = Mappers.getMapper(AdminConvert.class); - - AdminCreateDTO convert(cn.iocoder.mall.managementweb.controller.admin.dto.AdminCreateDTO bean); - - AdminUpdateDTO convert(AdminUpdateInfoDTO bean); - - @Mapping(source = "adminId", target = "id") - AdminUpdateDTO convert(AdminUpdateStatusDTO bean); - - AdminPageDTO convert(cn.iocoder.mall.managementweb.controller.admin.dto.AdminPageDTO bean); - - PageResult convert(PageResult pageResultData); - - cn.iocoder.mall.managementweb.controller.admin.vo.AdminVO convert(AdminVO bean); - - AdminPageItemVO convert02(AdminVO adminVO); - AdminPageItemVO.Department convert(DepartmentVO bean); - List convertList(List list); - -} diff --git a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/convert/admin/DepartmentConvert.java b/management-web-app/src/main/java/cn/iocoder/mall/managementweb/convert/admin/DepartmentConvert.java deleted file mode 100644 index 5089312da..000000000 --- a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/convert/admin/DepartmentConvert.java +++ /dev/null @@ -1,27 +0,0 @@ -package cn.iocoder.mall.managementweb.convert.admin; - -import cn.iocoder.mall.managementweb.controller.admin.vo.DepartmentTreeNodeVO; -import cn.iocoder.mall.managementweb.controller.admin.vo.DepartmentVO; -import cn.iocoder.mall.systemservice.rpc.admin.dto.DepartmentCreateDTO; -import cn.iocoder.mall.systemservice.rpc.admin.dto.DepartmentUpdateDTO; -import org.mapstruct.Mapper; -import org.mapstruct.factory.Mappers; - -import java.util.List; - -@Mapper -public interface DepartmentConvert { - - DepartmentConvert INSTANCE = Mappers.getMapper(DepartmentConvert.class); - - DepartmentCreateDTO convert(cn.iocoder.mall.managementweb.controller.admin.dto.DepartmentCreateDTO bean); - - DepartmentUpdateDTO convert(cn.iocoder.mall.managementweb.controller.admin.dto.DepartmentUpdateDTO bean); - - List convertList(List list); - - DepartmentVO convert(cn.iocoder.mall.systemservice.rpc.admin.vo.DepartmentVO bean); - - DepartmentTreeNodeVO convertTreeNode(cn.iocoder.mall.systemservice.rpc.admin.vo.DepartmentVO bean); - -} diff --git a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/convert/datadict/DataDictConvert.java b/management-web-app/src/main/java/cn/iocoder/mall/managementweb/convert/datadict/DataDictConvert.java deleted file mode 100644 index 6e248d214..000000000 --- a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/convert/datadict/DataDictConvert.java +++ /dev/null @@ -1,27 +0,0 @@ -package cn.iocoder.mall.managementweb.convert.datadict; - -import cn.iocoder.mall.managementweb.controller.datadict.vo.DataDictSimpleVO; -import cn.iocoder.mall.managementweb.controller.datadict.vo.DataDictVO; -import cn.iocoder.mall.systemservice.rpc.datadict.dto.DataDictCreateDTO; -import cn.iocoder.mall.systemservice.rpc.datadict.dto.DataDictUpdateDTO; -import org.mapstruct.Mapper; -import org.mapstruct.factory.Mappers; - -import java.util.List; - -@Mapper -public interface DataDictConvert { - - DataDictConvert INSTANCE = Mappers.getMapper(DataDictConvert.class); - - DataDictCreateDTO convert(cn.iocoder.mall.managementweb.controller.datadict.dto.DataDictCreateDTO bean); - - DataDictUpdateDTO convert(cn.iocoder.mall.managementweb.controller.datadict.dto.DataDictUpdateDTO bean); - - DataDictVO convert(cn.iocoder.mall.systemservice.rpc.datadict.vo.DataDictVO bean); - - List convertList(List list); - - List convertList02(List list); - -} diff --git a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/convert/errorcode/ErrorCodeConvert.java b/management-web-app/src/main/java/cn/iocoder/mall/managementweb/convert/errorcode/ErrorCodeConvert.java deleted file mode 100644 index a364e3090..000000000 --- a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/convert/errorcode/ErrorCodeConvert.java +++ /dev/null @@ -1,30 +0,0 @@ -package cn.iocoder.mall.managementweb.convert.errorcode; - -import cn.iocoder.common.framework.vo.PageResult; -import cn.iocoder.mall.managementweb.controller.errorcode.vo.ErrorCodeVO; -import cn.iocoder.mall.systemservice.rpc.errorcode.dto.ErrorCodeCreateDTO; -import cn.iocoder.mall.systemservice.rpc.errorcode.dto.ErrorCodePageDTO; -import cn.iocoder.mall.systemservice.rpc.errorcode.dto.ErrorCodeUpdateDTO; -import org.mapstruct.Mapper; -import org.mapstruct.factory.Mappers; - -import java.util.List; - -@Mapper -public interface ErrorCodeConvert { - - ErrorCodeConvert INSTANCE = Mappers.getMapper(ErrorCodeConvert.class); - - ErrorCodeCreateDTO convert(cn.iocoder.mall.managementweb.controller.errorcode.dto.ErrorCodeCreateDTO bean); - - ErrorCodeUpdateDTO convert(cn.iocoder.mall.managementweb.controller.errorcode.dto.ErrorCodeUpdateDTO bean); - - ErrorCodeVO convert(cn.iocoder.mall.systemservice.rpc.errorcode.vo.ErrorCodeVO bean); - - List convertList(List list); - - PageResult convertPage(PageResult page); - - ErrorCodePageDTO convert(cn.iocoder.mall.managementweb.controller.errorcode.dto.ErrorCodePageDTO bean); - -} diff --git a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/convert/passport/AdminPassportConvert.java b/management-web-app/src/main/java/cn/iocoder/mall/managementweb/convert/passport/AdminPassportConvert.java deleted file mode 100644 index 6d3ae18ab..000000000 --- a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/convert/passport/AdminPassportConvert.java +++ /dev/null @@ -1,23 +0,0 @@ -package cn.iocoder.mall.managementweb.convert.passport; - -import cn.iocoder.mall.managementweb.controller.passport.dto.PassportLoginDTO; -import cn.iocoder.mall.managementweb.controller.passport.vo.PassportAccessTokenVO; -import cn.iocoder.mall.managementweb.controller.passport.vo.PassportAdminVO; -import cn.iocoder.mall.systemservice.rpc.admin.dto.AdminVerifyPasswordDTO; -import cn.iocoder.mall.systemservice.rpc.admin.vo.AdminVO; -import cn.iocoder.mall.systemservice.rpc.oauth.dto.OAuth2AccessTokenRespDTO; -import org.mapstruct.Mapper; -import org.mapstruct.factory.Mappers; - -@Mapper -public interface AdminPassportConvert { - - AdminPassportConvert INSTANCE = Mappers.getMapper(AdminPassportConvert.class); - - AdminVerifyPasswordDTO convert(PassportLoginDTO bean); - - PassportAccessTokenVO convert(OAuth2AccessTokenRespDTO bean); - - PassportAdminVO convert(AdminVO bean); - -} diff --git a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/convert/pay/transaction/PayTransactionConvert.java b/management-web-app/src/main/java/cn/iocoder/mall/managementweb/convert/pay/transaction/PayTransactionConvert.java deleted file mode 100644 index e763c4261..000000000 --- a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/convert/pay/transaction/PayTransactionConvert.java +++ /dev/null @@ -1,20 +0,0 @@ -package cn.iocoder.mall.managementweb.convert.pay.transaction; - -import cn.iocoder.common.framework.vo.PageResult; -import cn.iocoder.mall.managementweb.controller.pay.vo.transaction.PayTransactionPageReqVO; -import cn.iocoder.mall.managementweb.controller.pay.vo.transaction.PayTransactionRespVO; -import cn.iocoder.mall.payservice.rpc.transaction.dto.PayTransactionPageReqDTO; -import cn.iocoder.mall.payservice.rpc.transaction.dto.PayTransactionRespDTO; -import org.mapstruct.Mapper; -import org.mapstruct.factory.Mappers; - -@Mapper -public interface PayTransactionConvert { - - PayTransactionConvert INSTANCE = Mappers.getMapper(PayTransactionConvert.class); - - PayTransactionPageReqDTO convert(PayTransactionPageReqVO bean); - - PageResult convertPage(PageResult bean); - -} diff --git a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/convert/permission/PermissionConvert.java b/management-web-app/src/main/java/cn/iocoder/mall/managementweb/convert/permission/PermissionConvert.java deleted file mode 100644 index bc63a8aad..000000000 --- a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/convert/permission/PermissionConvert.java +++ /dev/null @@ -1,17 +0,0 @@ -package cn.iocoder.mall.managementweb.convert.permission; - -import cn.iocoder.mall.systemservice.rpc.permission.dto.PermissionAssignAdminRoleDTO; -import cn.iocoder.mall.systemservice.rpc.permission.dto.PermissionAssignRoleResourceDTO; -import org.mapstruct.Mapper; -import org.mapstruct.factory.Mappers; - -@Mapper -public interface PermissionConvert { - - PermissionConvert INSTANCE = Mappers.getMapper(PermissionConvert.class); - - PermissionAssignRoleResourceDTO convert(cn.iocoder.mall.managementweb.controller.permission.dto.PermissionAssignRoleResourceDTO bean); - - PermissionAssignAdminRoleDTO convert(cn.iocoder.mall.managementweb.controller.permission.dto.PermissionAssignAdminRoleDTO bean); - -} diff --git a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/convert/permission/ResourceConvert.java b/management-web-app/src/main/java/cn/iocoder/mall/managementweb/convert/permission/ResourceConvert.java deleted file mode 100644 index c7eb3a096..000000000 --- a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/convert/permission/ResourceConvert.java +++ /dev/null @@ -1,30 +0,0 @@ -package cn.iocoder.mall.managementweb.convert.permission; - -import cn.iocoder.mall.managementweb.controller.passport.vo.PassportAdminMenuTreeNodeVO; -import cn.iocoder.mall.managementweb.controller.permission.vo.ResourceTreeNodeVO; -import cn.iocoder.mall.managementweb.controller.permission.vo.ResourceVO; -import cn.iocoder.mall.systemservice.rpc.permission.dto.ResourceCreateDTO; -import cn.iocoder.mall.systemservice.rpc.permission.dto.ResourceUpdateDTO; -import org.mapstruct.Mapper; -import org.mapstruct.factory.Mappers; - -import java.util.List; - -@Mapper -public interface ResourceConvert { - - ResourceConvert INSTANCE = Mappers.getMapper(ResourceConvert.class); - - ResourceCreateDTO convert(cn.iocoder.mall.managementweb.controller.permission.dto.ResourceCreateDTO bean); - - ResourceUpdateDTO convert(cn.iocoder.mall.managementweb.controller.permission.dto.ResourceUpdateDTO bean); - - ResourceVO convert(cn.iocoder.mall.systemservice.rpc.permission.vo.ResourceVO bean); - - List convertList(List list); - - ResourceTreeNodeVO convertTreeNode(cn.iocoder.mall.systemservice.rpc.permission.vo.ResourceVO bean); - - List convert(List list); - -} diff --git a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/convert/permission/RoleConvert.java b/management-web-app/src/main/java/cn/iocoder/mall/managementweb/convert/permission/RoleConvert.java deleted file mode 100644 index 189df7381..000000000 --- a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/convert/permission/RoleConvert.java +++ /dev/null @@ -1,30 +0,0 @@ -package cn.iocoder.mall.managementweb.convert.permission; - -import cn.iocoder.common.framework.vo.PageResult; -import cn.iocoder.mall.managementweb.controller.permission.vo.RoleVO; -import cn.iocoder.mall.systemservice.rpc.permission.dto.RolePageDTO; -import cn.iocoder.mall.systemservice.rpc.permission.dto.RoleUpdateDTO; -import cn.iocoder.mall.systemservice.rpc.permission.vo.RoleCreateDTO; -import org.mapstruct.Mapper; -import org.mapstruct.factory.Mappers; - -import java.util.List; - -@Mapper -public interface RoleConvert { - - RoleConvert INSTANCE = Mappers.getMapper(RoleConvert.class); - - RoleCreateDTO convert(cn.iocoder.mall.managementweb.controller.permission.dto.RoleCreateDTO bean); - - RoleUpdateDTO convert(cn.iocoder.mall.managementweb.controller.permission.dto.RoleUpdateDTO bean); - - RoleVO convert(cn.iocoder.mall.systemservice.rpc.permission.vo.RoleVO bean); - - List convertList(List list); - - RolePageDTO convert(cn.iocoder.mall.managementweb.controller.permission.dto.RolePageDTO bean); - - PageResult convertPage(PageResult page); - -} diff --git a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/convert/systemlog/SystemAccessLogConvert.java b/management-web-app/src/main/java/cn/iocoder/mall/managementweb/convert/systemlog/SystemAccessLogConvert.java deleted file mode 100644 index 67f0659ec..000000000 --- a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/convert/systemlog/SystemAccessLogConvert.java +++ /dev/null @@ -1,18 +0,0 @@ -package cn.iocoder.mall.managementweb.convert.systemlog; - -import cn.iocoder.common.framework.vo.PageResult; -import cn.iocoder.mall.managementweb.controller.systemlog.vo.SystemAccessLogVO; -import cn.iocoder.mall.systemservice.rpc.systemlog.vo.SystemAccessLogPageDTO; -import org.mapstruct.Mapper; -import org.mapstruct.factory.Mappers; - -@Mapper -public interface SystemAccessLogConvert { - - SystemAccessLogConvert INSTANCE = Mappers.getMapper(SystemAccessLogConvert.class); - - SystemAccessLogPageDTO convert(cn.iocoder.mall.managementweb.controller.systemlog.dto.SystemAccessLogPageDTO bean); - - PageResult convertPage(PageResult page); - -} diff --git a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/convert/systemlog/SystemExceptionLogConvert.java b/management-web-app/src/main/java/cn/iocoder/mall/managementweb/convert/systemlog/SystemExceptionLogConvert.java deleted file mode 100644 index 1076e4481..000000000 --- a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/convert/systemlog/SystemExceptionLogConvert.java +++ /dev/null @@ -1,27 +0,0 @@ -package cn.iocoder.mall.managementweb.convert.systemlog; - -import cn.iocoder.common.framework.vo.PageResult; -import cn.iocoder.mall.managementweb.controller.systemlog.vo.SystemExceptionLogDetailVO; -import cn.iocoder.mall.managementweb.controller.systemlog.vo.SystemExceptionLogVO; -import cn.iocoder.mall.systemservice.rpc.admin.vo.AdminVO; -import cn.iocoder.mall.systemservice.rpc.systemlog.dto.SystemExceptionLogPageDTO; -import cn.iocoder.mall.systemservice.rpc.systemlog.dto.SystemExceptionLogProcessDTO; -import org.mapstruct.Mapper; -import org.mapstruct.factory.Mappers; - -@Mapper -public interface SystemExceptionLogConvert { - - SystemExceptionLogConvert INSTANCE = Mappers.getMapper(SystemExceptionLogConvert.class); - - SystemExceptionLogPageDTO convert(cn.iocoder.mall.managementweb.controller.systemlog.dto.SystemExceptionLogPageDTO bean); - - PageResult convertPage(PageResult page); - - SystemExceptionLogDetailVO convert(cn.iocoder.mall.systemservice.rpc.systemlog.vo.SystemExceptionLogVO bean); - - SystemExceptionLogDetailVO.Admin convert(AdminVO bean); - - SystemExceptionLogProcessDTO convert(cn.iocoder.mall.managementweb.controller.systemlog.dto.SystemExceptionLogProcessDTO bean); - -} diff --git a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/manager/admin/AdminManager.java b/management-web-app/src/main/java/cn/iocoder/mall/managementweb/manager/admin/AdminManager.java deleted file mode 100644 index 363b3674b..000000000 --- a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/manager/admin/AdminManager.java +++ /dev/null @@ -1,121 +0,0 @@ -package cn.iocoder.mall.managementweb.manager.admin; - -import cn.iocoder.common.framework.util.CollectionUtils; -import cn.iocoder.common.framework.vo.CommonResult; -import cn.iocoder.common.framework.vo.PageResult; -import cn.iocoder.mall.managementweb.controller.admin.dto.AdminCreateDTO; -import cn.iocoder.mall.managementweb.controller.admin.dto.AdminPageDTO; -import cn.iocoder.mall.managementweb.controller.admin.dto.AdminUpdateInfoDTO; -import cn.iocoder.mall.managementweb.controller.admin.dto.AdminUpdateStatusDTO; -import cn.iocoder.mall.managementweb.controller.admin.vo.AdminPageItemVO; -import cn.iocoder.mall.managementweb.controller.admin.vo.AdminVO; -import cn.iocoder.mall.managementweb.convert.admin.AdminConvert; -import cn.iocoder.mall.systemservice.rpc.admin.AdminRpc; -import cn.iocoder.mall.systemservice.rpc.admin.DepartmentRpc; -import cn.iocoder.mall.systemservice.rpc.admin.vo.DepartmentVO; -import cn.iocoder.mall.systemservice.rpc.permission.PermissionRpc; -import cn.iocoder.mall.systemservice.rpc.permission.RoleRpc; -import cn.iocoder.mall.systemservice.rpc.permission.vo.RoleVO; -import org.apache.dubbo.config.annotation.Reference; -import org.springframework.stereotype.Service; -import org.springframework.validation.annotation.Validated; - -import javax.validation.Valid; -import java.util.*; - -@Service -@Validated -public class AdminManager { - - @Reference(version = "${dubbo.consumer.AdminRpc.version}") - private AdminRpc adminRpc; - @Reference(version = "${dubbo.consumer.RoleRpc.version}") - private RoleRpc roleRpc; - @Reference(version = "${dubbo.consumer.DepartmentRpc.version}") - private DepartmentRpc departmentRpc; - @Reference(version = "${dubbo.consumer.PermissionRpc.version}") - private PermissionRpc permissionRpc; - - public PageResult pageAdmin(AdminPageDTO pageDTO) { - CommonResult> pageResult = - adminRpc.pageAdmin(AdminConvert.INSTANCE.convert(pageDTO)); - pageResult.checkError(); - // 转换结果 - PageResult adminPageVO = new PageResult<>(); - adminPageVO.setTotal(pageResult.getData().getTotal()); - adminPageVO.setList(new ArrayList<>(pageResult.getData().getList().size())); - // 拼接结果 - if (!pageResult.getData().getList().isEmpty()) { - // 查询角色数组 - Map> adminRoleMap = this.listAdminRoles(CollectionUtils.convertList(pageResult.getData().getList(), - cn.iocoder.mall.systemservice.rpc.admin.vo.AdminVO::getId)); - // 查询部门 - CommonResult> listDepartmentsResult = departmentRpc.listDepartments( - CollectionUtils.convertSet(pageResult.getData().getList(), - cn.iocoder.mall.systemservice.rpc.admin.vo.AdminVO::getDepartmentId)); - listDepartmentsResult.checkError(); - Map departmentMap = CollectionUtils.convertMap(listDepartmentsResult.getData(), DepartmentVO::getId); - // 拼接数据 - for (cn.iocoder.mall.systemservice.rpc.admin.vo.AdminVO adminVO : pageResult.getData().getList()) { - AdminPageItemVO adminPageItemVO = AdminConvert.INSTANCE.convert02(adminVO); - adminPageVO.getList().add(adminPageItemVO); - // 拼接部门 - adminPageItemVO.setDepartment(AdminConvert.INSTANCE.convert(departmentMap.get(adminVO.getDepartmentId()))); - // 拼接角色 - adminPageItemVO.setRoles( AdminConvert.INSTANCE.convertList(adminRoleMap.get(adminVO.getId()))); - } - } else { - adminPageVO.setList(Collections.emptyList()); - } - return adminPageVO; - } - - private Map> listAdminRoles(List adminIds) { - // 获得管理员拥有的角色 - CommonResult>> mapAdminRoleIdsResult = permissionRpc.mapAdminRoleIds(adminIds); - mapAdminRoleIdsResult.checkError(); - // 获得角色列表 - Set roleIds = new HashSet<>(); - mapAdminRoleIdsResult.getData().values().forEach(roleIds::addAll); - CommonResult> listRolesResult = roleRpc.listRoles(roleIds); - listRolesResult.checkError(); - Map roleVOMap = CollectionUtils.convertMap(listRolesResult.getData(), RoleVO::getId); - // 拼接结果 - Map> adminRoleVOMap = new HashMap<>(); - mapAdminRoleIdsResult.getData().forEach((adminId, adminRoleIds) -> { - List roleVOs = new ArrayList<>(adminRoleIds.size()); - adminRoleIds.forEach(roleId -> { - RoleVO roleVO = roleVOMap.get(roleId); - if (roleVO != null) { - roleVOs.add(roleVO); - } - }); - adminRoleVOMap.put(adminId, roleVOs); - }); - return adminRoleVOMap; - } - - public Integer createAdmin(AdminCreateDTO createDTO, Integer createAdminId, String createIp) { - CommonResult createAdminResult = adminRpc.createAdmin(AdminConvert.INSTANCE.convert(createDTO) - .setCreateAdminId(createAdminId).setCreateIp(createIp)); - createAdminResult.checkError(); - return createAdminResult.getData(); - } - - public void updateAdmin(AdminUpdateInfoDTO updateInfoDTO) { - CommonResult updateAdminResult = adminRpc.updateAdmin(AdminConvert.INSTANCE.convert(updateInfoDTO)); - updateAdminResult.checkError(); - } - - public void updateAdminStatus(@Valid AdminUpdateStatusDTO updateStatusDTO) { - CommonResult updateAdminResult = adminRpc.updateAdmin(AdminConvert.INSTANCE.convert(updateStatusDTO)); - updateAdminResult.checkError(); - } - - public AdminVO getAdmin(Integer adminId) { - CommonResult getAdminResult = adminRpc.getAdmin(adminId); - getAdminResult.checkError(); - return AdminConvert.INSTANCE.convert(getAdminResult.getData()); - } - -} diff --git a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/manager/admin/DepartmentManager.java b/management-web-app/src/main/java/cn/iocoder/mall/managementweb/manager/admin/DepartmentManager.java deleted file mode 100644 index 1374e2f0c..000000000 --- a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/manager/admin/DepartmentManager.java +++ /dev/null @@ -1,128 +0,0 @@ -package cn.iocoder.mall.managementweb.manager.admin; - -import cn.iocoder.common.framework.vo.CommonResult; -import cn.iocoder.mall.managementweb.controller.admin.dto.DepartmentCreateDTO; -import cn.iocoder.mall.managementweb.controller.admin.dto.DepartmentUpdateDTO; -import cn.iocoder.mall.managementweb.controller.admin.vo.DepartmentTreeNodeVO; -import cn.iocoder.mall.managementweb.controller.admin.vo.DepartmentVO; -import cn.iocoder.mall.managementweb.convert.admin.DepartmentConvert; -import cn.iocoder.mall.systemservice.enums.admin.DepartmentIdEnum; -import cn.iocoder.mall.systemservice.rpc.admin.DepartmentRpc; -import lombok.extern.slf4j.Slf4j; -import org.apache.dubbo.config.annotation.Reference; -import org.springframework.stereotype.Service; - -import java.util.*; -import java.util.stream.Collectors; - -/** -* 部门 Manager -*/ -@Service -@Slf4j -public class DepartmentManager { - - @Reference(version = "${dubbo.consumer.DepartmentRpc.version}") - private DepartmentRpc departmentRpc; - - /** - * 创建部门 - * - * @param createDTO 创建部门 DTO - * @return 部门 - */ - public Integer createDepartment(DepartmentCreateDTO createDTO) { - CommonResult createDepartmentResult = departmentRpc.createDepartment(DepartmentConvert.INSTANCE.convert(createDTO)); - createDepartmentResult.checkError(); - return createDepartmentResult.getData(); - } - - /** - * 更新部门 - * - * @param updateDTO 更新部门 DTO - */ - public void updateDepartment(DepartmentUpdateDTO updateDTO) { - CommonResult updateDepartmentResult = departmentRpc.updateDepartment(DepartmentConvert.INSTANCE.convert(updateDTO)); - updateDepartmentResult.checkError(); - } - - /** - * 删除部门 - * - * @param departmentId 部门编号 - */ - public void deleteDepartment(Integer departmentId) { - CommonResult deleteDepartmentResult = departmentRpc.deleteDepartment(departmentId); - deleteDepartmentResult.checkError(); - } - - /** - * 获得部门 - * - * @param departmentId 部门编号 - * @return 部门 - */ - public DepartmentVO getDepartment(Integer departmentId) { - CommonResult getDepartmentResult = departmentRpc.getDepartment(departmentId); - getDepartmentResult.checkError(); - return DepartmentConvert.INSTANCE.convert(getDepartmentResult.getData()); - } - - /** - * 获得部门列表 - * - * @param departmentIds 部门编号列表 - * @return 部门列表 - */ - public List listDepartments(List departmentIds) { - CommonResult> listDepartmentResult = departmentRpc.listDepartments(departmentIds); - listDepartmentResult.checkError(); - return DepartmentConvert.INSTANCE.convertList(listDepartmentResult.getData()); - } - - /** - * 获得部门树结构 - * - * @return 部门树结构 - */ - public List treeDepartment() { - // 获得资源全列表 - CommonResult> listDepartmentResult = departmentRpc.listDepartments(); - listDepartmentResult.checkError(); - // 构建菜单树 - return buildDepartmentTree(listDepartmentResult.getData()); - } - - /** - * 构建部门树 - * - * @param departmentVOs 部门列表 - * @return 部门树 - */ - public static List buildDepartmentTree(List departmentVOs) { - // 排序,保证菜单的有序性 - departmentVOs.sort(Comparator.comparing(cn.iocoder.mall.systemservice.rpc.admin.vo.DepartmentVO::getSort)); - // 构建菜单树 - // 使用 LinkedHashMap 的原因,是为了排序 。实际也可以用 Stream API ,就是太丑了。 - Map treeNodeMap = new LinkedHashMap<>(); - departmentVOs.forEach(departmentVO -> treeNodeMap.put(departmentVO.getId(), DepartmentConvert.INSTANCE.convertTreeNode(departmentVO))); - // 处理父子关系 - treeNodeMap.values().stream().filter(node -> !node.getPid().equals(DepartmentIdEnum.ROOT.getId())).forEach((childNode) -> { - // 获得父节点 - DepartmentTreeNodeVO parentNode = treeNodeMap.get(childNode.getPid()); - if (parentNode == null) { - log.error("[buildDepartmentTree][department({}) 找不到父部门({})]", childNode.getId(), childNode.getPid()); - return; - } - // 将自己添加到父节点中 - if (parentNode.getChildren() == null) { - parentNode.setChildren(new ArrayList<>()); - } - parentNode.getChildren().add(childNode); - }); - // 获得到所有的根节点 - return treeNodeMap.values().stream().filter(node -> node.getPid().equals(DepartmentIdEnum.ROOT.getId())).collect(Collectors.toList()); - } - -} diff --git a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/manager/datadict/DataDictManager.java b/management-web-app/src/main/java/cn/iocoder/mall/managementweb/manager/datadict/DataDictManager.java deleted file mode 100644 index 627ea7de1..000000000 --- a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/manager/datadict/DataDictManager.java +++ /dev/null @@ -1,113 +0,0 @@ -package cn.iocoder.mall.managementweb.manager.datadict; - -import cn.iocoder.common.framework.vo.CommonResult; -import cn.iocoder.mall.managementweb.controller.datadict.dto.DataDictCreateDTO; -import cn.iocoder.mall.managementweb.controller.datadict.dto.DataDictUpdateDTO; -import cn.iocoder.mall.managementweb.controller.datadict.vo.DataDictSimpleVO; -import cn.iocoder.mall.managementweb.controller.datadict.vo.DataDictVO; -import cn.iocoder.mall.managementweb.convert.datadict.DataDictConvert; -import cn.iocoder.mall.systemservice.rpc.datadict.DataDictRpc; -import org.apache.dubbo.config.annotation.Reference; -import org.springframework.stereotype.Service; - -import java.util.Comparator; -import java.util.List; - -/** -* 数据字典 Manager -*/ -@Service -public class DataDictManager { - - private static final Comparator COMPARATOR_ENUM_VALUE_SORT = Comparator - .comparing(cn.iocoder.mall.systemservice.rpc.datadict.vo.DataDictVO::getEnumValue) - .thenComparingInt(cn.iocoder.mall.systemservice.rpc.datadict.vo.DataDictVO::getSort); - - @Reference(version = "${dubbo.consumer.DataDictRpc.version}") - private DataDictRpc dataDictRpc; - - /** - * 创建数据字典 - * - * @param createDTO 创建数据字典 DTO - * @return 数据字典 - */ - public Integer createDataDict(DataDictCreateDTO createDTO) { - CommonResult createDataDictResult = dataDictRpc.createDataDict(DataDictConvert.INSTANCE.convert(createDTO)); - createDataDictResult.checkError(); - return createDataDictResult.getData(); - } - - /** - * 更新数据字典 - * - * @param updateDTO 更新数据字典 DTO - */ - public void updateDataDict(DataDictUpdateDTO updateDTO) { - CommonResult updateDataDictResult = dataDictRpc.updateDataDict(DataDictConvert.INSTANCE.convert(updateDTO)); - updateDataDictResult.checkError(); - } - - /** - * 删除数据字典 - * - * @param dataDictId 数据字典编号 - */ - public void deleteDataDict(Integer dataDictId) { - CommonResult deleteDataDictResult = dataDictRpc.deleteDataDict(dataDictId); - deleteDataDictResult.checkError(); - } - - /** - * 获得数据字典 - * - * @param dataDictId 数据字典编号 - * @return 数据字典 - */ - public DataDictVO getDataDict(Integer dataDictId) { - CommonResult getDataDictResult = dataDictRpc.getDataDict(dataDictId); - getDataDictResult.checkError(); - return DataDictConvert.INSTANCE.convert(getDataDictResult.getData()); - } - - /** - * 获得数据字典列表 - * - * @param dataDictIds 数据字典编号列表 - * @return 数据字典列表 - */ - public List listDataDicts(List dataDictIds) { - CommonResult> listDataDictResult = dataDictRpc.listDataDicts(dataDictIds); - listDataDictResult.checkError(); - return DataDictConvert.INSTANCE.convertList(listDataDictResult.getData()); - } - - /** - * 获得全部数据字典 - * - * @return 数据字典列表 - */ - public List listDataDicts() { - CommonResult> listDataDictResult = dataDictRpc.listDataDicts(); - listDataDictResult.checkError(); - // 按照 enumValue 和 sort 排序 - listDataDictResult.getData().sort(COMPARATOR_ENUM_VALUE_SORT); - return DataDictConvert.INSTANCE.convertList(listDataDictResult.getData()); - } - - /** - * 获得全部数据字典 - * - * 精简返回字段 - * - * @return 数据字典列表 - */ - public List listSimpleDataDicts() { - CommonResult> listDataDictResult = dataDictRpc.listDataDicts(); - listDataDictResult.checkError(); - // 按照 enumValue 和 sort 排序 - listDataDictResult.getData().sort(COMPARATOR_ENUM_VALUE_SORT); - return DataDictConvert.INSTANCE.convertList02(listDataDictResult.getData()); - } - -} diff --git a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/manager/errorcode/ErrorCodeManager.java b/management-web-app/src/main/java/cn/iocoder/mall/managementweb/manager/errorcode/ErrorCodeManager.java deleted file mode 100644 index da8059d1d..000000000 --- a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/manager/errorcode/ErrorCodeManager.java +++ /dev/null @@ -1,97 +0,0 @@ -package cn.iocoder.mall.managementweb.manager.errorcode; - -import cn.iocoder.common.framework.vo.CommonResult; -import cn.iocoder.common.framework.vo.PageResult; -import cn.iocoder.mall.managementweb.controller.errorcode.dto.ErrorCodeCreateDTO; -import cn.iocoder.mall.managementweb.controller.errorcode.dto.ErrorCodePageDTO; -import cn.iocoder.mall.managementweb.controller.errorcode.dto.ErrorCodeUpdateDTO; -import cn.iocoder.mall.managementweb.controller.errorcode.vo.ErrorCodeVO; -import cn.iocoder.mall.managementweb.convert.errorcode.ErrorCodeConvert; -import cn.iocoder.mall.systemservice.enums.errorcode.ErrorCodeTypeEnum; -import cn.iocoder.mall.systemservice.rpc.errorcode.ErrorCodeRpc; -import org.apache.dubbo.config.annotation.Reference; -import org.springframework.stereotype.Service; - -import java.util.List; - -/** -* 错误码 Manager -*/ -@Service -public class ErrorCodeManager { - - @Reference(version = "${dubbo.consumer.ErrorCodeRpc.version}", validation = "false") - private ErrorCodeRpc errorCodeRpc; - - /** - * 创建错误码 - * - * @param createDTO 创建错误码 DTO - * @return 错误码 - */ - public Integer createErrorCode(ErrorCodeCreateDTO createDTO) { - CommonResult createErrorCodeResult = errorCodeRpc.createErrorCode(ErrorCodeConvert.INSTANCE.convert(createDTO) - .setType(ErrorCodeTypeEnum.MANUAL_OPERATION.getType())); - createErrorCodeResult.checkError(); - return createErrorCodeResult.getData(); - } - - /** - * 更新错误码 - * - * @param updateDTO 更新错误码 DTO - */ - public void updateErrorCode(ErrorCodeUpdateDTO updateDTO) { - CommonResult updateErrorCodeResult = errorCodeRpc.updateErrorCode(ErrorCodeConvert.INSTANCE.convert(updateDTO) - .setType(ErrorCodeTypeEnum.MANUAL_OPERATION.getType())); - updateErrorCodeResult.checkError(); - } - - /** - * 删除错误码 - * - * @param errorCodeId 错误码编号 - */ - public void deleteErrorCode(Integer errorCodeId) { - CommonResult deleteErrorCodeResult = errorCodeRpc.deleteErrorCode(errorCodeId); - deleteErrorCodeResult.checkError(); - } - - /** - * 获得错误码 - * - * @param errorCodeId 错误码编号 - * @return 错误码 - */ - public ErrorCodeVO getErrorCode(Integer errorCodeId) { - CommonResult getErrorCodeResult = errorCodeRpc.getErrorCode(errorCodeId); - getErrorCodeResult.checkError(); - return ErrorCodeConvert.INSTANCE.convert(getErrorCodeResult.getData()); - } - - /** - * 获得错误码列表 - * - * @param errorCodeIds 错误码编号列表 - * @return 错误码列表 - */ - public List listErrorCodes(List errorCodeIds) { - CommonResult> listErrorCodeResult = errorCodeRpc.listErrorCodes(errorCodeIds); - listErrorCodeResult.checkError(); - return ErrorCodeConvert.INSTANCE.convertList(listErrorCodeResult.getData()); - } - - /** - * 获得错误码分页 - * - * @param pageDTO 错误码分页查询 - * @return 错误码分页结果 - */ - public PageResult pageErrorCode(ErrorCodePageDTO pageDTO) { - CommonResult> pageErrorCodeResult - = errorCodeRpc.pageErrorCode(ErrorCodeConvert.INSTANCE.convert(pageDTO)); - pageErrorCodeResult.checkError(); - return ErrorCodeConvert.INSTANCE.convertPage(pageErrorCodeResult.getData()); - } - -} diff --git a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/manager/passport/PassportManager.java b/management-web-app/src/main/java/cn/iocoder/mall/managementweb/manager/passport/PassportManager.java deleted file mode 100644 index 6535b0114..000000000 --- a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/manager/passport/PassportManager.java +++ /dev/null @@ -1,123 +0,0 @@ -package cn.iocoder.mall.managementweb.manager.passport; - -import cn.iocoder.common.framework.enums.UserTypeEnum; -import cn.iocoder.common.framework.util.CollectionUtils; -import cn.iocoder.common.framework.vo.CommonResult; -import cn.iocoder.mall.managementweb.controller.passport.dto.PassportLoginDTO; -import cn.iocoder.mall.managementweb.controller.passport.vo.PassportAccessTokenVO; -import cn.iocoder.mall.managementweb.controller.passport.vo.PassportAdminMenuTreeNodeVO; -import cn.iocoder.mall.managementweb.controller.passport.vo.PassportAdminVO; -import cn.iocoder.mall.managementweb.controller.permission.vo.ResourceTreeNodeVO; -import cn.iocoder.mall.managementweb.convert.passport.AdminPassportConvert; -import cn.iocoder.mall.managementweb.convert.permission.ResourceConvert; -import cn.iocoder.mall.managementweb.manager.permission.ResourceManager; -import cn.iocoder.mall.systemservice.enums.permission.ResourceTypeEnum; -import cn.iocoder.mall.systemservice.rpc.admin.AdminRpc; -import cn.iocoder.mall.systemservice.rpc.admin.vo.AdminVO; -import cn.iocoder.mall.systemservice.rpc.oauth.OAuth2Rpc; -import cn.iocoder.mall.systemservice.rpc.oauth.dto.OAuth2AccessTokenRespDTO; -import cn.iocoder.mall.systemservice.rpc.oauth.dto.OAuth2CreateAccessTokenReqDTO; -import cn.iocoder.mall.systemservice.rpc.oauth.dto.OAuth2RefreshAccessTokenReqDTO; -import cn.iocoder.mall.systemservice.rpc.permission.ResourceRpc; -import cn.iocoder.mall.systemservice.rpc.permission.RoleRpc; -import cn.iocoder.mall.systemservice.rpc.permission.vo.ResourceVO; -import org.apache.dubbo.config.annotation.DubboReference; -import org.springframework.stereotype.Service; - -import java.util.Collections; -import java.util.List; -import java.util.Set; - -@Service -public class PassportManager { - - @DubboReference(version = "${dubbo.consumer.AdminRpc.version}") - private AdminRpc adminRpc; - @DubboReference(version = "${dubbo.consumer.OAuth2Rpc.version}") - private OAuth2Rpc oauth2Rpc; - @DubboReference(version = "${dubbo.consumer.RoleRpc.version}") - private RoleRpc roleRpc; - @DubboReference(version = "${dubbo.consumer.ResourceRpc.version}") - private ResourceRpc resourceRpc; - - public PassportAccessTokenVO login(PassportLoginDTO loginDTO, String ip) { - // 校验管理员密码 -// CommonResult verifyPasswordResult = adminRpc.verifyPassword(AdminPassportConvert.INSTANCE.convert(loginDTO).setIp(ip)); - CommonResult verifyPasswordResult = adminRpc.verifyPassword(AdminPassportConvert.INSTANCE.convert(loginDTO).setIp(ip)); - verifyPasswordResult.checkError(); - // 创建访问令牌 - CommonResult createAccessTokenResult = oauth2Rpc.createAccessToken( - new OAuth2CreateAccessTokenReqDTO().setUserId(verifyPasswordResult.getData().getId()) - .setUserType(UserTypeEnum.ADMIN.getValue()).setCreateIp(ip)); - createAccessTokenResult.checkError(); - // 返回 - return AdminPassportConvert.INSTANCE.convert(createAccessTokenResult.getData()); - } - - public PassportAdminVO getAdmin(Integer adminId) { - CommonResult getAdminResult = adminRpc.getAdmin(adminId); - getAdminResult.checkError(); - return AdminPassportConvert.INSTANCE.convert(getAdminResult.getData()); - } - - public PassportAccessTokenVO refreshToken(String refreshToken, String ip) { - CommonResult refreshAccessTokenResult = oauth2Rpc.refreshAccessToken( - new OAuth2RefreshAccessTokenReqDTO().setRefreshToken(refreshToken).setCreateIp(ip)); - refreshAccessTokenResult.checkError(); - return AdminPassportConvert.INSTANCE.convert(refreshAccessTokenResult.getData()); - } - - /** - * 获得指定管理员的权限列表 - * - * @param adminId 管理员编号 - * @return 权限列表 - */ - public Set listAdminPermission(Integer adminId) { - // 获得管理员拥有的角色编号列表 - CommonResult> listAdminRoleIdsResult = roleRpc.listAdminRoleIds(adminId); - listAdminRoleIdsResult.checkError(); - if (CollectionUtils.isEmpty(listAdminRoleIdsResult.getData())) { - return Collections.emptySet(); - } - // 获得角色拥有的资源列表 - CommonResult> resourceVOResult = resourceRpc.listRoleResource( - listAdminRoleIdsResult.getData(), null); - resourceVOResult.checkError(); - return CollectionUtils.convertSet(resourceVOResult.getData(), cn.iocoder.mall.systemservice.rpc.permission.vo.ResourceVO::getPermission); - } - - /** - * 获得管理员的菜单树 - * - * @param adminId 管理员编号 - * @return 菜单树 - */ - public List treeAdminMenu(Integer adminId) { - // 获得管理员拥有的角色编号列表 - CommonResult> listAdminRoleIdsResult = roleRpc.listAdminRoleIds(adminId); - listAdminRoleIdsResult.checkError(); - if (CollectionUtils.isEmpty(listAdminRoleIdsResult.getData())) { - return Collections.emptyList(); - } - // 获得角色拥有的资源(菜单)列表 - CommonResult> resourceVOResult = resourceRpc.listRoleResource( - listAdminRoleIdsResult.getData(), ResourceTypeEnum.MENU.getType()); - resourceVOResult.checkError(); - // 构建菜单树 - return this.buildAdminMenuTree(resourceVOResult.getData()); - } - - /** - * 构建菜单树 - * - * @param resourceVOs 资源(都是菜单)列表 - * @return 菜单树 - */ - private List buildAdminMenuTree(List resourceVOs) { - List treeNodeVOS = ResourceManager.buildResourceTree(resourceVOs); - // 虽然多了一层转换,但是可维护性更好。 - return ResourceConvert.INSTANCE.convert(treeNodeVOS); - } - -} diff --git a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/manager/permission/PermissionManager.java b/management-web-app/src/main/java/cn/iocoder/mall/managementweb/manager/permission/PermissionManager.java deleted file mode 100644 index d6850b4a6..000000000 --- a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/manager/permission/PermissionManager.java +++ /dev/null @@ -1,68 +0,0 @@ -package cn.iocoder.mall.managementweb.manager.permission; - -import cn.iocoder.common.framework.vo.CommonResult; -import cn.iocoder.mall.managementweb.controller.permission.dto.PermissionAssignAdminRoleDTO; -import cn.iocoder.mall.managementweb.controller.permission.dto.PermissionAssignRoleResourceDTO; -import cn.iocoder.mall.managementweb.convert.permission.PermissionConvert; -import cn.iocoder.mall.systemservice.rpc.permission.PermissionRpc; -import org.apache.dubbo.config.annotation.Reference; -import org.springframework.stereotype.Service; - -import java.util.Set; - -/** - * 权限 Manager - */ -@Service -public class PermissionManager { - - @Reference(version = "${dubbo.consumer.PermissionRpc.version}") - private PermissionRpc permissionRpc; - - /** - * 获得角色拥有的资源编号列表 - * - * @param roleId 角色编号 - * @return 资源编号列表 - */ - public Set listRoleResources(Integer roleId) { - CommonResult> listRoleResourceIdsResult = permissionRpc.listRoleResourceIds(roleId); - listRoleResourceIdsResult.checkError(); - return listRoleResourceIdsResult.getData(); - } - - /** - * 赋予角色资源 - * - * @param assignRoleResourceDTO 赋予角色资源 DTO - */ - public void assignRoleResource(PermissionAssignRoleResourceDTO assignRoleResourceDTO) { - CommonResult assignRoleResourceResult = permissionRpc.assignRoleResource( - PermissionConvert.INSTANCE.convert(assignRoleResourceDTO)); - assignRoleResourceResult.checkError(); - } - - /** - * 赋予用户角色 - * - * @param assignAdminRoleDTO 赋予用户角色 DTO - */ - public void assignAdminRole(PermissionAssignAdminRoleDTO assignAdminRoleDTO) { - CommonResult assignAdminRoleResult = permissionRpc.assignAdminRole( - PermissionConvert.INSTANCE.convert(assignAdminRoleDTO)); - assignAdminRoleResult.checkError(); - } - - /** - * 获得用户拥有的角色编号列表 - * - * @param adminId 管理员编号 - * @return 角色编号列表 - */ - public Set listAdminRoles(Integer adminId) { - CommonResult> listAdminRoleIdsResult = permissionRpc.listAdminRoleIds(adminId); - listAdminRoleIdsResult.checkError(); - return listAdminRoleIdsResult.getData(); - } - -} diff --git a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/manager/permission/ResourceManager.java b/management-web-app/src/main/java/cn/iocoder/mall/managementweb/manager/permission/ResourceManager.java deleted file mode 100644 index 8243951de..000000000 --- a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/manager/permission/ResourceManager.java +++ /dev/null @@ -1,131 +0,0 @@ -package cn.iocoder.mall.managementweb.manager.permission; - -import cn.iocoder.common.framework.vo.CommonResult; -import cn.iocoder.mall.managementweb.controller.permission.dto.ResourceCreateDTO; -import cn.iocoder.mall.managementweb.controller.permission.dto.ResourceUpdateDTO; -import cn.iocoder.mall.managementweb.controller.permission.vo.ResourceTreeNodeVO; -import cn.iocoder.mall.managementweb.controller.permission.vo.ResourceVO; -import cn.iocoder.mall.managementweb.convert.permission.ResourceConvert; -import cn.iocoder.mall.systemservice.enums.permission.ResourceIdEnum; -import cn.iocoder.mall.systemservice.rpc.permission.ResourceRpc; -import cn.iocoder.mall.systemservice.rpc.permission.RoleRpc; -import lombok.extern.slf4j.Slf4j; -import org.apache.dubbo.config.annotation.Reference; -import org.springframework.stereotype.Service; - -import java.util.*; -import java.util.stream.Collectors; - -/** -* 资源 Manager -*/ -@Service -@Slf4j -public class ResourceManager { - - @Reference(version = "${dubbo.consumer.ResourceRpc.version}") - private ResourceRpc resourceRpc; - @Reference(version = "${dubbo.consumer.RoleRpc.version}") - private RoleRpc roleRpc; - - /** - * 创建资源 - * - * @param createDTO 创建资源 DTO - * @return 资源 - */ - public Integer createResource(ResourceCreateDTO createDTO, Integer createAdminId) { - CommonResult createResourceResult = resourceRpc.createResource(ResourceConvert.INSTANCE.convert(createDTO) - .setCreateAdminId(createAdminId)); - createResourceResult.checkError(); - return createResourceResult.getData(); - } - - /** - * 更新资源 - * - * @param updateDTO 更新资源 DTO - */ - public void updateResource(ResourceUpdateDTO updateDTO) { - CommonResult updateResourceResult = resourceRpc.updateResource(ResourceConvert.INSTANCE.convert(updateDTO)); - updateResourceResult.checkError(); - } - - /** - * 删除资源 - * - * @param resourceId 资源编号 - */ - public void deleteResource(Integer resourceId) { - CommonResult deleteResourceResult = resourceRpc.deleteResource(resourceId); - deleteResourceResult.checkError(); - } - - /** - * 获得资源 - * - * @param resourceId 资源编号 - * @return 资源 - */ - public ResourceVO getResource(Integer resourceId) { - CommonResult getResourceResult = resourceRpc.getResource(resourceId); - getResourceResult.checkError(); - return ResourceConvert.INSTANCE.convert(getResourceResult.getData()); - } - - /** - * 获得资源列表 - * - * @param resourceIds 资源编号列表 - * @return 资源列表 - */ - public List listResources(List resourceIds) { - CommonResult> listResourceResult = resourceRpc.listResource(resourceIds); - return ResourceConvert.INSTANCE.convertList(listResourceResult.getData()); - } - - /** - * 获得资源树结构 - * - * @return 资源树结构 - */ - public List treeResource() { - // 获得资源全列表 - CommonResult> listResourceResult = resourceRpc.listResource(); - listResourceResult.checkError(); - // 构建菜单树 - return buildResourceTree(listResourceResult.getData()); - } - - /** - * 构建资源树 - * - * @param resourceVOs 资源列表 - * @return 资源树 - */ - public static List buildResourceTree(List resourceVOs) { - // 排序,保证菜单的有序性 - resourceVOs.sort(Comparator.comparing(cn.iocoder.mall.systemservice.rpc.permission.vo.ResourceVO::getSort)); - // 构建菜单树 - // 使用 LinkedHashMap 的原因,是为了排序 。实际也可以用 Stream API ,就是太丑了。 - Map treeNodeMap = new LinkedHashMap<>(); - resourceVOs.forEach(resourceVO -> treeNodeMap.put(resourceVO.getId(), ResourceConvert.INSTANCE.convertTreeNode(resourceVO))); - // 处理父子关系 - treeNodeMap.values().stream().filter(node -> !node.getPid().equals(ResourceIdEnum.ROOT.getId())).forEach((childNode) -> { - // 获得父节点 - ResourceTreeNodeVO parentNode = treeNodeMap.get(childNode.getPid()); - if (parentNode == null) { - log.error("[buildResourceTree][resource({}) 找不到父资源({})]", childNode.getId(), childNode.getPid()); - return; - } - // 将自己添加到父节点中 - if (parentNode.getChildren() == null) { - parentNode.setChildren(new ArrayList<>()); - } - parentNode.getChildren().add(childNode); - }); - // 获得到所有的根节点 - return treeNodeMap.values().stream().filter(node -> node.getPid().equals(ResourceIdEnum.ROOT.getId())).collect(Collectors.toList()); - } - -} diff --git a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/manager/permission/RoleManager.java b/management-web-app/src/main/java/cn/iocoder/mall/managementweb/manager/permission/RoleManager.java deleted file mode 100644 index 1abe627f0..000000000 --- a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/manager/permission/RoleManager.java +++ /dev/null @@ -1,105 +0,0 @@ -package cn.iocoder.mall.managementweb.manager.permission; - -import cn.iocoder.common.framework.vo.CommonResult; -import cn.iocoder.common.framework.vo.PageResult; -import cn.iocoder.mall.managementweb.controller.permission.dto.RoleCreateDTO; -import cn.iocoder.mall.managementweb.controller.permission.dto.RolePageDTO; -import cn.iocoder.mall.managementweb.controller.permission.dto.RoleUpdateDTO; -import cn.iocoder.mall.managementweb.controller.permission.vo.RoleVO; -import cn.iocoder.mall.managementweb.convert.permission.RoleConvert; -import cn.iocoder.mall.systemservice.rpc.permission.RoleRpc; -import org.apache.dubbo.config.annotation.Reference; -import org.springframework.stereotype.Service; - -import java.util.List; - -/** -* 角色 Manager -*/ -@Service -public class RoleManager { - - @Reference(version = "${dubbo.consumer.RoleRpc.version}") - private RoleRpc roleRpc; - - /** - * 创建角色 - * - * @param createDTO 创建角色 DTO - * @return 角色 - */ - public Integer createRole(RoleCreateDTO createDTO, Integer createAdminId) { - CommonResult createRoleResult = roleRpc.createRole(RoleConvert.INSTANCE.convert(createDTO).setCreateAdminId(createAdminId)); - createRoleResult.checkError(); - return createRoleResult.getData(); - } - - /** - * 更新角色 - * - * @param updateDTO 更新角色 DTO - */ - public void updateRole(RoleUpdateDTO updateDTO) { - CommonResult updateRoleResult = roleRpc.updateRole(RoleConvert.INSTANCE.convert(updateDTO)); - updateRoleResult.checkError(); - } - - /** - * 删除角色 - * - * @param roleId 角色编号 - */ - public void deleteRole(Integer roleId) { - CommonResult deleteRoleResult = roleRpc.deleteRole(roleId); - deleteRoleResult.checkError(); - } - - /** - * 获得角色 - * - * @param roleId 角色编号 - * @return 角色 - */ - public RoleVO getRole(Integer roleId) { - CommonResult getRoleResult = roleRpc.getRole(roleId); - getRoleResult.checkError(); - return RoleConvert.INSTANCE.convert(getRoleResult.getData()); - } - - /** - * 获得所有角色 - * - * @return 角色列表 - */ - public List listAllRoles() { - CommonResult> listRoleResult = roleRpc.listAllRoles(); - listRoleResult.checkError(); - return RoleConvert.INSTANCE.convertList(listRoleResult.getData()); - } - - /** - * 获得角色列表 - * - * @param roleIds 角色编号列表 - * @return 角色列表 - */ - public List listRoles(List roleIds) { - CommonResult> listRoleResult = roleRpc.listRoles(roleIds); - listRoleResult.checkError(); - return RoleConvert.INSTANCE.convertList(listRoleResult.getData()); - } - - /** - * 获得角色分页 - * - * @param pageDTO 角色编号列表 - * @return 角色列表 - */ - public PageResult pageRole(RolePageDTO pageDTO) { - CommonResult> pageRoleResult = - roleRpc.pageRole(RoleConvert.INSTANCE.convert(pageDTO)); - pageRoleResult.checkError(); - return RoleConvert.INSTANCE.convertPage(pageRoleResult.getData()); - } - -} diff --git a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/manager/systemlog/SystemAccessLogManager.java b/management-web-app/src/main/java/cn/iocoder/mall/managementweb/manager/systemlog/SystemAccessLogManager.java deleted file mode 100644 index 6e4d21e64..000000000 --- a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/manager/systemlog/SystemAccessLogManager.java +++ /dev/null @@ -1,34 +0,0 @@ -package cn.iocoder.mall.managementweb.manager.systemlog; - -import cn.iocoder.common.framework.vo.CommonResult; -import cn.iocoder.common.framework.vo.PageResult; -import cn.iocoder.mall.managementweb.controller.systemlog.dto.SystemAccessLogPageDTO; -import cn.iocoder.mall.managementweb.controller.systemlog.vo.SystemAccessLogVO; -import cn.iocoder.mall.managementweb.convert.systemlog.SystemAccessLogConvert; -import cn.iocoder.mall.systemservice.rpc.systemlog.SystemAccessLogRpc; -import org.apache.dubbo.config.annotation.DubboReference; -import org.springframework.stereotype.Service; - -/** -* 系统访问日志 Manager -*/ -@Service -public class SystemAccessLogManager { - - @DubboReference(version = "${dubbo.consumer.SystemAccessLogRpc.version}") - private SystemAccessLogRpc systemAccessLogRpc; - - /** - * 获得系统访问日志分页 - * - * @param pageDTO 系统访问日志分页查询 - * @return 系统访问日志分页结果 - */ - public PageResult pageSystemAccessLog(SystemAccessLogPageDTO pageDTO) { - CommonResult> pageSystemAccessLogResult = - systemAccessLogRpc.pageSystemAccessLog(SystemAccessLogConvert.INSTANCE.convert(pageDTO)); - pageSystemAccessLogResult.checkError(); - return SystemAccessLogConvert.INSTANCE.convertPage(pageSystemAccessLogResult.getData()); - } - -} diff --git a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/manager/systemlog/SystemExceptionLogManager.java b/management-web-app/src/main/java/cn/iocoder/mall/managementweb/manager/systemlog/SystemExceptionLogManager.java deleted file mode 100644 index 992f1398f..000000000 --- a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/manager/systemlog/SystemExceptionLogManager.java +++ /dev/null @@ -1,76 +0,0 @@ -package cn.iocoder.mall.managementweb.manager.systemlog; - -import cn.iocoder.common.framework.vo.CommonResult; -import cn.iocoder.common.framework.vo.PageResult; -import cn.iocoder.mall.managementweb.controller.systemlog.dto.SystemExceptionLogPageDTO; -import cn.iocoder.mall.managementweb.controller.systemlog.dto.SystemExceptionLogProcessDTO; -import cn.iocoder.mall.managementweb.controller.systemlog.vo.SystemExceptionLogDetailVO; -import cn.iocoder.mall.managementweb.controller.systemlog.vo.SystemExceptionLogVO; -import cn.iocoder.mall.managementweb.convert.systemlog.SystemExceptionLogConvert; -import cn.iocoder.mall.systemservice.rpc.admin.AdminRpc; -import cn.iocoder.mall.systemservice.rpc.admin.vo.AdminVO; -import cn.iocoder.mall.systemservice.rpc.systemlog.SystemExceptionLogRpc; -import org.apache.dubbo.config.annotation.Reference; -import org.springframework.stereotype.Service; - -/** -* 系统异常日志 Manager -*/ -@Service -public class SystemExceptionLogManager { - - @Reference(version = "${dubbo.consumer.SystemExceptionLogRpc.version}") - private SystemExceptionLogRpc systemExceptionLogRpc; - @Reference(version = "${dubbo.consumer.AdminRpc.version}") - private AdminRpc adminRpc; - - /** - * 获得系统异常日志 - * - * @param systemExceptionLogId 系统异常日志编号 - * @return 系统异常日志 - */ - public SystemExceptionLogDetailVO getSystemExceptionLogDetail(Integer systemExceptionLogId) { - // 获得系统异常明细 - CommonResult getSystemExceptionLogResult - = systemExceptionLogRpc.getSystemExceptionLog(systemExceptionLogId); - getSystemExceptionLogResult.checkError(); - SystemExceptionLogDetailVO logDetailVO = SystemExceptionLogConvert.INSTANCE.convert(getSystemExceptionLogResult.getData()); - // 拼接处理管理员信息 - if (getSystemExceptionLogResult.getData().getProcessAdminId() != null) { - CommonResult adminVOResult = adminRpc.getAdmin(getSystemExceptionLogResult.getData().getProcessAdminId()); - adminVOResult.checkError(); - if (adminVOResult.getData() != null) { - SystemExceptionLogDetailVO.Admin admin = SystemExceptionLogConvert.INSTANCE.convert(adminVOResult.getData()); - logDetailVO.setProcessAdmin(admin); - } - } - return logDetailVO; - } - - /** - * 获得系统异常日志分页 - * - * @param pageDTO 系统异常日志分页查询 - * @return 系统异常日志分页结果 - */ - public PageResult pageSystemExceptionLog(SystemExceptionLogPageDTO pageDTO) { - CommonResult> pageSystemExceptionLogResult - = systemExceptionLogRpc.pageSystemExceptionLog(SystemExceptionLogConvert.INSTANCE.convert(pageDTO)); - pageSystemExceptionLogResult.checkError(); - return SystemExceptionLogConvert.INSTANCE.convertPage(pageSystemExceptionLogResult.getData()); - } - - /** - * 处理系统异常日志 - * - * @param processAdminId 处理管理员编号 - * @param processDTO 处理系统异常日志 DTO - */ - public void processSystemExceptionLog(Integer processAdminId, SystemExceptionLogProcessDTO processDTO) { - CommonResult processSystemExceptionLogResult = systemExceptionLogRpc.processSystemExceptionLog( - SystemExceptionLogConvert.INSTANCE.convert(processDTO).setProcessAdminId(processAdminId)); - processSystemExceptionLogResult.checkError(); - } - -} diff --git a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/service/pay/transaction/PayTransactionService.java b/management-web-app/src/main/java/cn/iocoder/mall/managementweb/service/pay/transaction/PayTransactionService.java deleted file mode 100644 index ca322453d..000000000 --- a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/service/pay/transaction/PayTransactionService.java +++ /dev/null @@ -1,29 +0,0 @@ -package cn.iocoder.mall.managementweb.service.pay.transaction; - -import cn.iocoder.common.framework.vo.PageResult; -import cn.iocoder.mall.managementweb.client.pay.transaction.PayTransactionClient; -import cn.iocoder.mall.managementweb.controller.pay.vo.transaction.PayTransactionPageReqVO; -import cn.iocoder.mall.managementweb.controller.pay.vo.transaction.PayTransactionRespVO; -import cn.iocoder.mall.managementweb.convert.pay.transaction.PayTransactionConvert; -import cn.iocoder.mall.payservice.rpc.transaction.dto.PayTransactionRespDTO; -import com.google.common.collect.Lists; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import javax.annotation.Resource; -import java.util.List; -import java.util.stream.Stream; - -@Service -public class PayTransactionService { - - @Resource - private PayTransactionClient payTransactionClient; - - public PageResult pagePayTransaction(PayTransactionPageReqVO pageReqVO) { - PageResult payTransactionPage = payTransactionClient.pagePayTransaction( - PayTransactionConvert.INSTANCE.convert(pageReqVO)); - return PayTransactionConvert.INSTANCE.convertPage(payTransactionPage); - } - -} diff --git a/management-web-app/src/main/resources/application-dev.yml b/management-web-app/src/main/resources/application-dev.yml deleted file mode 100644 index 31a3a702f..000000000 --- a/management-web-app/src/main/resources/application-dev.yml +++ /dev/null @@ -1,18 +0,0 @@ -spring: - # Spring Cloud 配置项 - cloud: - nacos: - # Spring Cloud Nacos Discovery 配置项 - discovery: - server-addr: 400-infra.server.iocoder.cn:8848 # Nacos 服务器地址 - namespace: dev # Nacos 命名空间 - -# Dubbo 配置项 -dubbo: - # Dubbo 注册中心 - registry: - # address: spring-cloud://400-infra.server.iocoder.cn:8848 # 指定 Dubbo 服务注册中心的地址 - address: nacos://400-infra.server.iocoder.cn:8848?namespace=dev # 指定 Dubbo 服务注册中心的地址 - -# Mall 认证安全配置 -mall.security.admin.demo: true # 是否开启演示模式 diff --git a/management-web-app/src/main/resources/application-local.yml b/management-web-app/src/main/resources/application-local.yml deleted file mode 100644 index 2e26cd388..000000000 --- a/management-web-app/src/main/resources/application-local.yml +++ /dev/null @@ -1,15 +0,0 @@ -spring: - # Spring Cloud 配置项 - cloud: - nacos: - # Spring Cloud Nacos Discovery 配置项 - discovery: - server-addr: 400-infra.server.iocoder.cn:8848 # Nacos 服务器地址 - namespace: dev # Nacos 命名空间 - -# Dubbo 配置项 -dubbo: - # Dubbo 注册中心 - registry: - # address: spring-cloud://400-infra.server.iocoder.cn:8848 # 指定 Dubbo 服务注册中心的地址 - address: nacos://400-infra.server.iocoder.cn:8848?namespace=dev # 指定 Dubbo 服务注册中心的地址 diff --git a/management-web-app/src/main/resources/application.yml b/management-web-app/src/main/resources/application.yml deleted file mode 100644 index 97ff516da..000000000 --- a/management-web-app/src/main/resources/application.yml +++ /dev/null @@ -1,82 +0,0 @@ -# 服务器的配置项 -server: - port: 18083 - servlet: - context-path: /management-api/ - -spring: - # Application 的配置项 - application: - name: management-web - # Profile 的配置项 - profiles: - active: local - # SpringMVC 配置项 - mvc: - throw-exception-if-no-handler-found: true # 匹配不到路径时,抛出 NoHandlerFoundException 异常 - static-path-pattern: /doc.html # 静态资源的路径 - -# Dubbo 配置项 -dubbo: - # Spring Cloud Alibaba Dubbo 专属配置 - cloud: - subscribed-services: 'system-service' # 设置订阅的应用列表,默认为 * 订阅所有应用 - # Dubbo 服务消费者的配置 - consumer: - timeout: 10000 - validation: true # 开启 Consumer 参数校验 - check: false # 本地启动,不进行校验,不一定会使用到未启动的服务,嘿嘿~ - UserSmsCodeRpc: - version: 1.0.0 - UserRpc: - version: 1.0.0 - OAuth2Rpc: - version: 1.0.0 - AdminRpc: - version: 1.0.0 - ResourceRpc: - version: 1.0.0 - RoleRpc: - version: 1.0.0 - PermissionRpc: - version: 1.0.0 - DepartmentRpc: - version: 1.0.0 - DataDictRpc: - version: 1.0.0 - SystemAccessLogRpc: - version: 1.0.0 - SystemExceptionLogRpc: - version: 1.0.0 - ErrorCodeRpc: - version: 1.0.0 - ProductCategoryRpc: - version: 1.0.0 - ProductBrandRpc: - version: 1.0.0 - ProductSpuRpc: - version: 1.0.0 - ProductAttrRpc: - version: 1.0.0 - CouponTemplateRpc: - version: 1.0.0 - PromotionActivityRpc: - version: 1.0.0 - BannerRpc: - version: 1.0.0 - ProductRecommendRpc: - version: 1.0.0 - PayTransactionRpc: - version: 1.0.0 - -# Swagger 配置项 -swagger: - title: 管理后台 - description: 提供管理员管理的所有功能 - version: 1.0.0 - base-package: cn.iocoder.mall.managementweb.controller - -# Actuator 监控配置项 -management: - server.port: 38087 # 独立端口,避免被暴露出去 - endpoints.web.exposure.include: '*' # 暴露所有监控端点 diff --git a/moved/system/system-biz/pom.xml b/moved/system/system-biz/pom.xml deleted file mode 100644 index 6f2ee0145..000000000 --- a/moved/system/system-biz/pom.xml +++ /dev/null @@ -1,106 +0,0 @@ - - - - system - cn.iocoder.mall - 1.0-SNAPSHOT - - 4.0.0 - - system-biz - - - - - cn.iocoder.mall - system-biz-api - 1.0-SNAPSHOT - - - - - org.springframework.boot - spring-boot-starter - - - - - mysql - mysql-connector-java - - - - org.springframework - spring-tx - - - org.springframework - spring-jdbc - - - com.alibaba - druid-spring-boot-starter - - - - cn.iocoder.mall - mall-spring-boot-starter-mybatis - 1.0-SNAPSHOT - - - - - com.yunpian.sdk - yunpian-java-sdk - - - com.aliyun - aliyun-java-sdk-core - - - - - com.qiniu - qiniu-java-sdk - - - - - org.mapstruct - mapstruct - - - org.mapstruct - mapstruct-jdk8 - - - org.projectlombok - lombok - - - - com.alibaba - fastjson - - - - - org.springframework.boot - spring-boot-starter-aop - - - org.springframework - spring-webmvc - compile - - - javax.servlet - servlet-api - compile - - - - - diff --git a/moved/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/bo/smsSign/ListSmsSignBO.java b/moved/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/bo/smsSign/ListSmsSignBO.java deleted file mode 100644 index bc3a3db8d..000000000 --- a/moved/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/bo/smsSign/ListSmsSignBO.java +++ /dev/null @@ -1,53 +0,0 @@ -package cn.iocoder.mall.system.biz.bo.smsSign; - -import com.fasterxml.jackson.annotation.JsonFormat; -import lombok.Data; -import lombok.experimental.Accessors; - -import java.util.Date; - -/** - * sms page - * - * @author Sin - * @time 2019/5/19 4:23 PM - */ -@Data -@Accessors(chain = true) -public class ListSmsSignBO { - - /** - * 编号 - */ - private Integer id; - /** - * 短信平台 - */ - private Integer platform; - /** - * 签名名称 - */ - private String sign; - /** - * 审核状态 - *

- * - 1、审核中 - * - 2、审核成功 - * - 3、审核失败 - */ - private Integer applyStatus; - /** - * 审核信息 - */ - private String applyMessage; - /** - * 更新时间 - */ - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") - private Date updateTime; - /** - * 创建时间 - */ - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") - private Date createTime; -} diff --git a/moved/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/bo/smsSign/SmsSignBO.java b/moved/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/bo/smsSign/SmsSignBO.java deleted file mode 100644 index e14e3f38e..000000000 --- a/moved/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/bo/smsSign/SmsSignBO.java +++ /dev/null @@ -1,40 +0,0 @@ -package cn.iocoder.mall.system.biz.bo.smsSign; - -import lombok.Data; -import lombok.experimental.Accessors; - -/** - * 短信签名 - * - * @author Sin - * @time 2019/5/16 6:30 PM - */ -@Data -@Accessors(chain = true) -public class SmsSignBO { - - /** - * 编号 - */ - private Integer id; - /** - * 签名id 这个是第三方的 - */ - private Integer signId; - /** - * 签名名称 - */ - private String sign; - /** - * 审核状态 - * - * - 1、审核中 - * - 2、审核成功 - * - 3、审核失败 - */ - private Integer applyStatus; - /** - * 审核信息 - */ - private String applyMessage; -} diff --git a/moved/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/bo/smsTemplate/ListSmsTemplateBO.java b/moved/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/bo/smsTemplate/ListSmsTemplateBO.java deleted file mode 100644 index 0cbf83d58..000000000 --- a/moved/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/bo/smsTemplate/ListSmsTemplateBO.java +++ /dev/null @@ -1,103 +0,0 @@ -package cn.iocoder.mall.system.biz.bo.smsTemplate; - -import com.fasterxml.jackson.annotation.JsonFormat; -import lombok.Data; -import lombok.experimental.Accessors; - -import java.util.Date; - -/** - * sms page - * - * @author Sin - * @time 2019/5/19 4:23 PM - */ -@Data -@Accessors(chain = true) -public class ListSmsTemplateBO { - - /** - * 编号 - */ - private Integer id; - /** - * 模板编号 (第三方的) - */ - private Integer smsSignId; - /** - * 短信签名 id - */ - private String platform; - /** - * 短信模板 Code - */ - private String templateCode; - /** - * 短信模板 - */ - private String template; - /** - * 短信类型 - */ - private Integer smsType; - /** - * 审核状态 - *

- * 1、审核中 - * 2、审核成功 - * 3、审核失败 - */ - private Integer applyStatus; - /** - * 审核信息 - */ - private String applyMessage; - /** - * 更新时间 - */ - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") - private Date updateTime; - /** - * 创建时间 - */ - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") - private Date createTime; - - /// - /// 关联字段 - - /** - * 签名信息 - */ - private Sign sign; - - - @Data - @Accessors(chain = true) - public static class Sign { - /** - * 编号 - */ - private Integer id; - /** - * 签名id 这个是第三方的 - */ - private String platformId; - /** - * 签名名称 - */ - private String sign; - /** - * 审核状态 - *

- * - 1、审核中 - * - 2、审核成功 - * - 3、审核失败 - */ - private Integer applyStatus; - /** - * 审核信息 - */ - private String applyMessage; - } -} diff --git a/moved/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/bo/smsTemplate/SmsTemplateBO.java b/moved/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/bo/smsTemplate/SmsTemplateBO.java deleted file mode 100644 index d19aab797..000000000 --- a/moved/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/bo/smsTemplate/SmsTemplateBO.java +++ /dev/null @@ -1,44 +0,0 @@ -package cn.iocoder.mall.system.biz.bo.smsTemplate; - -import lombok.Data; -import lombok.experimental.Accessors; - -/** - * 短信 template - * - * @author Sin - * @time 2019/5/16 7:41 PM - */ -@Data -@Accessors(chain = true) -public class SmsTemplateBO { - - /** - * 编号 - */ - private Integer id; - /** - * 模板编号 (第三方的) - */ - private Integer smsSignId; - /** - * 短信签名 id - */ - private String platformId; - /** - * 短信模板 - */ - private String template; - /** - * 审核状态 - * - * 1、审核中 - * 2、审核成功 - * 3、审核失败 - */ - private Integer applyStatus; - /** - * 审核信息 - */ - private String applyMessage; -} diff --git a/moved/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/config/QiniuConfiguration.java b/moved/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/config/QiniuConfiguration.java deleted file mode 100644 index 7e5519d00..000000000 --- a/moved/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/config/QiniuConfiguration.java +++ /dev/null @@ -1,21 +0,0 @@ -package cn.iocoder.mall.system.biz.config; - -import com.qiniu.util.Auth; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -@Configuration -public class QiniuConfiguration { - - @Value("${qiniu.access-key}") - private String accessKey; - @Value("${qiniu.secret-key}") - private String secretKey; - - @Bean - public Auth auth() { - return Auth.create(accessKey, secretKey); - } - -} diff --git a/moved/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/convert/SmsSignConvert.java b/moved/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/convert/SmsSignConvert.java deleted file mode 100644 index 8bf1df19b..000000000 --- a/moved/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/convert/SmsSignConvert.java +++ /dev/null @@ -1,29 +0,0 @@ -package cn.iocoder.mall.system.biz.convert; - -import cn.iocoder.mall.system.biz.bo.smsSign.ListSmsSignBO; -import cn.iocoder.mall.system.biz.bo.smsSign.SmsSignBO; -import cn.iocoder.mall.system.biz.dataobject.sms.SmsSignDO; -import org.mapstruct.Mapper; -import org.mapstruct.Mappings; -import org.mapstruct.factory.Mappers; - -import java.util.List; - -/** - * 短信 签名 - * - * @author Sin - * @time 2019/5/16 6:31 PM - */ -@Mapper -public interface SmsSignConvert { - - SmsSignConvert INSTANCE = Mappers.getMapper(SmsSignConvert.class); - - @Mappings({}) - SmsSignBO convert(SmsSignDO bean); - - @Mappings({}) - List convert(List beans); - -} diff --git a/moved/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/convert/SmsTemplateConvert.java b/moved/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/convert/SmsTemplateConvert.java deleted file mode 100644 index 586fcc389..000000000 --- a/moved/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/convert/SmsTemplateConvert.java +++ /dev/null @@ -1,32 +0,0 @@ -package cn.iocoder.mall.system.biz.convert; - -import cn.iocoder.mall.system.biz.bo.smsTemplate.ListSmsTemplateBO; -import cn.iocoder.mall.system.biz.bo.smsTemplate.SmsTemplateBO; -import cn.iocoder.mall.system.biz.dataobject.sms.SmsSignDO; -import cn.iocoder.mall.system.biz.dataobject.sms.SmsTemplateDO; -import org.mapstruct.Mapper; -import org.mapstruct.Mappings; -import org.mapstruct.factory.Mappers; - -import java.util.List; - -/** - * 短信 template - * - * @author Sin - * @time 2019/5/16 7:43 PM - */ -@Mapper -public interface SmsTemplateConvert { - - SmsTemplateConvert INSTANCE = Mappers.getMapper(SmsTemplateConvert.class); - - @Mappings({}) - SmsTemplateBO convert(SmsTemplateDO smsTemplateDO); - - @Mappings({}) - List convert(List smsTemplateDOList); - - @Mappings({}) - List convertTemplateSign(List smsSignDOList); -} diff --git a/moved/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/dao/sms/SmsSendMapper.java b/moved/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/dao/sms/SmsSendMapper.java deleted file mode 100644 index 88475fab0..000000000 --- a/moved/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/dao/sms/SmsSendMapper.java +++ /dev/null @@ -1,15 +0,0 @@ -package cn.iocoder.mall.system.biz.dao.sms; - -import cn.iocoder.mall.system.biz.dataobject.sms.SmsSendLogDO; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import org.springframework.stereotype.Repository; - -/** - * 短信 - * - * @author Sin - * @time 2019/5/16 6:18 PM - */ -@Repository -public interface SmsSendMapper extends BaseMapper { -} diff --git a/moved/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/dao/sms/SmsSignMapper.java b/moved/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/dao/sms/SmsSignMapper.java deleted file mode 100644 index 6aa05f8dd..000000000 --- a/moved/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/dao/sms/SmsSignMapper.java +++ /dev/null @@ -1,39 +0,0 @@ -package cn.iocoder.mall.system.biz.dao.sms; - -import cn.iocoder.mall.system.biz.dataobject.sms.SmsSignDO; -import cn.iocoder.mall.system.biz.dto.smsSign.ListSmsSignDTO; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -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; -import org.springframework.util.StringUtils; - -/** - * 短信 - * - * @author Sin - * @time 2019/5/16 6:18 PM - */ -@Repository -public interface SmsSignMapper extends BaseMapper { - - default IPage listSmsSign(ListSmsSignDTO queryDTO) { - LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - if (queryDTO.getApplyStatus() != null) { - queryWrapper.eq(SmsSignDO::getApplyStatus, queryDTO.getApplyStatus()); - } - if (!StringUtils.isEmpty(queryDTO.getSign())) { - queryWrapper.like(SmsSignDO::getSign, queryDTO.getSign()); - } - if (!StringUtils.isEmpty(queryDTO.getId())) { - queryWrapper.eq(SmsSignDO::getId, queryDTO.getId()); - } - - Page page = new Page() - .setSize(queryDTO.getPageSize()) - .setCurrent(queryDTO.getPageNo()) - .setDesc("create_time"); - return selectPage(page, queryWrapper); - } -} diff --git a/moved/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/dao/sms/SmsTemplateMapper.java b/moved/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/dao/sms/SmsTemplateMapper.java deleted file mode 100644 index effa88f88..000000000 --- a/moved/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/dao/sms/SmsTemplateMapper.java +++ /dev/null @@ -1,42 +0,0 @@ -package cn.iocoder.mall.system.biz.dao.sms; - -import cn.iocoder.mall.system.biz.dataobject.sms.SmsTemplateDO; -import cn.iocoder.mall.system.biz.dto.smsTemplate.ListSmsTemplateDTO; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -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; -import org.springframework.util.StringUtils; - -/** - * 短信 template - * - * @author Sin - * @time 2019/5/16 6:18 PM - */ -@Repository -public interface SmsTemplateMapper extends BaseMapper { - - default IPage listSmsTemplate(ListSmsTemplateDTO listSmsTemplateDTO) { - QueryWrapper queryWrapper = new QueryWrapper<>(); - if (listSmsTemplateDTO.getApplyStatus() != null) { - queryWrapper.eq("apply_status", listSmsTemplateDTO.getApplyStatus()); - } - if (listSmsTemplateDTO.getSmsSignId() != null) { - queryWrapper.eq("sms_sign_id", listSmsTemplateDTO.getSmsSignId()); - } - if (!StringUtils.isEmpty(listSmsTemplateDTO.getTemplate())) { - queryWrapper.like("template", listSmsTemplateDTO.getTemplate()); - } - if (!StringUtils.isEmpty(listSmsTemplateDTO.getId())) { - queryWrapper.eq("id", listSmsTemplateDTO.getId()); - } - - Page page = new Page() - .setSize(listSmsTemplateDTO.getPageSize()) - .setCurrent(listSmsTemplateDTO.getPageNo()) - .setDesc("create_time"); - return selectPage(page, queryWrapper); - } -} diff --git a/moved/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/dataobject/sms/SmsSendLogDO.java b/moved/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/dataobject/sms/SmsSendLogDO.java deleted file mode 100644 index 2d9c7c33d..000000000 --- a/moved/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/dataobject/sms/SmsSendLogDO.java +++ /dev/null @@ -1,37 +0,0 @@ -package cn.iocoder.mall.system.biz.dataobject.sms; - -import cn.iocoder.mall.mybatis.core.dataobject.BaseDO; -import lombok.Data; -import lombok.experimental.Accessors; - -/** - * 短信 client log - * - * @author Sin - * @time 2019/5/25 12:36 PM - */ -@Data -@Accessors(chain = true) -public class SmsSendLogDO extends BaseDO { - - /** - * 编号 - */ - private Integer id; - /** - * 短信模板 - */ - private Integer templateId; - /** - * 短信 - */ - private String template; - /** - * 参数 - */ - private String params; - /** - * 发送信息 - */ - private String message; -} diff --git a/moved/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/dataobject/sms/SmsSignDO.java b/moved/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/dataobject/sms/SmsSignDO.java deleted file mode 100644 index de5310868..000000000 --- a/moved/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/dataobject/sms/SmsSignDO.java +++ /dev/null @@ -1,48 +0,0 @@ -package cn.iocoder.mall.system.biz.dataobject.sms; - -import cn.iocoder.mall.mybatis.core.dataobject.DeletableDO; -import com.baomidou.mybatisplus.annotation.TableName; -import lombok.Data; -import lombok.experimental.Accessors; - -/** - * 短信签名 - * - * 签名是短信发送前缀 如:【阿里云】、【小红书】 - * - * @author Sin - * @time 2019/5/16 12:28 PM - */ -@Data -@Accessors(chain = true) -@TableName("sms_sign") -public class SmsSignDO extends DeletableDO { - - /** - * 编号 - */ - private Integer id; - /** - * 签名名称 - */ - private String sign; - /** - * 平台 - * - * 1、云片 - * 2、阿里云 - */ - private Integer platform; - /** - * 审核状态 - * - * - 1、审核中 - * - 2、审核成功 - * - 10、审核失败 - */ - private Integer applyStatus; - /** - * 审核信息 - */ - private String applyMessage; -} diff --git a/moved/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/dataobject/sms/SmsTemplateDO.java b/moved/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/dataobject/sms/SmsTemplateDO.java deleted file mode 100644 index d0dfaeae8..000000000 --- a/moved/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/dataobject/sms/SmsTemplateDO.java +++ /dev/null @@ -1,59 +0,0 @@ -package cn.iocoder.mall.system.biz.dataobject.sms; - -import cn.iocoder.mall.mybatis.core.dataobject.DeletableDO; -import com.baomidou.mybatisplus.annotation.TableName; -import lombok.Data; -import lombok.experimental.Accessors; - -/** - * 短信 模板 - * - * @author Sin - * @time 2019/5/16 12:31 PM - */ -@Data -@Accessors(chain = true) -@TableName("sms_template") -public class SmsTemplateDO extends DeletableDO { - - /** - * 编号 - */ - private Integer id; - /** - * 模板编号 (第三方的) - */ - private Integer smsSignId; - /** - * 模板 code(第三方平台 code) - */ - private String templateCode; - /** - * 短信签名 id - */ - private Integer platform; - /** - * 短信模板 - */ - private String template; - /** - * 短信类型 - * - * - 验证码类 - * - 通知类 - * - 营销类 - */ - private Integer smsType; - /** - * 审核状态 - * - * 1、审核中 - * 2、审核成功 - * 10、审核失败 - */ - private Integer applyStatus; - /** - * 审核信息 - */ - private String applyMessage; -} diff --git a/moved/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/dto/smsSign/AddSignDTO.java b/moved/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/dto/smsSign/AddSignDTO.java deleted file mode 100644 index 01fc7bfcb..000000000 --- a/moved/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/dto/smsSign/AddSignDTO.java +++ /dev/null @@ -1,21 +0,0 @@ -package cn.iocoder.mall.system.biz.dto.smsSign; - -import lombok.Data; -import lombok.experimental.Accessors; - -import java.io.Serializable; - -/** - * 添加 sign - * - * author: sin - * time: 2020/4/20 11:10 上午 - */ -@Data -@Accessors(chain = true) -public class AddSignDTO implements Serializable { - - private String sign; - - private Integer platform; -} diff --git a/moved/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/dto/smsSign/ListSmsSignDTO.java b/moved/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/dto/smsSign/ListSmsSignDTO.java deleted file mode 100644 index 0ed8bb8bb..000000000 --- a/moved/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/dto/smsSign/ListSmsSignDTO.java +++ /dev/null @@ -1,29 +0,0 @@ -package cn.iocoder.mall.system.biz.dto.smsSign; - -import cn.iocoder.common.framework.vo.PageParam; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; -import lombok.experimental.Accessors; - -/** - * page 短信模板 query - * - * @author Sin - * @time 2019/5/19 4:32 PM - */ -@Data -@Accessors(chain = true) -@ApiModel("短信服务查询") -public class ListSmsSignDTO extends PageParam { - - @ApiModelProperty("编号") - private Integer id; - - @ApiModelProperty("签名") - private String sign; - - @ApiModelProperty("申请状态") - private Integer applyStatus; - -} diff --git a/moved/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/dto/smsSign/UpdateSignDTO.java b/moved/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/dto/smsSign/UpdateSignDTO.java deleted file mode 100644 index 8e45514f4..000000000 --- a/moved/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/dto/smsSign/UpdateSignDTO.java +++ /dev/null @@ -1,24 +0,0 @@ -package cn.iocoder.mall.system.biz.dto.smsSign; - -import lombok.Data; -import lombok.experimental.Accessors; - -import java.io.Serializable; - -/** - * 更新签名 - *

- * author: sin - * time: 2020/4/20 11:05 上午 - */ -@Data -@Accessors(chain = true) -public class UpdateSignDTO implements Serializable { - - private Integer id; - - private String sign; - - private Integer platform; - -} diff --git a/moved/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/dto/smsTemplate/ListSmsTemplateDTO.java b/moved/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/dto/smsTemplate/ListSmsTemplateDTO.java deleted file mode 100644 index 86eaecb50..000000000 --- a/moved/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/dto/smsTemplate/ListSmsTemplateDTO.java +++ /dev/null @@ -1,30 +0,0 @@ -package cn.iocoder.mall.system.biz.dto.smsTemplate; - -import cn.iocoder.common.framework.vo.PageParam; -import lombok.Data; -import lombok.experimental.Accessors; - -import javax.validation.constraints.NotNull; - -/** - * page 短信模板 query - * - * @author Sin - * @time 2019/5/19 4:32 PM - */ -@Data -@Accessors(chain = true) -public class ListSmsTemplateDTO extends PageParam { - - @NotNull - private String id; - - @NotNull - private Integer smsSignId; - - @NotNull - private String template; - - @NotNull - private String applyStatus; -} diff --git a/moved/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/enums/sms/SmsApplyStatusEnum.java b/moved/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/enums/sms/SmsApplyStatusEnum.java deleted file mode 100644 index 80ce41876..000000000 --- a/moved/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/enums/sms/SmsApplyStatusEnum.java +++ /dev/null @@ -1,31 +0,0 @@ -package cn.iocoder.mall.system.biz.enums.sms; - -/** - * 短信审核状态 - * - * @author Sin - * @time 2019/5/16 12:48 PM - */ -public enum SmsApplyStatusEnum { - - CHECKING(1, "审核中"), - SUCCESS(2, "审核成功"), - FAIL(10, "审核失败"), - ; - - private final Integer value; - private final String name; - - SmsApplyStatusEnum(int code, String message) { - this.value = code; - this.name = message; - } - - public int getValue() { - return value; - } - - public String getName() { - return name; - } -} diff --git a/moved/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/enums/sms/SmsPlatformEnum.java b/moved/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/enums/sms/SmsPlatformEnum.java deleted file mode 100644 index ce125e1ba..000000000 --- a/moved/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/enums/sms/SmsPlatformEnum.java +++ /dev/null @@ -1,41 +0,0 @@ -package cn.iocoder.mall.system.biz.enums.sms; - -import cn.iocoder.common.framework.core.IntArrayValuable; - -import java.util.Arrays; - -/** - * 短信审核状态 - * - * @author Sin - * @time 2019/5/16 12:48 PM - */ -public enum SmsPlatformEnum implements IntArrayValuable { - - YunPian(1, "云片"), - AliYun(2, "阿里云"), - ; - - public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(SmsPlatformEnum::getValue).toArray(); - - private final Integer value; - private final String name; - - SmsPlatformEnum(Integer code, String message) { - this.value = code; - this.name = message; - } - - public Integer getValue() { - return value; - } - - public String getName() { - return name; - } - - @Override - public int[] array() { - return ARRAYS; - } -} diff --git a/moved/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/enums/sms/SmsTypeEnum.java b/moved/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/enums/sms/SmsTypeEnum.java deleted file mode 100644 index 29fafc9e8..000000000 --- a/moved/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/enums/sms/SmsTypeEnum.java +++ /dev/null @@ -1,42 +0,0 @@ -package cn.iocoder.mall.system.biz.enums.sms; - -import cn.iocoder.common.framework.core.IntArrayValuable; - -import java.util.Arrays; - -/** - * 短信审核状态 - * - * @author Sin - * @time 2019/5/16 12:48 PM - */ -public enum SmsTypeEnum implements IntArrayValuable { - - VERIFICATION_CODE(1, "验证码"), - NOTICE(2, "通知"), - MARKETING(3, "营销"), - ; - - public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(SmsTypeEnum::getValue).toArray(); - - private final Integer value; - private final String name; - - SmsTypeEnum(Integer code, String message) { - this.value = code; - this.name = message; - } - - public Integer getValue() { - return value; - } - - public String getName() { - return name; - } - - @Override - public int[] array() { - return ARRAYS; - } -} diff --git a/moved/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/log/operation/annotation/OperationLogging.java b/moved/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/log/operation/annotation/OperationLogging.java deleted file mode 100644 index db597757f..000000000 --- a/moved/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/log/operation/annotation/OperationLogging.java +++ /dev/null @@ -1,20 +0,0 @@ -package cn.iocoder.mall.system.biz.log.operation.annotation; - -import java.lang.annotation.*; - -/** - * @author Hccake - * @version 1.0 - * @date 2019/10/15 18:09 - */ -@Target(ElementType.METHOD) -@Retention(RetentionPolicy.RUNTIME) -@Documented -public @interface OperationLogging { - - /** - * 日志信息 - * @return - */ - String value(); -} diff --git a/moved/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/log/operation/aspect/OperationLogAspect.java b/moved/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/log/operation/aspect/OperationLogAspect.java deleted file mode 100644 index ff79f7d11..000000000 --- a/moved/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/log/operation/aspect/OperationLogAspect.java +++ /dev/null @@ -1,118 +0,0 @@ -package cn.iocoder.mall.system.biz.log.operation.aspect; - -import cn.hutool.core.util.ArrayUtil; -import cn.hutool.core.util.URLUtil; -import cn.hutool.json.JSONUtil; -import cn.iocoder.common.framework.util.HttpUtil; -import cn.iocoder.common.framework.util.MallUtils; -import cn.iocoder.mall.system.biz.log.operation.annotation.OperationLogging; -import cn.iocoder.mall.system.biz.log.operation.enums.LogStatus; -import cn.iocoder.mall.system.biz.log.operation.event.OperationLogEvent; -import cn.iocoder.mall.system.biz.log.operation.model.dto.OperationLogDTO; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.aspectj.lang.ProceedingJoinPoint; -import org.aspectj.lang.Signature; -import org.aspectj.lang.annotation.Around; -import org.aspectj.lang.annotation.Aspect; -import org.aspectj.lang.reflect.MethodSignature; -import org.springframework.context.ApplicationEventPublisher; -import org.springframework.core.annotation.Order; -import org.springframework.web.context.request.RequestContextHolder; -import org.springframework.web.context.request.ServletRequestAttributes; - -import javax.servlet.http.HttpServletRequest; -import java.util.HashMap; -import java.util.Map; -import java.util.Objects; - -/** - * @author Hccake - * @version 1.0 - * @date 2019/10/15 18:16 - */ -@Slf4j -@Aspect -@Order(0) -@RequiredArgsConstructor -public class OperationLogAspect { - private final ApplicationEventPublisher publisher; - - @Around("@annotation(operationLogging)") - public Object around(ProceedingJoinPoint joinPoint, OperationLogging operationLogging) throws Throwable { - Signature signature = joinPoint.getSignature(); - String strClassName = joinPoint.getTarget().getClass().getName(); - String strMethodName = signature.getName(); - log.debug("[类名]:{},[方法]:{}", strClassName, strMethodName); - - // 获取日志 - OperationLogDTO operationLogDTO = prodOperationLog(); - operationLogDTO.setMsg(operationLogging.value()); - // 记录参数 - MethodSignature methodSignature = (MethodSignature) signature; - operationLogDTO.setParams(getParams(joinPoint, methodSignature)); - // 开始时间 - long startTime = System.currentTimeMillis(); - Object result; - try { - result = joinPoint.proceed(); - } catch (Throwable throwable) { - operationLogDTO.setStatus(LogStatus.FAIL.getValue()); - throw throwable; - } - // 结束时间 - operationLogDTO.setResponseTime((int) (System.currentTimeMillis() - startTime)); - // 发布事件 - publisher.publishEvent(new OperationLogEvent(operationLogDTO)); - - return result; - } - - - /** - * 获取方法参数 - * @param joinPoint joinPoint - * @param methodSignature 方法签名 - * @return 方法参数的Json字符串形式 - */ - private String getParams(ProceedingJoinPoint joinPoint, MethodSignature methodSignature) { - String[] parameterNames = methodSignature.getParameterNames(); - Object[] args = joinPoint.getArgs(); - if(ArrayUtil.isEmpty(parameterNames)){ - return null; - } - Map paramsMap = new HashMap<>(); - for (int i = 0; i < parameterNames.length; i++) { - paramsMap.put(parameterNames[i], args[i]); - } - return JSONUtil.toJsonStr(paramsMap); - } - - - /** - * 根据请求生成操作日志 - * @return 操作日志DTO - */ - private OperationLogDTO prodOperationLog() { - HttpServletRequest request = ((ServletRequestAttributes) Objects - .requireNonNull(RequestContextHolder.getRequestAttributes())).getRequest(); - - return new OperationLogDTO() - .setTraceId(MallUtils.getTraceId()) - .setUri(URLUtil.getPath(request.getRequestURI())) - .setUserAgent(HttpUtil.getUserAgent(request)) - .setIp(HttpUtil.getIp(request)) - .setMethod(request.getMethod()) - // TODO 获取管理员用户名 或者 用户ID - // .setOperator(Objects.requireNonNull(LogUtils.getUsername())) - .setStatus(LogStatus.SUCCESS.getValue()); - } - - - - - - - - -} diff --git a/moved/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/log/operation/enums/LogStatus.java b/moved/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/log/operation/enums/LogStatus.java deleted file mode 100644 index c6a6ae5d9..000000000 --- a/moved/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/log/operation/enums/LogStatus.java +++ /dev/null @@ -1,27 +0,0 @@ -package cn.iocoder.mall.system.biz.log.operation.enums; - -/** - * @author Hccake - * @version 1.0 - * @date 2020/5/15 14:47 - */ -import lombok.AllArgsConstructor; -import lombok.Getter; - -/** - * 操作状态 - */ -@Getter -@AllArgsConstructor -public enum LogStatus { - /** - * 成功 - */ - SUCCESS(1), - /** - * 失败 - */ - FAIL(0); - - private final int value; -} diff --git a/moved/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/log/operation/event/OperationLogEvent.java b/moved/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/log/operation/event/OperationLogEvent.java deleted file mode 100644 index 40051f3a6..000000000 --- a/moved/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/log/operation/event/OperationLogEvent.java +++ /dev/null @@ -1,15 +0,0 @@ -package cn.iocoder.mall.system.biz.log.operation.event; - -import cn.iocoder.mall.system.biz.log.operation.model.dto.OperationLogDTO; -import lombok.AllArgsConstructor; -import lombok.Getter; - -/** - * @author - * 系统日志事件 - */ -@Getter -@AllArgsConstructor -public class OperationLogEvent { - private final OperationLogDTO operationLogDTO; -} diff --git a/moved/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/log/operation/event/OperationLogListener.java b/moved/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/log/operation/event/OperationLogListener.java deleted file mode 100644 index 2a41ef616..000000000 --- a/moved/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/log/operation/event/OperationLogListener.java +++ /dev/null @@ -1,26 +0,0 @@ -package cn.iocoder.mall.system.biz.log.operation.event; - -import cn.iocoder.mall.system.biz.log.operation.service.OperationLogSaveService; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.event.EventListener; -import org.springframework.core.annotation.Order; -import org.springframework.scheduling.annotation.Async; - -/** - * @author - * 异步监听日志事件 - */ -@Slf4j -public class OperationLogListener { - - @Autowired - private OperationLogSaveService operationLogSaveService; - - @Async - @Order - @EventListener(OperationLogEvent.class) - public void saveSysLog(OperationLogEvent event) { - operationLogSaveService.saveLog(event.getOperationLogDTO()); - } -} diff --git a/moved/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/log/operation/model/dto/OperationLogDTO.java b/moved/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/log/operation/model/dto/OperationLogDTO.java deleted file mode 100644 index dd675d12c..000000000 --- a/moved/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/log/operation/model/dto/OperationLogDTO.java +++ /dev/null @@ -1,87 +0,0 @@ -package cn.iocoder.mall.system.biz.log.operation.model.dto; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; -import lombok.experimental.Accessors; - -import java.time.LocalDateTime; - -/** - * 操作日志 - * - * @author hccake - * @date 2020-05-15 15:12:53 - */ -@Data -@Accessors(chain = true) -@ApiModel(value = "操作日志") -public class OperationLogDTO{ - private static final long serialVersionUID = 1L; - - /** - * 链路追踪编号 - */ - @ApiModelProperty(value = "链路追踪编号") - private String traceId; - /** - * 账号编号 - */ - @ApiModelProperty(value = "账号编号") - private Integer accountId; - /** - * 应用名 - */ - @ApiModelProperty(value = "应用名") - private String applicationName; - /** - * 访问地址 - */ - @ApiModelProperty(value = "访问地址") - private String uri; - /** - * 参数 - */ - @ApiModelProperty(value = "参数") - private String params; - /** - * http 方法 - */ - @ApiModelProperty(value = "http 方法") - private String method; - /** - * userAgent - */ - @ApiModelProperty(value = "userAgent") - private String userAgent; - /** - * ip - */ - @ApiModelProperty(value = "ip") - private String ip; - /** - * 请求时间 - */ - @ApiModelProperty(value = "请求时间") - private LocalDateTime startTime; - /** - * 响应时长 -- 毫秒级 - */ - @ApiModelProperty(value = "响应时长 -- 毫秒级") - private Integer responseTime; - /** - * 日志消息 - */ - @ApiModelProperty(value = "日志消息") - private String msg; - /** - * 操作状态 - */ - @ApiModelProperty(value = "操作状态") - private Integer status; - /** - * 创建者 - */ - @ApiModelProperty(value = "创建者") - private String operator; -} diff --git a/moved/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/log/operation/model/po/OperationLogPO.java b/moved/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/log/operation/model/po/OperationLogPO.java deleted file mode 100644 index a6e348630..000000000 --- a/moved/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/log/operation/model/po/OperationLogPO.java +++ /dev/null @@ -1,89 +0,0 @@ -package cn.iocoder.mall.system.biz.log.operation.model.po; - -import com.baomidou.mybatisplus.annotation.FieldFill; -import com.baomidou.mybatisplus.annotation.TableField; -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; -import com.baomidou.mybatisplus.extension.activerecord.Model; -import io.swagger.annotations.ApiModel; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDateTime; - -/** - * 操作日志 - * - * @author hccake - * @date 2020-05-15 15:12:53 - */ -@Data -@TableName("operation_log") -@EqualsAndHashCode(callSuper = true) -@ApiModel(value = "操作日志") -public class OperationLogPO extends Model { - private static final long serialVersionUID = 1L; - - /** - * 编号 - */ - @TableId - private Integer id; - /** - * 链路追踪编号 - */ - private String traceId; - /** - * 账号编号 - */ - private Integer accountId; - /** - * 应用名 - */ - private String applicationName; - /** - * 访问地址 - */ - private String uri; - /** - * 参数 - */ - private String params; - /** - * http 方法 - */ - private String method; - /** - * userAgent - */ - private String userAgent; - /** - * ip - */ - private String ip; - /** - * 请求时间 - */ - private LocalDateTime startTime; - /** - * 响应时长 -- 毫秒级 - */ - private Integer responseTime; - /** - * 日志消息 - */ - private String msg; - /** - * 操作状态 - */ - private Integer status; - /** - * 创建者 - */ - private String operator; - /** - * 创建时间 - */ - @TableField(fill = FieldFill.INSERT) - private LocalDateTime createTime; -} diff --git a/moved/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/log/operation/service/OperationLogSaveService.java b/moved/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/log/operation/service/OperationLogSaveService.java deleted file mode 100644 index 159d85691..000000000 --- a/moved/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/log/operation/service/OperationLogSaveService.java +++ /dev/null @@ -1,20 +0,0 @@ -package cn.iocoder.mall.system.biz.log.operation.service; - - -import cn.iocoder.mall.system.biz.log.operation.model.dto.OperationLogDTO; - -/** - * 操作日志业务类 - * @author Hccake - * @version 1.0 - * @date 2019/10/15 19:57 - */ -public interface OperationLogSaveService { - - /** - * 保存操作日志 - * @param operationLogDTO - * @return true/false - */ - boolean saveLog(OperationLogDTO operationLogDTO); -} diff --git a/moved/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/service/sms/AliYunSmsClient.java b/moved/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/service/sms/AliYunSmsClient.java deleted file mode 100644 index 81a932cbc..000000000 --- a/moved/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/service/sms/AliYunSmsClient.java +++ /dev/null @@ -1,155 +0,0 @@ -package cn.iocoder.mall.system.biz.service.sms; - -import com.alibaba.fastjson.JSON; -import com.aliyuncs.CommonRequest; -import com.aliyuncs.CommonResponse; -import com.aliyuncs.DefaultAcsClient; -import com.aliyuncs.IAcsClient; -import com.aliyuncs.exceptions.ClientException; -import com.aliyuncs.http.MethodType; -import com.aliyuncs.profile.DefaultProfile; -import lombok.Data; -import lombok.experimental.Accessors; -import org.apache.commons.lang3.exception.ExceptionUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.stereotype.Component; - -import java.util.Collections; -import java.util.List; -import java.util.Map; - -/** - * 短信 AliYun client - * - * @author Sin - * @time 2019/5/25 12:28 PM - */ -@Component // TODO DOME FROM 芋艿 to 小范:建议类名改成 AliYunSmsClient -public class AliYunSmsClient implements SmsClient { - - private static final Logger LOGGER = LoggerFactory.getLogger(AliYunSmsClient.class); - - private static final String DOMAIN = "dysmsapi.aliyuncs.com"; - private static final String SUCCESS_CODE = "OK"; - private static final String SUCCESS_MESSAGE = "OK"; - /** - * 阿里云短信 - 批量推送最大数 500,支持 1000 - */ - private static final int MAX_BATCH_SIZE = 500; - - @Value("${sms.aliYun.accessKeyId?:'default_value'}") - private String accessKeyId; - @Value("${sms.aliYun.accessSecret?:'default_value'}") - private String accessSecret; - - @Data - @Accessors(chain = true) - public static class Result { - /** - * 发送回执ID,可根据该ID在接口QuerySendDetails中查询具体的发送状态。 - */ - private String BizId; - /** - * 请求状态码。 - * - * - OK 蔡成功 - */ - private String Code; - /** - * 状态码的描述。 - */ - private String Message; - /** - * 请求ID。 - */ - private String RequestId; - } - - @Override - public SendResult singleSend(String mobile, String sign, String templateCode, - String template, Map templateParams) { - // params - CommonRequest request = new CommonRequest(); - request.setMethod(MethodType.POST); - request.setDomain(DOMAIN); - request.setVersion("2017-05-25"); - request.setAction("SendSms"); - request.putQueryParameter("PhoneNumbers", mobile); - request.putQueryParameter("SignName", sign); - request.putQueryParameter("TemplateCode", templateCode); - request.putQueryParameter("TemplateParam", JSON.toJSONString(templateParams)); - // 发送请求 - return doSend(request); - } - - @Override - public SendResult batchSend(List mobileList, String sign, String templateCode, - String template, Map templateParams) { - // 最大发送数为 1000,我们设置为 500 个, 分段发送 - int maxSendSize = MAX_BATCH_SIZE; - int maxSendSizeCount = mobileList.size() % maxSendSize == 0 - ? mobileList.size() / maxSendSize - : mobileList.size() / maxSendSize + 1; - // 处理批量 - SendResult sendResult = null; - for (int i = 0; i < maxSendSizeCount; i++) { - // 分批发送 - List batchSendMobile = mobileList - .subList(i * maxSendSize, (i + 1) * maxSendSize); - // params - CommonRequest request = new CommonRequest(); - request.setMethod(MethodType.POST); - request.setDomain(DOMAIN); - request.setVersion("2017-05-25"); - request.setAction("SendBatchSms"); - request.putQueryParameter("PhoneNumberJson", JSON.toJSONString(batchSendMobile)); - request.putQueryParameter("SignNameJson", JSON.toJSONString(Collections.singletonList(sign))); - request.putQueryParameter("TemplateCode", templateCode); - request.putQueryParameter("TemplateParamJson", JSON.toJSONString(Collections.singletonList(templateParams))); - // 发送请求 - sendResult = doSend(request); - } - return sendResult; - } - - private SendResult doSend(CommonRequest request) { - // 获取 client - IAcsClient client = getClient(); - try { - CommonResponse response = client.getCommonResponse(request); - Result result = JSON.parseObject(response.getData(), Result.class); - if (!SUCCESS_CODE.equals(result.getCode())) { - LOGGER.info("发送验证码失败 params {} res {}", JSON.toJSON(request), JSON.toJSON(result)); - // 错误发送失败 - return new SendResult() - .setIsSuccess(false) - .setCode(SendResult.ERROR_CODE) - .setMessage(result.getMessage()); - } else { - LOGGER.info("发送验证码失败 params {} res", JSON.toJSON(request), JSON.toJSON(result)); - // 发送成功 - return new SendResult() - .setIsSuccess(true) - .setCode(SendResult.SUCCESS_CODE) - .setMessage(result.getMessage()); - } - } catch (ClientException e) { - LOGGER.error("发送验证码异常 {}", ExceptionUtils.getMessage(e)); - return new SendResult() - .setIsSuccess(false) - .setCode(SendResult.ERROR_CODE) - .setMessage(ExceptionUtils.getMessage(e)); - } - } - - /** - * 获取 client - * - * @return - */ - private IAcsClient getClient() { - return new DefaultAcsClient(DefaultProfile.getProfile("default", accessKeyId, accessSecret)); - } -} diff --git a/moved/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/service/sms/SmsClient.java b/moved/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/service/sms/SmsClient.java deleted file mode 100644 index bb1eecaab..000000000 --- a/moved/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/service/sms/SmsClient.java +++ /dev/null @@ -1,64 +0,0 @@ -package cn.iocoder.mall.system.biz.service.sms; - -import lombok.Data; -import lombok.experimental.Accessors; - -import java.util.List; -import java.util.Map; - -/** - * 短信平台 - * - * @author Sin - * @time 2019/5/16 6:33 PM - */ -public interface SmsClient { - - /** - * 短信发送 - 单个 - * - * @param mobile 手机号 - * @param sign 签名 - * @param templateCode 短信模板code - * @param template 短信模板 - * @param templateParams 短信模板 params - * @return 发送后信息 - */ - SendResult singleSend(String mobile, String sign, String templateCode, - String template, Map templateParams); - - /** - * 短信发送 - 批量 - * - * @param mobileList 手机号 - * @param sign 签名 - * @param templateCode 短信模板 code - * @param template 短信模板 - * @param templateParams 短信模板params - * @return 发送后信息 - */ - SendResult batchSend(List mobileList, String sign, String templateCode, - String template, Map templateParams); - - @Data - @Accessors(chain = true) - class SendResult { - - public static final int SUCCESS_CODE = 0; - public static final int ERROR_CODE = 1; - public static final String SUCCESS_MESSAGE = "SUCCESS"; - - /** - * 错误码 - */ - private Integer code; - /** - * 错误信息 - */ - private String message; - /** - * 是否成功 - */ - private Boolean isSuccess; - } -} diff --git a/moved/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/service/sms/SmsService.java b/moved/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/service/sms/SmsService.java deleted file mode 100644 index 69c3f698e..000000000 --- a/moved/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/service/sms/SmsService.java +++ /dev/null @@ -1,117 +0,0 @@ -package cn.iocoder.mall.system.biz.service.sms; - -import cn.iocoder.common.framework.vo.PageResult; -import cn.iocoder.mall.system.biz.bo.smsSign.ListSmsSignBO; -import cn.iocoder.mall.system.biz.bo.smsTemplate.ListSmsTemplateBO; -import cn.iocoder.mall.system.biz.bo.smsSign.SmsSignBO; -import cn.iocoder.mall.system.biz.bo.smsTemplate.SmsTemplateBO; -import cn.iocoder.mall.system.biz.dto.smsSign.AddSignDTO; -import cn.iocoder.mall.system.biz.dto.smsSign.ListSmsSignDTO; -import cn.iocoder.mall.system.biz.dto.smsTemplate.ListSmsTemplateDTO; -import cn.iocoder.mall.system.biz.dto.smsSign.UpdateSignDTO; - -import java.util.List; -import java.util.Map; - -/** - * 短信服务 - * - * @author Sin - * @time 2019/5/16 9:54 AM - */ -public interface SmsService { - - /** - * 短信模板 - 分页 - * - * @param listSmsSignDTO - * @return - */ - PageResult listSmsSign(ListSmsSignDTO listSmsSignDTO); - - /** - * 短信模板 - 分页 - * - * @param listSmsTemplateDTO - * @return - */ - PageResult listSmsTemplate(ListSmsTemplateDTO listSmsTemplateDTO); - - /** - * 签名 - 创建 - * - * @param addSignDTO - */ - void addSign(AddSignDTO addSignDTO); - - /** - * 签名 - 获取 - * - * @param id - */ - SmsSignBO getSign(Integer id); - - /** - * 签名 - 更新 - * - * @param updateSignDTO - */ - void updateSign(UpdateSignDTO updateSignDTO); - - /** - * 签名 - 更新 - * - * @param id - */ - void deleteSign(Integer id); - - /** - * 模板 - 创建 - * - * @param smsSignId 选用的哪个签名 - * @param templateCode 模板code - * @param template 模板内容 - * @param platform 平台 - */ - void addTemplate(Integer smsSignId, String templateCode, - String template, Integer platform, Integer smsType); - - /** - * 模板 - 获取 - * - * @param id - */ - SmsTemplateBO getTemplate(Integer id, Integer platform); - - /** - * 模板 - 更新 - * - * @param id 模板id - * @param smsSignId 短期签名 - * @param template 模板内容 - * @param platform 短信平台 - */ - void updateTemplate(Integer id, Integer smsSignId, String templateCode, - String template, Integer platform, Integer smsType); - - /** - * 模板 - 删除 - * - * @param id - */ - void deleteTemplate(Integer id); - - /** - * 短信发送 - 单个 - * - * @return - */ - void singleSend(String mobile, Integer smsTemplateId, Map params); - - /** - * 短信发送 - 批量 - * - * @return - */ - void batchSend(List mobileList, Integer smsTemplateId, Map params); -} diff --git a/moved/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/service/sms/SmsServiceImpl.java b/moved/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/service/sms/SmsServiceImpl.java deleted file mode 100644 index 56cddb602..000000000 --- a/moved/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/service/sms/SmsServiceImpl.java +++ /dev/null @@ -1,364 +0,0 @@ -package cn.iocoder.mall.system.biz.service.sms; - -import cn.iocoder.common.framework.exception.ServiceException; -import cn.iocoder.common.framework.util.ServiceExceptionUtil; -import cn.iocoder.common.framework.vo.PageResult; -import cn.iocoder.mall.mybatis.core.enums.DeletedStatusEnum; -import cn.iocoder.mall.system.biz.bo.smsSign.ListSmsSignBO; -import cn.iocoder.mall.system.biz.bo.smsSign.SmsSignBO; -import cn.iocoder.mall.system.biz.bo.smsTemplate.ListSmsTemplateBO; -import cn.iocoder.mall.system.biz.bo.smsTemplate.SmsTemplateBO; -import cn.iocoder.mall.system.biz.convert.SmsSignConvert; -import cn.iocoder.mall.system.biz.convert.SmsTemplateConvert; -import cn.iocoder.mall.system.biz.dao.sms.SmsSendMapper; -import cn.iocoder.mall.system.biz.dao.sms.SmsSignMapper; -import cn.iocoder.mall.system.biz.dao.sms.SmsTemplateMapper; -import cn.iocoder.mall.system.biz.dataobject.sms.SmsSendLogDO; -import cn.iocoder.mall.system.biz.dataobject.sms.SmsSignDO; -import cn.iocoder.mall.system.biz.dataobject.sms.SmsTemplateDO; -import cn.iocoder.mall.system.biz.dto.smsSign.AddSignDTO; -import cn.iocoder.mall.system.biz.dto.smsSign.ListSmsSignDTO; -import cn.iocoder.mall.system.biz.dto.smsSign.UpdateSignDTO; -import cn.iocoder.mall.system.biz.dto.smsTemplate.ListSmsTemplateDTO; -import cn.iocoder.mall.system.biz.enums.SystemErrorCodeEnum; -import cn.iocoder.mall.system.biz.enums.sms.SmsApplyStatusEnum; -import cn.iocoder.mall.system.biz.enums.sms.SmsPlatformEnum; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; -import com.baomidou.mybatisplus.core.metadata.IPage; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; -import org.springframework.util.CollectionUtils; - -import java.util.*; -import java.util.stream.Collectors; - -/** - * 短信 - * - * @author Sin - * @time 2019/5/16 10:30 AM - */ -@Service -public class SmsServiceImpl implements SmsService { - - @Autowired - private SmsSignMapper smsSignMapper; - @Autowired - private SmsTemplateMapper smsTemplateMapper; - @Autowired - private SmsSendMapper smsSendMapper; - - @Autowired - @Qualifier("yunPianSmsClient") - private SmsClient smsYunPianClient; - @Autowired - @Qualifier("aliYunSmsClient") - private SmsClient smsAliYunClient; - - @Override - public PageResult listSmsSign(ListSmsSignDTO queryDTO) { - // TODO DOME FROM 芋艿 to 小范:mybatis-plus 的 QueryWrapper 不要到 Service 层,可以抽 Dao 方法里哈。其它的类似可以瞅瞅噢 - IPage signPage = smsSignMapper.listSmsSign(queryDTO); - List signList = SmsSignConvert.INSTANCE.convert(signPage.getRecords()); - return new PageResult().setList(signList).setTotal(signPage.getTotal()); - } - - @Override - public PageResult listSmsTemplate(ListSmsTemplateDTO listSmsTemplateDTO) { - // 获取 template - IPage signPage = smsTemplateMapper.listSmsTemplate(listSmsTemplateDTO); - if (CollectionUtils.isEmpty(signPage.getRecords())) { - // TODO DOME FROM 芋艿 to 小范,Collections.EMPTY_LIST =》Collections.emptyList();另外,可以考虑直接 Convert 哈 - return new PageResult().setList(Collections.emptyList()).setTotal(signPage.getTotal()); - } - // 转换bo - List templateList = SmsTemplateConvert.INSTANCE.convert(signPage.getRecords()); - // 获取 sign - Set smsSignIds = templateList.stream().map( - ListSmsTemplateBO::getSmsSignId).collect(Collectors.toSet()); - - List smsSignDOList = smsSignMapper.selectList( - new QueryWrapper().in("id", smsSignIds)); - - List signList = SmsTemplateConvert.INSTANCE.convertTemplateSign(smsSignDOList); - // sign 转换为 map - Map smsSignDOMap = signList - .stream().collect(Collectors.toMap(ListSmsTemplateBO.Sign::getId, o -> o)); - // 设置 sign - templateList.forEach(template -> { - if (smsSignDOMap.containsKey(template.getSmsSignId())) { - template.setSign(smsSignDOMap.get(template.getSmsSignId())); - } - }); - return new PageResult().setList(templateList).setTotal(signPage.getTotal()); - } - - @Override - @Transactional - public void addSign(AddSignDTO addSignDTO) { - // 避免重复 - SmsSignDO smsSignDO = smsSignMapper.selectOne( - new QueryWrapper() - .eq("platform", addSignDTO.getPlatform()) - .eq("sign", addSignDTO.getSign()) - ); - // 处理 null 情况 - if (smsSignDO != null) { - // TODO DOME FROM 芋艿 to 小范:可以使用 ServiceExceptionUtil.exception(SystemErrorCodeEnum.SMS_SIGN_IS_EXISTENT); - throw ServiceExceptionUtil.exception(SystemErrorCodeEnum.SMS_SIGN_IS_EXISTENT); - } - // 保存数据库 - smsSignMapper.insert( - (SmsSignDO) new SmsSignDO() - .setSign(addSignDTO.getSign()) - .setPlatform(addSignDTO.getPlatform()) - .setApplyStatus(SmsApplyStatusEnum.SUCCESS.getValue()) - .setDeleted(DeletedStatusEnum.DELETED_NO.getValue()) - .setUpdateTime(new Date()) - .setCreateTime(new Date()) - ); - } - - @Override - public SmsSignBO getSign(Integer signId) { - // 查询数据库 - SmsSignDO smsSignDO = smsSignMapper.selectOne( - new QueryWrapper() - .eq("id", signId) - .eq("deleted", DeletedStatusEnum.DELETED_NO.getValue())); - // 处理 null - if (smsSignDO == null) { - throw new ServiceException(SystemErrorCodeEnum.SMS_SIGN_NOT_EXISTENT.getCode(), - SystemErrorCodeEnum.SMS_SIGN_NOT_EXISTENT.getMessage()); - } - // 转换vo返回 - return SmsSignConvert.INSTANCE.convert(smsSignDO); - } - - @Override - @Transactional - public void updateSign(UpdateSignDTO updateSignDTO) { - // 避免重复 - SmsSignDO smsSignDO = smsSignMapper.selectOne( - new QueryWrapper() - .eq("sign", updateSignDTO.getSign()) - .eq("platform", updateSignDTO.getPlatform())); - // 处理 null - if (smsSignDO != null) { - throw new ServiceException(SystemErrorCodeEnum.SMS_SIGN_IS_EXISTENT.getCode(), - SystemErrorCodeEnum.SMS_SIGN_IS_EXISTENT.getMessage()); - } - // 更新 - smsSignMapper.update( - (SmsSignDO) new SmsSignDO() - .setSign(updateSignDTO.getSign()) - .setPlatform(updateSignDTO.getPlatform()) - .setUpdateTime(new Date()), - new QueryWrapper().eq("id", updateSignDTO.getId()) - ); - } - - @Override - public void deleteSign(Integer id) { - // 根据id查询 - SmsSignDO smsSignDO = smsSignMapper.selectById(id); - // 处理 null - if (smsSignDO == null) { - throw new ServiceException(SystemErrorCodeEnum.SMS_SIGN_NOT_EXISTENT.getCode(), - SystemErrorCodeEnum.SMS_SIGN_NOT_EXISTENT.getMessage()); - } - // 更新 deleted 为 YES - smsSignMapper.delete(new UpdateWrapper() - .set("deleted", DeletedStatusEnum.DELETED_YES.getName()) - .eq("id", id) - ); - } - - @Override - @Transactional - public void addTemplate(Integer smsSignId, String templateCode, - String template, Integer platform, Integer smsType) { - // 根据id查询 - SmsSignDO smsSignDO = smsSignMapper.selectById(smsSignId); - // 处理 null - if (smsSignDO == null) { - throw new ServiceException(SystemErrorCodeEnum.SMS_SIGN_NOT_EXISTENT.getCode(), - SystemErrorCodeEnum.SMS_SIGN_NOT_EXISTENT.getMessage()); - } - // 保存数据库 - smsTemplateMapper.insert( - (SmsTemplateDO) new SmsTemplateDO() - .setId(null) - .setSmsSignId(smsSignId) - .setTemplateCode(templateCode) - .setTemplate(template) - .setPlatform(platform) - .setSmsType(smsType) - .setApplyStatus(SmsApplyStatusEnum.SUCCESS.getValue()) - .setApplyMessage("") - .setDeleted(DeletedStatusEnum.DELETED_NO.getValue()) - .setCreateTime(new Date()) - ); - } - - @Override - public SmsTemplateBO getTemplate(Integer id, Integer platform) { - // 获取数据 - SmsTemplateDO smsTemplateDO = smsTemplateMapper.selectOne( - new QueryWrapper() - .eq("platform", platform) - .eq("id", id)); - // 处理 null - if (smsTemplateDO == null) { - throw new ServiceException(SystemErrorCodeEnum.SMS_TEMPLATE_NOT_EXISTENT.getCode(), - SystemErrorCodeEnum.SMS_TEMPLATE_NOT_EXISTENT.getMessage()); - } - // 转换bo返回 - return SmsTemplateConvert.INSTANCE.convert(smsTemplateDO); - } - - @Override - @Transactional - public void updateTemplate(Integer id, Integer smsSignId, String templateCode, - String template, Integer platform, Integer smsType) { - // 获取 template - SmsTemplateDO smsTemplateDO = smsTemplateMapper.selectById(id); - if (smsTemplateDO == null) { - throw new ServiceException(SystemErrorCodeEnum.SMS_TEMPLATE_NOT_EXISTENT.getCode(), - SystemErrorCodeEnum.SMS_TEMPLATE_NOT_EXISTENT.getMessage()); - } - // 获取 sign - SmsSignDO smsSignDO = smsSignMapper.selectOne( - new QueryWrapper().eq("id", smsTemplateDO.getSmsSignId())); - if (smsSignDO == null) { - throw new ServiceException(SystemErrorCodeEnum.SMS_SIGN_NOT_EXISTENT.getCode(), - SystemErrorCodeEnum.SMS_SIGN_NOT_EXISTENT.getMessage()); - } - // 更新数据库 - smsTemplateMapper.update( - (SmsTemplateDO) new SmsTemplateDO() - .setSmsSignId(smsSignId) - .setTemplateCode(templateCode) - .setTemplate(template) - .setPlatform(platform) - .setSmsType(smsType) - .setUpdateTime(new Date()), - new QueryWrapper().eq("id", id) - ); - } - - @Override - @Transactional - public void deleteTemplate(Integer id) { - SmsTemplateDO smsTemplateDO = smsTemplateMapper.selectOne( - new QueryWrapper().eq("id", id)); - // 处理不存在情况 - if (smsTemplateDO == null - || smsTemplateDO.getDeleted().equals(DeletedStatusEnum.DELETED_YES.getValue())) { - throw new ServiceException(SystemErrorCodeEnum.SMS_TEMPLATE_NOT_EXISTENT.getCode(), - SystemErrorCodeEnum.SMS_TEMPLATE_NOT_EXISTENT.getMessage()); - } - // 删除 数据库模板 - SmsTemplateDO updateTemplate =new SmsTemplateDO(); - updateTemplate.setDeleted(DeletedStatusEnum.DELETED_YES.getValue()); - smsTemplateMapper.delete( - new UpdateWrapper() - .set("deleted", DeletedStatusEnum.DELETED_YES) - .eq("id", id)); - } - - @Override - public void singleSend(String mobile, Integer smsTemplateId, Map params) { - // 获取 template - SmsTemplateDO smsTemplateDO = smsTemplateMapper.selectById(smsTemplateId); - if (smsTemplateDO == null - || smsTemplateDO.getDeleted().equals(DeletedStatusEnum.DELETED_YES.getValue())) { - throw new ServiceException(SystemErrorCodeEnum.SMS_TEMPLATE_NOT_EXISTENT.getCode(), - SystemErrorCodeEnum.SMS_TEMPLATE_NOT_EXISTENT.getMessage()); - } - // 获取 sign - SmsSignDO smsSignDO = smsSignMapper.selectById(smsTemplateDO.getSmsSignId()); - if (smsSignDO == null) { - throw new ServiceException(SystemErrorCodeEnum.SMS_SIGN_NOT_EXISTENT.getCode(), - SystemErrorCodeEnum.SMS_SIGN_NOT_EXISTENT.getMessage()); - } - // 获取 client - SmsClient smsClient = getSmsClient(smsTemplateDO.getPlatform()); - // 发送短信 - SmsClient.SendResult sendResult = smsClient.singleSend(mobile, smsSignDO.getSign(), - smsTemplateDO.getTemplateCode(), smsTemplateDO.getTemplate(), params); - // 添加日志 - smsSendMapper.insert( - (SmsSendLogDO) new SmsSendLogDO() - .setTemplateId(smsTemplateDO.getId()) - .setTemplate(smsTemplateDO.getTemplate()) - .setMessage(sendResult.getMessage()) - .setCreateTime(new Date()) - ); - } - - @Override - public void batchSend(List mobileList, Integer smsTemplateId, Map params) { - // 获取 template - SmsTemplateDO smsTemplateDO = smsTemplateMapper.selectById(smsTemplateId); - if (smsTemplateDO == null - || smsTemplateDO.getDeleted().equals(DeletedStatusEnum.DELETED_YES.getValue())) { - throw new ServiceException(SystemErrorCodeEnum.SMS_TEMPLATE_NOT_EXISTENT.getCode(), - SystemErrorCodeEnum.SMS_TEMPLATE_NOT_EXISTENT.getMessage()); - } - // 获取 sign - SmsSignDO smsSignDO = smsSignMapper.selectById(smsTemplateDO.getSmsSignId()); - if (smsSignDO == null) { - // 添加日志 - smsSendMapper.insert( - (SmsSendLogDO) new SmsSendLogDO() - .setTemplateId(smsTemplateDO.getId()) - .setTemplate(smsTemplateDO.getTemplate()) - .setMessage("发送成功!") - .setCreateTime(new Date()) - ); - - throw new ServiceException(SystemErrorCodeEnum.SMS_SIGN_NOT_EXISTENT.getCode(), - SystemErrorCodeEnum.SMS_SIGN_NOT_EXISTENT.getMessage()); - } - // 获取 client - SmsClient smsClient = getSmsClient(smsTemplateDO.getPlatform()); - // 发送短信 - SmsClient.SendResult sendResult = smsClient.batchSend(mobileList, smsSignDO.getSign(), - smsTemplateDO.getTemplateCode(), smsTemplateDO.getTemplate(), params); - // 添加日志 - smsSendMapper.insert( - (SmsSendLogDO) new SmsSendLogDO() - .setTemplateId(smsTemplateDO.getId()) - .setTemplate(smsTemplateDO.getTemplate()) - .setMessage(sendResult.getMessage()) - .setCreateTime(new Date()) - ); - } - - /** - * 获取 sms 对于的 client - * - * @param platform - * @return - */ - private SmsClient getSmsClient(Integer platform) { - SmsClient smsClient = null; - // 阿里云和云片 - if (SmsPlatformEnum.YunPian.getValue().equals(platform)) { - smsClient = smsYunPianClient; - } else if (SmsPlatformEnum.AliYun.getValue().equals(platform)) { - smsClient = smsAliYunClient; - } - // 没有支持的平台 - if (smsClient == null) { - throw new ServiceException( - SystemErrorCodeEnum.SMS_NOT_SEND_CLIENT.getCode(), - SystemErrorCodeEnum.SMS_NOT_SEND_CLIENT.getMessage()); - } - return smsClient; - } -} diff --git a/moved/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/service/sms/YunPianSmsClient.java b/moved/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/service/sms/YunPianSmsClient.java deleted file mode 100644 index 749264bb2..000000000 --- a/moved/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/service/sms/YunPianSmsClient.java +++ /dev/null @@ -1,232 +0,0 @@ -package cn.iocoder.mall.system.biz.service.sms; - -import cn.iocoder.common.framework.exception.ServiceException; -import cn.iocoder.mall.system.biz.enums.SystemErrorCodeEnum; -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import org.apache.http.HttpEntity; -import org.apache.http.NameValuePair; -import org.apache.http.client.entity.UrlEncodedFormEntity; -import org.apache.http.client.methods.CloseableHttpResponse; -import org.apache.http.client.methods.HttpPost; -import org.apache.http.impl.client.CloseableHttpClient; -import org.apache.http.impl.client.HttpClients; -import org.apache.http.message.BasicNameValuePair; -import org.apache.http.util.EntityUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.stereotype.Component; -import org.springframework.util.CollectionUtils; - -import java.util.ArrayList; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; - -/** - * 云片 短信平台 - * - * @author Sin - * @time 2019/5/16 6:34 PM - */ -@Component -public class YunPianSmsClient implements SmsClient { - - protected static final Logger LOGGER = LoggerFactory.getLogger(YunPianSmsClient.class); - - private static final int SUCCESS_CODE = 0; - private static final String SUCCESS_MESSAGE = "SUCCESS"; - - /** - * 云片短信 - 批量推送最大数 500,支持 1000 - */ - private static final int MAX_BATCH_SIZE = 500; - /** - * 模板 - 参数拼接 - */ - private static final String PARAM_TEMPLATE = "#%s#"; - /** - * 模板 - 签名拼接 - */ - private static final String SIGN_TEMPLATE = "【%s】%s"; - - /** - * 签名 - 添加 - */ - private static final String URL_SIGN_ADD = "https://sms.yunpian.com/v2/sign/add.json"; - /** - * 签名 - 获取 - */ - private static final String URL_SIGN_GET = "https://sms.yunpian.com/v2/sign/get.json"; - /** - * 签名 - 更新 - */ - private static final String URL_SIGN_UPDATE = "https://sms.yunpian.com/v2/sign/update.json"; - /** - * 模板 - 添加 - */ - private static final String URL_TEMPLATE_ADD = "https://sms.yunpian.com/v2/tpl/add.json"; - /** - * 模板 - 获取 - */ - private static final String URL_TEMPLATE_GET = "https://sms.yunpian.com/v2/tpl/get.json"; - /** - * 模板 - 更新 - */ - private static final String URL_TEMPLATE_UPDATE = "https://sms.yunpian.com/v2/tpl/update.json"; - /** - * 模板 - 删除 - */ - private static final String URL_TEMPLATE_DELETE = "https://sms.yunpian.com/v2/tpl/del.json"; - /** - * 短信发送 - 单个 - */ - private static final String URL_SEND_SINGLE = "https://sms.yunpian.com/v2/sms/single_send.json"; - /** - * 短信发送 - 批量 - */ - private static final String URL_SEND_BATCH = "https://sms.yunpian.com/v2/sms/batch_send.json"; - - //编码格式。发送编码格式统一用UTF-8 - private static String ENCODING = "UTF-8"; - - @Value("${sms.yunPian.apiKey?:'default_value'}") - private String apiKey; - - @Override - public SendResult singleSend(String mobile, String sign, String templateCode, String template, Map templateParams) { - // build 模板 - template = buildTemplate(sign, template, templateParams); - // 请求参数 - Map params = new LinkedHashMap<>(); - params.put("apikey", apiKey); - params.put("mobile", mobile); - params.put("text", template); - // TODO: 2019/5/19 sin 运营商发送报告 回调 - // params.put("callback_url", template); - String result = post(URL_SEND_SINGLE, params); - JSONObject jsonObject = JSON.parseObject(result); - if (jsonObject.containsKey("code") - && !(jsonObject.getInteger("code") == SUCCESS_CODE)) { - throw new ServiceException(SystemErrorCodeEnum.SMS_PLATFORM_FAIL.getCode(), - jsonObject.getString("detail")); - } - // 转换 result - return new SendResult() - .setIsSuccess(SUCCESS_CODE == jsonObject.getInteger("code")) - .setCode(jsonObject.getInteger("code")) - .setMessage(jsonObject.getString("detail")); - } - - @Override - public SendResult batchSend(List mobileList, String sign, - String templateCode, String template, - Map templateParams) { - // build 模板 - template = buildTemplate(sign, template, templateParams); - // 最大发送数为 1000,我们设置为 500 个, 分段发送 - int maxSendSize = MAX_BATCH_SIZE; - int maxSendSizeCount = mobileList.size() % maxSendSize == 0 - ? mobileList.size() / maxSendSize - : mobileList.size() / maxSendSize + 1; - int j = 0; - int j2 = mobileList.size(); - - for (int i = 0; i < maxSendSizeCount; i++) { - StringBuffer sendMobileStr = new StringBuffer(); - for (int k = j; k < j2; k++) { - sendMobileStr.append(","); - sendMobileStr.append(mobileList.get(k)); - } - String dividedMobile = sendMobileStr.toString().substring(1); - // 发送手机号 - Map params = new LinkedHashMap<>(); - params.put("apikey", apiKey); - params.put("mobile", dividedMobile); - params.put("text", template); - // TODO: 2019/5/19 sin 运营商发送报告 回调 - // params.put("callback_url", template); - String result = post(URL_SEND_BATCH, params); - JSONObject jsonObject = JSON.parseObject(result); - if (jsonObject.containsKey("code") - && !(jsonObject.getInteger("code") == SUCCESS_CODE)) { - throw new ServiceException(SystemErrorCodeEnum.SMS_PLATFORM_FAIL.getCode(), - jsonObject.getString("detail")); - } - // 用于递增 maxSendSize - j = j2; - j2 = j + maxSendSize; - } - return new SendResult() - .setIsSuccess(true) - .setCode(SUCCESS_CODE) - .setMessage(SUCCESS_MESSAGE); - } - - /** - * 构建模板 - * - * @param sign - * @param template - * @param templateParams - * @return - */ - private static String buildTemplate(String sign, String template, - Map templateParams) { - // 不处理 empty 数据 - if (CollectionUtils.isEmpty(templateParams)) { - return template; - } - // 处理template参数 - for (Map.Entry entry : templateParams.entrySet()) { - String paramsKey = entry.getKey(); - String value = entry.getValue(); - String paramPlace = String.format(PARAM_TEMPLATE, paramsKey); - template = template.replaceAll(paramPlace, value); - } - template = String.format(SIGN_TEMPLATE, sign, template); - return template; - } - - /** - * 基于HttpClient 4.3的通用POST方法 - * - * @param url 提交的URL - * @param paramsMap 提交<参数,值>Map - * @return 提交响应 - */ - - public static String post(String url, Map paramsMap) { - CloseableHttpClient client = HttpClients.createDefault(); - String responseText = ""; - CloseableHttpResponse response = null; - try { - HttpPost method = new HttpPost(url); - if (paramsMap != null) { - List paramList = new ArrayList<>(); - for (Map.Entry param : paramsMap.entrySet()) { - NameValuePair pair = new BasicNameValuePair(param.getKey(), - param.getValue()); - paramList.add(pair); - } - method.setEntity(new UrlEncodedFormEntity(paramList, ENCODING)); - } - response = client.execute(method); - HttpEntity entity = response.getEntity(); - if (entity != null) { - responseText = EntityUtils.toString(entity, ENCODING); - } - } catch (Exception e) { - e.printStackTrace(); - } finally { - try { - response.close(); - } catch (Exception e) { - e.printStackTrace(); - } - } - LOGGER.debug("云片短信平台 res: {}", responseText); - return responseText; - } -} diff --git a/moved/system/system-rest/pom.xml b/moved/system/system-rest/pom.xml deleted file mode 100644 index 9e232f904..000000000 --- a/moved/system/system-rest/pom.xml +++ /dev/null @@ -1,41 +0,0 @@ - - - - system - cn.iocoder.mall - 1.0-SNAPSHOT - - 4.0.0 - - system-rest - 提供 system 服务的 Rest 接口的实现,提供对外调用 - - - - - cn.iocoder.mall - system-biz - 1.0-SNAPSHOT - - - - - cn.iocoder.mall - mall-spring-boot-starter-web - 1.0-SNAPSHOT - - - cn.iocoder.mall - mall-spring-boot-starter-security - 1.0-SNAPSHOT - - - cn.iocoder.mall - mall-spring-boot-starter-swagger - 1.0-SNAPSHOT - - - - diff --git a/moved/system/system-rest/src/main/java/cn/iocoder/mall/system/rest/controller/file/AdminsFileController.java b/moved/system/system-rest/src/main/java/cn/iocoder/mall/system/rest/controller/file/AdminsFileController.java deleted file mode 100644 index 63709079c..000000000 --- a/moved/system/system-rest/src/main/java/cn/iocoder/mall/system/rest/controller/file/AdminsFileController.java +++ /dev/null @@ -1,38 +0,0 @@ -package cn.iocoder.mall.system.rest.controller.file; - -import cn.iocoder.common.framework.vo.CommonResult; -import com.qiniu.util.Auth; -import io.swagger.annotations.Api; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -/** - * 文件模块(Admins API) - * - * author: sin - * time: 2020/4/20 9:41 上午 - */ -@RestController -@RequestMapping("admins/file") -@Api(tags = "文件模块") -public class AdminsFileController { - - private Logger logger = LoggerFactory.getLogger(getClass()); - - @Autowired - private Auth auth; - @Value("${qiniu.bucket}") - private String bucket; - - @GetMapping("/get-qiniu-token") - public CommonResult getQiniuToken() { - String token = auth.uploadToken(bucket); - logger.info("[qiniu_token][token({}) get]", token); - return CommonResult.success(token); - } -} diff --git a/moved/system/system-rest/src/main/java/cn/iocoder/mall/system/rest/controller/sms/AdminsSmsSignController.java b/moved/system/system-rest/src/main/java/cn/iocoder/mall/system/rest/controller/sms/AdminsSmsSignController.java deleted file mode 100644 index fc435ba13..000000000 --- a/moved/system/system-rest/src/main/java/cn/iocoder/mall/system/rest/controller/sms/AdminsSmsSignController.java +++ /dev/null @@ -1,57 +0,0 @@ -package cn.iocoder.mall.system.rest.controller.sms; - -import cn.iocoder.common.framework.vo.CommonResult; -import cn.iocoder.common.framework.vo.PageResult; -import cn.iocoder.mall.system.biz.bo.smsSign.ListSmsSignBO; -import cn.iocoder.mall.system.biz.dto.smsSign.ListSmsSignDTO; -import cn.iocoder.mall.system.biz.service.sms.SmsService; -import cn.iocoder.mall.system.rest.convert.sms.AdminsSmsConvert; -import cn.iocoder.mall.system.rest.request.sms.AddSignRequest; -import cn.iocoder.mall.system.rest.request.sms.UpdateSignRequest; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.*; - -/** - * 短信服务 - * - * @author Sin - * @time 2019/5/26 12:26 PM - */ -@RestController -@RequestMapping("admins/sms/sign") -@Api("短信服务(签名)") -public class AdminsSmsSignController { - - @Autowired - private SmsService smsService; - - @GetMapping("page") - @ApiOperation("签名-page") - public CommonResult> pageSign(@Validated ListSmsSignDTO listSmsSignDTO) { - return CommonResult.success(smsService.listSmsSign(listSmsSignDTO)); - } - - @PostMapping("add") - @ApiOperation("签名-添加") - public CommonResult addSign(@RequestBody AddSignRequest addSignRequest) { - smsService.addSign(AdminsSmsConvert.INSTANCE.convert(addSignRequest)); - return CommonResult.success(null); - } - - @PutMapping("update") - @ApiOperation("签名-更新") - public CommonResult updateSign(@RequestBody UpdateSignRequest updateSignRequest) { - smsService.updateSign(AdminsSmsConvert.INSTANCE.convert(updateSignRequest)); - return CommonResult.success(null); - } - - @DeleteMapping("deleted") - @ApiOperation("签名-删除") - public CommonResult deletedSign(@RequestParam("id") Integer id) { - smsService.deleteSign(id); - return CommonResult.success(null); - } -} diff --git a/moved/system/system-rest/src/main/java/cn/iocoder/mall/system/rest/controller/sms/AdminsSmsTemplateController.java b/moved/system/system-rest/src/main/java/cn/iocoder/mall/system/rest/controller/sms/AdminsSmsTemplateController.java deleted file mode 100644 index 373246676..000000000 --- a/moved/system/system-rest/src/main/java/cn/iocoder/mall/system/rest/controller/sms/AdminsSmsTemplateController.java +++ /dev/null @@ -1,67 +0,0 @@ -package cn.iocoder.mall.system.rest.controller.sms; - -import cn.iocoder.common.framework.vo.CommonResult; -import cn.iocoder.common.framework.vo.PageResult; -import cn.iocoder.mall.system.biz.bo.smsTemplate.ListSmsTemplateBO; -import cn.iocoder.mall.system.biz.service.sms.SmsService; -import cn.iocoder.mall.system.rest.convert.sms.AdminsSmsConvert; -import cn.iocoder.mall.system.rest.request.sms.AddSmsTemplateRequest; -import cn.iocoder.mall.system.rest.request.sms.ListSmsTemplateRequest; -import cn.iocoder.mall.system.rest.request.sms.UpdateSmsTemplateRequest; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.*; - -/** - * 短信服务 - * - * @author Sin - * @time 2019/5/26 12:26 PM - */ -@RestController -@RequestMapping("admins/sms/template") -@Api("短信服务(短信模板)") -public class AdminsSmsTemplateController { - - @Autowired - private SmsService smsService; - - @PostMapping("page") - @ApiOperation("短信模板-page") - public CommonResult> pageSign(@RequestBody ListSmsTemplateRequest request) { - return CommonResult.success(smsService.listSmsTemplate(AdminsSmsConvert.INSTANCE.convert(request))); - } - - @PostMapping("add") - @ApiOperation("短信模板-添加") - public CommonResult addSign(@RequestBody AddSmsTemplateRequest smsTemplateAddPO) { - smsService.addTemplate( - smsTemplateAddPO.getSmsSignId(), - smsTemplateAddPO.getTemplateCode(), - smsTemplateAddPO.getTemplate(), - smsTemplateAddPO.getPlatform(), - smsTemplateAddPO.getSmsType()); - return CommonResult.success(null); - } - - @PutMapping("update") - @ApiOperation("短信模板-更新") - public CommonResult updateSign(@RequestBody UpdateSmsTemplateRequest smsTemplateUpdatePO) { - smsService.updateTemplate( - smsTemplateUpdatePO.getId(), - smsTemplateUpdatePO.getSmsSignId(), - smsTemplateUpdatePO.getTemplateCode(), - smsTemplateUpdatePO.getTemplate(), - smsTemplateUpdatePO.getPlatform(), - smsTemplateUpdatePO.getSmsType()); - return CommonResult.success(null); - } - - @DeleteMapping("deleted") - @ApiOperation("短信模板-删除") - public CommonResult deletedSign(@RequestParam("id") Integer id) { - smsService.deleteTemplate(id); - return CommonResult.success(null); - } -} diff --git a/moved/system/system-rest/src/main/java/cn/iocoder/mall/system/rest/convert/sms/AdminsSmsConvert.java b/moved/system/system-rest/src/main/java/cn/iocoder/mall/system/rest/convert/sms/AdminsSmsConvert.java deleted file mode 100644 index b6dc4cac9..000000000 --- a/moved/system/system-rest/src/main/java/cn/iocoder/mall/system/rest/convert/sms/AdminsSmsConvert.java +++ /dev/null @@ -1,32 +0,0 @@ -package cn.iocoder.mall.system.rest.convert.sms; - -import cn.iocoder.mall.system.biz.dto.smsSign.AddSignDTO; -import cn.iocoder.mall.system.biz.dto.smsSign.UpdateSignDTO; -import cn.iocoder.mall.system.biz.dto.smsTemplate.ListSmsTemplateDTO; -import cn.iocoder.mall.system.rest.request.sms.AddSignRequest; -import cn.iocoder.mall.system.rest.request.sms.UpdateSignRequest; -import cn.iocoder.mall.system.rest.request.sms.ListSmsTemplateRequest; -import org.mapstruct.Mapper; -import org.mapstruct.Mappings; -import org.mapstruct.factory.Mappers; - -/** - * sms admins convert - * - * author: sin - * time: 2020/4/20 11:07 上午 - */ -@Mapper -public interface AdminsSmsConvert { - - AdminsSmsConvert INSTANCE = Mappers.getMapper(AdminsSmsConvert.class); - - @Mappings({}) - AddSignDTO convert(AddSignRequest bean); - - @Mappings({}) - UpdateSignDTO convert(UpdateSignRequest bean); - - @Mappings({}) - ListSmsTemplateDTO convert(ListSmsTemplateRequest bean); -} diff --git a/moved/system/system-rest/src/main/java/cn/iocoder/mall/system/rest/request/admin/AdminsUserUpdateRequest.java b/moved/system/system-rest/src/main/java/cn/iocoder/mall/system/rest/request/admin/AdminsUserUpdateRequest.java deleted file mode 100644 index da63719e2..000000000 --- a/moved/system/system-rest/src/main/java/cn/iocoder/mall/system/rest/request/admin/AdminsUserUpdateRequest.java +++ /dev/null @@ -1,29 +0,0 @@ -package cn.iocoder.mall.system.rest.request.admin; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; -import lombok.experimental.Accessors; - -import javax.validation.constraints.NotNull; - -/** - * @Author: jiangweifan - * @Date: 2020/5/12 - * @Description: 管理员 - 用户信息 - 更新用户信息 - */ -@ApiModel("更新用户信息Request") -@Data -@Accessors(chain = true) -public class AdminsUserUpdateRequest { - - @ApiModelProperty(name = "id", value = "用户编号", required = true, example = "1") - @NotNull(message = "用户编号不能为空") - private Integer id; - - @ApiModelProperty(name = "nickname", value = "昵称", required = true, example = "小王") - private String nickname; - - @ApiModelProperty(name = "avatar", value = "头像", required = true, example = "http://www.iocoder.cn/xxx.jpg") - private String avatar; -} diff --git a/moved/system/system-rest/src/main/java/cn/iocoder/mall/system/rest/request/sms/AddSignRequest.java b/moved/system/system-rest/src/main/java/cn/iocoder/mall/system/rest/request/sms/AddSignRequest.java deleted file mode 100644 index 55be319db..000000000 --- a/moved/system/system-rest/src/main/java/cn/iocoder/mall/system/rest/request/sms/AddSignRequest.java +++ /dev/null @@ -1,21 +0,0 @@ -package cn.iocoder.mall.system.rest.request.sms; - -import lombok.Data; -import lombok.experimental.Accessors; - -import java.io.Serializable; - -/** - * 添加 sign - * - * author: sin - * time: 2020/4/20 11:10 上午 - */ -@Data -@Accessors(chain = true) -public class AddSignRequest implements Serializable { - - private String sign; - - private Integer platform; -} diff --git a/moved/system/system-rest/src/main/java/cn/iocoder/mall/system/rest/request/sms/AddSmsTemplateRequest.java b/moved/system/system-rest/src/main/java/cn/iocoder/mall/system/rest/request/sms/AddSmsTemplateRequest.java deleted file mode 100644 index 6357f9aa3..000000000 --- a/moved/system/system-rest/src/main/java/cn/iocoder/mall/system/rest/request/sms/AddSmsTemplateRequest.java +++ /dev/null @@ -1,49 +0,0 @@ -package cn.iocoder.mall.system.rest.request.sms; - -import cn.iocoder.common.framework.validator.InEnum; -import cn.iocoder.mall.system.biz.enums.sms.SmsPlatformEnum; -import cn.iocoder.mall.system.biz.enums.sms.SmsTypeEnum; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; -import lombok.experimental.Accessors; - -import javax.validation.constraints.NotNull; -import javax.validation.constraints.Size; -import java.io.Serializable; - -/** - * 短信模板 add - * - * @author Sin - * @time 2019/5/26 12:37 PM - */ -@ApiModel("短信模板-添加") -@Data -@Accessors(chain = true) -public class AddSmsTemplateRequest implements Serializable { - - @ApiModelProperty("短信签名id") - @NotNull(message = "短信短信签名id不能为空!") - private Integer smsSignId; - - @ApiModelProperty("短信模板code") - @NotNull - @Size(min = 3, max = 50, message = "短信code在 3-50 之间") - private String templateCode; - - @ApiModelProperty("短信模板") - @NotNull - @Size(min = 3, max = 255, message = "短信在 3-255 之间") - private String template; - - @ApiModelProperty("短信模板-平台") - @NotNull - @InEnum(value = SmsPlatformEnum.class) - private Integer platform; - - @ApiModelProperty("短信模板-平台") - @NotNull - @InEnum(value = SmsTypeEnum.class) - private Integer smsType; -} diff --git a/moved/system/system-rest/src/main/java/cn/iocoder/mall/system/rest/request/sms/ListSmsTemplateRequest.java b/moved/system/system-rest/src/main/java/cn/iocoder/mall/system/rest/request/sms/ListSmsTemplateRequest.java deleted file mode 100644 index 7c26646d1..000000000 --- a/moved/system/system-rest/src/main/java/cn/iocoder/mall/system/rest/request/sms/ListSmsTemplateRequest.java +++ /dev/null @@ -1,30 +0,0 @@ -package cn.iocoder.mall.system.rest.request.sms; - -import cn.iocoder.common.framework.vo.PageParam; -import lombok.Data; -import lombok.experimental.Accessors; - -import javax.validation.constraints.NotNull; - -/** - * page 短信模板 query - * - * @author Sin - * @time 2019/5/19 4:32 PM - */ -@Data -@Accessors(chain = true) -public class ListSmsTemplateRequest extends PageParam { - - @NotNull - private String id; - - @NotNull - private Integer smsSignId; - - @NotNull - private String template; - - @NotNull - private String applyStatus; -} diff --git a/moved/system/system-rest/src/main/java/cn/iocoder/mall/system/rest/request/sms/UpdateSignRequest.java b/moved/system/system-rest/src/main/java/cn/iocoder/mall/system/rest/request/sms/UpdateSignRequest.java deleted file mode 100644 index cbde8ea4a..000000000 --- a/moved/system/system-rest/src/main/java/cn/iocoder/mall/system/rest/request/sms/UpdateSignRequest.java +++ /dev/null @@ -1,23 +0,0 @@ -package cn.iocoder.mall.system.rest.request.sms; - -import lombok.Data; -import lombok.experimental.Accessors; - -import java.io.Serializable; - -/** - * 更新签名 - *

- * author: sin - * time: 2020/4/20 11:02 上午 - */ -@Data -@Accessors(chain = true) -public class UpdateSignRequest implements Serializable { - - private Integer id; - - private String sign; - - private Integer platform; -} diff --git a/moved/system/system-rest/src/main/java/cn/iocoder/mall/system/rest/request/sms/UpdateSmsTemplateRequest.java b/moved/system/system-rest/src/main/java/cn/iocoder/mall/system/rest/request/sms/UpdateSmsTemplateRequest.java deleted file mode 100644 index 1a45de2e3..000000000 --- a/moved/system/system-rest/src/main/java/cn/iocoder/mall/system/rest/request/sms/UpdateSmsTemplateRequest.java +++ /dev/null @@ -1,53 +0,0 @@ -package cn.iocoder.mall.system.rest.request.sms; - -import cn.iocoder.common.framework.validator.InEnum; -import cn.iocoder.mall.system.biz.enums.sms.SmsPlatformEnum; -import cn.iocoder.mall.system.biz.enums.sms.SmsTypeEnum; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; -import lombok.experimental.Accessors; - -import javax.validation.constraints.NotNull; -import javax.validation.constraints.Size; -import java.io.Serializable; - -/** - * 短信模板 add - * - * @author Sin - * @time 2019/5/26 12:37 PM - */ -@ApiModel("短信模板-添加") -@Data -@Accessors(chain = true) -public class UpdateSmsTemplateRequest implements Serializable { - - @ApiModelProperty("短信模板id") - @NotNull(message = "短信模板不能为空!") - private Integer id; - - @ApiModelProperty("短信签名id") - @NotNull(message = "短信短信签名id不能为空!") - private Integer smsSignId; - - @ApiModelProperty("短信模板code") - @NotNull - @Size(min = 3, max = 50, message = "短信code在 3-50 之间") - private String templateCode; - - @ApiModelProperty("短信模板") - @NotNull - @Size(min = 3, max = 255, message = "短信在 3-255 之间") - private String template; - - @ApiModelProperty("短信模板-平台") - @NotNull - @InEnum(value = SmsPlatformEnum.class) - private Integer platform; - - @ApiModelProperty("短信模板-平台") - @NotNull - @InEnum(value = SmsTypeEnum.class) - private Integer smsType; -} diff --git a/moved/system/system-rest/src/main/resources/rest.yaml b/moved/system/system-rest/src/main/resources/rest.yaml deleted file mode 100644 index a41390b41..000000000 --- a/moved/system/system-rest/src/main/resources/rest.yaml +++ /dev/null @@ -1,12 +0,0 @@ -# 服务器的配置项 -server: - port: 18083 - servlet: - context-path: /system-api/ - -# Swagger 配置项 -swagger: - title: 管理员子系统 - description: 管理员子系统 - version: 1.0.0 - base-package: cn.iocoder.mall.system.rest.controller diff --git a/moved/system/system-service-api/pom.xml b/moved/system/system-service-api/pom.xml deleted file mode 100644 index 3b77e0d06..000000000 --- a/moved/system/system-service-api/pom.xml +++ /dev/null @@ -1,44 +0,0 @@ - - - - system - cn.iocoder.mall - 1.0-SNAPSHOT - - 4.0.0 - jar - - system-service-api - - - - cn.iocoder.mall - common-framework - 1.0-SNAPSHOT - - - - - io.swagger - swagger-annotations - - - - - org.mapstruct - mapstruct - - - org.mapstruct - mapstruct-jdk8 - - - - org.projectlombok - lombok - - - - diff --git a/moved/system/system-service-api/src/main/java/cn/iocoder/mall/system/api/DataDictService.java b/moved/system/system-service-api/src/main/java/cn/iocoder/mall/system/api/DataDictService.java deleted file mode 100644 index ab7d60d61..000000000 --- a/moved/system/system-service-api/src/main/java/cn/iocoder/mall/system/api/DataDictService.java +++ /dev/null @@ -1,44 +0,0 @@ -package cn.iocoder.mall.system.api; - -import cn.iocoder.common.framework.vo.CommonResult; -import cn.iocoder.mall.system.api.bo.datadict.DataDictBO; -import cn.iocoder.mall.system.api.dto.datadict.DataDictAddDTO; -import cn.iocoder.mall.system.api.dto.datadict.DataDictUpdateDTO; - -import java.util.Collection; -import java.util.List; - -public interface DataDictService { - - List selectDataDictList(); - - DataDictBO addDataDict(Integer adminId, DataDictAddDTO dataDictAddDTO); - - Boolean updateDataDict(Integer adminId, DataDictUpdateDTO dataDictUpdateDTO); - - Boolean deleteDataDict(Integer adminId, Integer dataDictId); - - /** - * 获取字典值 - 单个 - * - * 注意: dictValue:Object 为了方便调用,会自动转换为 dictValue:String - * - * @param dictKey - * @param dictValue - * @return - */ - CommonResult getDataDict(String dictKey, Object dictValue); - - CommonResult> getDataDict(String dictKey); - - /** - * 获取字典值 - 多个 - * - * 注意:dictValueList:? 为了方便调用,会自动转换为 Set:String - * - * @param dictKey - * @param dictValueList - * @return - */ - CommonResult> getDataDictList(String dictKey, Collection dictValueList); -} diff --git a/moved/system/system-service-api/src/main/java/cn/iocoder/mall/system/api/SmsService.java b/moved/system/system-service-api/src/main/java/cn/iocoder/mall/system/api/SmsService.java deleted file mode 100644 index fe15355c7..000000000 --- a/moved/system/system-service-api/src/main/java/cn/iocoder/mall/system/api/SmsService.java +++ /dev/null @@ -1,116 +0,0 @@ -package cn.iocoder.mall.system.api; - -import cn.iocoder.mall.system.api.bo.sms.SmsSignBO; -import cn.iocoder.mall.system.api.bo.sms.PageSmsSignBO; -import cn.iocoder.mall.system.api.bo.sms.SmsTemplateBO; -import cn.iocoder.mall.system.api.bo.sms.PageSmsTemplateBO; -import cn.iocoder.mall.system.api.dto.sms.PageQuerySmsSignDTO; -import cn.iocoder.mall.system.api.dto.sms.PageQuerySmsTemplateDTO; - -import java.util.List; -import java.util.Map; - -/** - * 短信服务 - * - * @author Sin - * @time 2019/5/16 9:54 AM - */ -public interface SmsService { - - /** - * 短信模板 - 分页 - * - * @param queryDTO - * @return - */ - PageSmsSignBO pageSmsSign(PageQuerySmsSignDTO queryDTO); - - /** - * 短信模板 - 分页 - * - * @param queryDTO - * @return - */ - PageSmsTemplateBO pageSmsTemplate(PageQuerySmsTemplateDTO queryDTO); - - /** - * 签名 - 创建 - * - * @param sign - */ - void addSign(String sign, Integer platform); - - /** - * 签名 - 获取 - * - * @param id - */ - SmsSignBO getSign(Integer id); - - /** - * 签名 - 更新 - * - * @param id - * @param newSign - * @param platform - */ - void updateSign(Integer id, String newSign, Integer platform); - - /** - * 签名 - 更新 - * - * @param id - */ - void deleteSign(Integer id); - - /** - * 模板 - 创建 - * - * @param smsSignId 选用的哪个签名 - * @param templateCode 模板code - * @param template 模板内容 - * @param platform 平台 - */ - void addTemplate(Integer smsSignId, String templateCode, - String template, Integer platform, Integer smsType); - - /** - * 模板 - 获取 - * - * @param id - */ - SmsTemplateBO getTemplate(Integer id, Integer platform); - - /** - * 模板 - 更新 - * - * @param id 模板id - * @param smsSignId 短期签名 - * @param template 模板内容 - * @param platform 短信平台 - */ - void updateTemplate(Integer id, Integer smsSignId, String templateCode, - String template, Integer platform, Integer smsType); - - /** - * 模板 - 删除 - * - * @param id - */ - void deleteTemplate(Integer id); - - /** - * 短信发送 - 单个 - * - * @return - */ - void singleSend(String mobile, Integer smsTemplateId, Map params); - - /** - * 短信发送 - 批量 - * - * @return - */ - void batchSend(List mobileList, Integer smsTemplateId, Map params); -} diff --git a/moved/system/system-service-api/src/main/java/cn/iocoder/mall/system/api/bo/sms/PageSmsSignBO.java b/moved/system/system-service-api/src/main/java/cn/iocoder/mall/system/api/bo/sms/PageSmsSignBO.java deleted file mode 100644 index a4482d2b0..000000000 --- a/moved/system/system-service-api/src/main/java/cn/iocoder/mall/system/api/bo/sms/PageSmsSignBO.java +++ /dev/null @@ -1,68 +0,0 @@ -package cn.iocoder.mall.system.api.bo.sms; - -import com.fasterxml.jackson.annotation.JsonFormat; -import lombok.Data; -import lombok.experimental.Accessors; - -import java.util.Date; -import java.util.List; - -/** - * sms page - * - * @author Sin - * @time 2019/5/19 4:23 PM - */ -@Data -@Accessors(chain = true) -public class PageSmsSignBO { - - private Integer count; - - private Long current; - - private Long size; - - private Long total; - - private List data; - - @Data - @Accessors(chain = true) - public static class Sign { - /** - * 编号 - */ - private Integer id; - /** - * 短信平台 - */ - private Integer platform; - /** - * 签名名称 - */ - private String sign; - /** - * 审核状态 - *

- * - 1、审核中 - * - 2、审核成功 - * - 3、审核失败 - */ - private Integer applyStatus; - /** - * 审核信息 - */ - private String applyMessage; - /** - * 更新时间 - */ - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") - private Date updateTime; - /** - * 创建时间 - */ - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") - private Date createTime; - } -} diff --git a/moved/system/system-service-api/src/main/java/cn/iocoder/mall/system/api/bo/sms/PageSmsTemplateBO.java b/moved/system/system-service-api/src/main/java/cn/iocoder/mall/system/api/bo/sms/PageSmsTemplateBO.java deleted file mode 100644 index ece12fc9c..000000000 --- a/moved/system/system-service-api/src/main/java/cn/iocoder/mall/system/api/bo/sms/PageSmsTemplateBO.java +++ /dev/null @@ -1,117 +0,0 @@ -package cn.iocoder.mall.system.api.bo.sms; - -import com.fasterxml.jackson.annotation.JsonFormat; -import lombok.Data; -import lombok.experimental.Accessors; -import org.springframework.format.annotation.DateTimeFormat; - -import java.util.Date; -import java.util.List; - -/** - * sms page - * - * @author Sin - * @time 2019/5/19 4:23 PM - */ -@Data -@Accessors(chain = true) -public class PageSmsTemplateBO { - - private Long total; - - private Long current; - - private Long size; - - private List