result = new HashMap<>();
47 | result.put("index", index);
48 | result.put("data", data);
49 | result.put("code", code);
50 | return result;
51 | } catch (Exception e) {
52 | LOG.error("执行生成验证码数据-->失败:", e);
53 | return ResultUtil.format(ResultCode.R1303, e == null ? "" : e.getMessage());
54 | }
55 | }
56 |
57 | @GetMapping(value = "/verification/img/{code}", produces = { "image/jpeg" })
58 | public byte[] getImg(@PathVariable("code") String code) {
59 | try {
60 | if (StringUtil.isNullOrEmpty(code)) {
61 | return null;
62 | }
63 | byte[] bs = VerifyCodeUtils.getImageBytes(code);
64 | return bs;
65 | } catch (IOException e) {
66 | LOG.error("执行生成验证码图片-->失败:", e);
67 | return null;
68 | }
69 | }
70 | }
71 |
--------------------------------------------------------------------------------
/src/main/java/org/mirrentools/orion/interceptor/LoginSessionAuthInterceptor.java:
--------------------------------------------------------------------------------
1 | package org.mirrentools.orion.interceptor;
2 |
3 | import javax.servlet.http.HttpServletRequest;
4 | import javax.servlet.http.HttpServletResponse;
5 |
6 | import org.mirrentools.orion.common.LoginRole;
7 | import org.mirrentools.orion.common.LoginSession;
8 | import org.mirrentools.orion.common.LoginSessionStore;
9 | import org.mirrentools.orion.common.ResultCode;
10 | import org.mirrentools.orion.common.ResultUtil;
11 | import org.slf4j.Logger;
12 | import org.slf4j.LoggerFactory;
13 | import org.springframework.http.HttpMethod;
14 | import org.springframework.web.servlet.HandlerInterceptor;
15 |
16 | /**
17 | * 普通认证的拦截器
18 | *
19 | * @author Mirren
20 | *
21 | */
22 | public class LoginSessionAuthInterceptor implements HandlerInterceptor {
23 | private Logger LOG = LoggerFactory.getLogger(LoginSessionAuthInterceptor.class);
24 |
25 | @Override
26 | public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
27 | response.setHeader("Access-Control-Allow-Origin", "*");
28 | response.setHeader("Access-Control-Allow-Methods", "POST, GET, PUT, OPTIONS, DELETE");
29 | response.setHeader("Access-Control-Allow-Headers", "x-session,content-type");
30 | if (HttpMethod.valueOf(request.getMethod()) == HttpMethod.OPTIONS) {
31 | return true;
32 | }
33 | String sessionId = request.getHeader("x-session");
34 | if (sessionId == null) {
35 | sessionId = request.getParameter("token");
36 | }
37 | LoginSession session = LoginSessionStore.get(sessionId);
38 | if (session == null || session.getUid() == null || session.getRole() == null) {
39 | response.setHeader("Content-Type", "application/json;charset=UTF-8");
40 | try {
41 | response.getWriter().write(ResultUtil.formatAsString(ResultCode.R401));
42 | } catch (Exception e) {
43 | response.sendError(401, ResultCode.R401.msg());
44 | }
45 | return false;
46 | } else {
47 | String uid = session.getUid();
48 | String path = request.getServletPath();
49 | LoginRole role = session.getRole();
50 | if (role == LoginRole.CLIENT && path.startsWith("/private/server")) {
51 | response.setHeader("Content-Type", "application/json;charset=UTF-8");
52 | try {
53 | response.getWriter().write(ResultUtil.formatAsString(ResultCode.R403));
54 | } catch (Exception e) {
55 | response.sendError(403, ResultCode.R403.msg());
56 | }
57 | return false;
58 | }
59 | LOG.info("\n请求记录-->User: " + uid + ", Role: " + role + ", Method: " + request.getMethod() + ", Path: " + path);
60 | }
61 | return true;
62 | }
63 |
64 | }
65 |
--------------------------------------------------------------------------------
/Server-UI/css/chunk-af94418a.c9ed0dc3.css:
--------------------------------------------------------------------------------
1 | .text-through[data-v-7dc94b88]{-webkit-text-decoration-line:line-through;text-decoration-line:line-through}.api[data-v-7dc94b88]{background-color:#f5f7fa;border:1px solid #3b4151}.get[data-v-7dc94b88]{background-color:#ebf3fb;border:1px solid #61affe}.post[data-v-7dc94b88]{background-color:#e8f6f0;border:1px solid #49cc90}.put[data-v-7dc94b88]{background-color:#fbf1e6;border:1px solid #fca130}.delete[data-v-7dc94b88]{background-color:#fae7e7;border:1px solid #f93e3e}.head[data-v-7dc94b88]{background-color:#f4e7ff;border:1px solid #9012fe}.options[data-v-7dc94b88]{background-color:#e6eef6;border:1px solid #0d5aa7}.patch[data-v-7dc94b88]{background-color:#edfcf9;border:1px solid #50e3c2}.trace[data-v-7dc94b88]{background-color:#ffe9e6;border:1px solid #ffa8be}.connect[data-v-7dc94b88]{background-color:#e6f6f1;border:1px solid #83bb83}.api-header[data-v-7dc94b88]{height:40px;display:flex;padding:3px 5px;align-items:center;border-radius:4px}.api .api-header[data-v-7dc94b88]{background-color:#f5f7fa}.get .api-header[data-v-7dc94b88]{background-color:#ebf3fb}.post .api-header[data-v-7dc94b88]{background-color:#e8f6f0}.put .api-header[data-v-7dc94b88]{background-color:#fbf1e6}.delete .api-header[data-v-7dc94b88]{background-color:#fae7e7}.head .api-header[data-v-7dc94b88]{background-color:#f4e7ff}.options .api-header[data-v-7dc94b88]{background-color:#e6eef6}.patch .api-header[data-v-7dc94b88]{background-color:#edfcf9}.trace .api-header[data-v-7dc94b88]{background-color:#ffe9e6}.connect .api-header[data-v-7dc94b88]{background-color:#e6f6f1}.api-method[data-v-7dc94b88]{font-size:14px;font-weight:700;padding:5px 15px;text-align:center;border-radius:3px;color:#fff}.api .api-method[data-v-7dc94b88]{background-color:#3b4151}.get .api-method[data-v-7dc94b88]{background-color:#61affe}.post .api-method[data-v-7dc94b88]{background-color:#49cc90}.put .api-method[data-v-7dc94b88]{background-color:#fca130}.delete .api-method[data-v-7dc94b88]{background-color:#f93e3e}.head .api-method[data-v-7dc94b88]{background-color:#9012fe}.options .api-method[data-v-7dc94b88]{background-color:#0d5aa7}.patch .api-method[data-v-7dc94b88]{background-color:#50e3c2}.trace .api-method[data-v-7dc94b88]{background-color:#ffa8be}.connect .api-method[data-v-7dc94b88]{background-color:#83bb83}.api-path-summary[data-v-7dc94b88]{align-items:center;word-break:break-all;padding-left:10px;color:#3b4151}.novalidate input[data-v-7dc94b88]{border-color:#dcdfe6!important}.alink[data-v-7dc94b88]{background-color:transparent;color:#409eff;text-decoration:none;outline:none;display:inline-block;margin:3px 5px}.alink[data-v-7dc94b88]:active,.alink[data-v-7dc94b88]:hover{outline-width:0;opacity:.8}.project-item[data-v-7dc94b88]{text-align:right;padding-right:5px;color:#666}.desc-constraint span[data-v-7dc94b88]{display:inline-block;padding-right:10px}.user-tag[data-v-7dc94b88]{padding:3px 10px;background-color:#f0f2f5;border-radius:3px;margin-right:5px;margin-bottom:5px;cursor:pointer}
--------------------------------------------------------------------------------
/src/main/java/org/mirrentools/orion/entity/ProjectApiTemplate.java:
--------------------------------------------------------------------------------
1 | package org.mirrentools.orion.entity;
2 |
3 |
4 | /**
5 | * API接口模板
6 | * @author
7 | */
8 | public class ProjectApiTemplate {
9 | /** 模板的id */
10 | private String tid;
11 | /** 模板所属用户的id */
12 | private String uid;
13 | /** 模板的名称 */
14 | private String name;
15 | /** API基本信息 */
16 | private String api;
17 | /** API中的请求参数 */
18 | private String parameters;
19 | /** API中的响应参数 */
20 | private String responses;
21 | /** 模板创建的时间 */
22 | private Long ctime;
23 | /**
24 | * 获取模板的id
25 | *
26 | * @return
27 | */
28 | public String getTid() {
29 | return tid;
30 | }
31 | /**
32 | * 设置模板的id
33 | *
34 | * @param tid
35 | */
36 | public void setTid(String tid) {
37 | this.tid = tid;
38 | }
39 | /**
40 | * 获取模板所属用户的id
41 | *
42 | * @return
43 | */
44 | public String getUid() {
45 | return uid;
46 | }
47 | /**
48 | * 设置模板所属用户的id
49 | *
50 | * @param uid
51 | */
52 | public void setUid(String uid) {
53 | this.uid = uid;
54 | }
55 | /**
56 | * 获取模板的名称
57 | *
58 | * @return
59 | */
60 | public String getName() {
61 | return name;
62 | }
63 | /**
64 | * 设置模板的名称
65 | *
66 | * @param name
67 | */
68 | public void setName(String name) {
69 | this.name = name;
70 | }
71 | /**
72 | * 获取API基本信息
73 | *
74 | * @return
75 | */
76 | public String getApi() {
77 | return api;
78 | }
79 | /**
80 | * 设置API基本信息
81 | *
82 | * @param api
83 | */
84 | public void setApi(String api) {
85 | this.api = api;
86 | }
87 | /**
88 | * 获取API中的请求参数
89 | *
90 | * @return
91 | */
92 | public String getParameters() {
93 | return parameters;
94 | }
95 | /**
96 | * 设置API中的请求参数
97 | *
98 | * @param parameters
99 | */
100 | public void setParameters(String parameters) {
101 | this.parameters = parameters;
102 | }
103 | /**
104 | * 获取API中的响应参数
105 | *
106 | * @return
107 | */
108 | public String getResponses() {
109 | return responses;
110 | }
111 | /**
112 | * 设置API中的响应参数
113 | *
114 | * @param responses
115 | */
116 | public void setResponses(String responses) {
117 | this.responses = responses;
118 | }
119 | /**
120 | * 获取模板创建的时间
121 | *
122 | * @return
123 | */
124 | public Long getCtime() {
125 | return ctime;
126 | }
127 | /**
128 | * 设置模板创建的时间
129 | *
130 | * @param ctime
131 | */
132 | public void setCtime(Long ctime) {
133 | this.ctime = ctime;
134 | }
135 |
136 | @Override
137 | public String toString() {
138 | return "ProjectApiTemplate [tid=" + tid + " , uid=" + uid + " , name=" + name + " , api=" + api + " , parameters=" + parameters + " , responses=" + responses + " , ctime=" + ctime + " ]";
139 | }
140 | }
141 |
--------------------------------------------------------------------------------
/src/main/java/org/mirrentools/orion/WebMvcConfig.java:
--------------------------------------------------------------------------------
1 | package org.mirrentools.orion;
2 |
3 | import java.util.concurrent.TimeUnit;
4 |
5 | import javax.servlet.http.HttpServletRequest;
6 | import javax.servlet.http.HttpServletResponse;
7 |
8 | import org.mirrentools.orion.interceptor.ClientAllowsInterceptor;
9 | import org.mirrentools.orion.interceptor.LoginSessionAuthInterceptor;
10 | import org.springframework.beans.factory.annotation.Value;
11 | import org.springframework.context.annotation.Configuration;
12 | import org.springframework.http.CacheControl;
13 | import org.springframework.web.servlet.config.annotation.InterceptorRegistration;
14 | import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
15 | import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
16 | import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
17 | import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
18 |
19 | /**
20 | * WebMvc的文件配置
21 | *
22 | * @author Mirren
23 | *
24 | */
25 | @Configuration
26 | public class WebMvcConfig implements WebMvcConfigurer {
27 | /** 配置文件是否允许未登录的用户访问客户端 */
28 | @Value("${clientAllowUnauthorized}")
29 | private String clientAllowUnauthorized;
30 |
31 | @Override
32 | public void addResourceHandlers(ResourceHandlerRegistry registry) {
33 | registry.addResourceHandler("/console/**")
34 | .addResourceLocations("file:" + System.getProperty("user.dir") + "/Server-UI/")
35 | .setCacheControl(CacheControl.maxAge(7, TimeUnit.DAYS));
36 | registry.addResourceHandler("/client/**")
37 | .addResourceLocations("file:" + System.getProperty("user.dir") + "/Client-UI/")
38 | .setCacheControl(CacheControl.maxAge(7, TimeUnit.DAYS));
39 | registry.addResourceHandler("/favicon.ico")
40 | .addResourceLocations("classpath:favicon.ico","classpath:/BOOT-INF/classes/favicon.ico");
41 | WebMvcConfigurer.super.addResourceHandlers(registry);
42 | }
43 |
44 | @Override
45 | public void addInterceptors(InterceptorRegistry registry) {
46 | InterceptorRegistration privateServers = registry.addInterceptor(new LoginSessionAuthInterceptor());
47 | privateServers.addPathPatterns("/private/**");
48 | InterceptorRegistration client = registry.addInterceptor(new ClientAllowsInterceptor("true".equalsIgnoreCase(clientAllowUnauthorized)));
49 | client.addPathPatterns("/client/index.html");
50 | // 添加404页面跳转
51 | registry.addInterceptor(new HandlerInterceptorAdapter() {
52 | @Override
53 | public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
54 | if (response.getStatus() == 404) {
55 | response.sendRedirect("/console/index.html#/404");
56 | return false;
57 | }
58 | return super.preHandle(request, response, handler);
59 | }
60 | });
61 | WebMvcConfigurer.super.addInterceptors(registry);
62 | }
63 |
64 | }
65 |
--------------------------------------------------------------------------------
/Server-UI/css/chunk-1c8ff139.2c0c59e8.css:
--------------------------------------------------------------------------------
1 | .text-through[data-v-d4afcaf6]{-webkit-text-decoration-line:line-through;text-decoration-line:line-through}.api[data-v-d4afcaf6]{background-color:#f5f7fa;border:1px solid #3b4151}.get[data-v-d4afcaf6]{background-color:#ebf3fb;border:1px solid #61affe}.post[data-v-d4afcaf6]{background-color:#e8f6f0;border:1px solid #49cc90}.put[data-v-d4afcaf6]{background-color:#fbf1e6;border:1px solid #fca130}.delete[data-v-d4afcaf6]{background-color:#fae7e7;border:1px solid #f93e3e}.head[data-v-d4afcaf6]{background-color:#f4e7ff;border:1px solid #9012fe}.options[data-v-d4afcaf6]{background-color:#e6eef6;border:1px solid #0d5aa7}.patch[data-v-d4afcaf6]{background-color:#edfcf9;border:1px solid #50e3c2}.trace[data-v-d4afcaf6]{background-color:#ffe9e6;border:1px solid #ffa8be}.connect[data-v-d4afcaf6]{background-color:#e6f6f1;border:1px solid #83bb83}.api-header[data-v-d4afcaf6]{height:40px;display:flex;padding:3px 5px;align-items:center;border-radius:4px}.api .api-header[data-v-d4afcaf6]{background-color:#f5f7fa}.get .api-header[data-v-d4afcaf6]{background-color:#ebf3fb}.post .api-header[data-v-d4afcaf6]{background-color:#e8f6f0}.put .api-header[data-v-d4afcaf6]{background-color:#fbf1e6}.delete .api-header[data-v-d4afcaf6]{background-color:#fae7e7}.head .api-header[data-v-d4afcaf6]{background-color:#f4e7ff}.options .api-header[data-v-d4afcaf6]{background-color:#e6eef6}.patch .api-header[data-v-d4afcaf6]{background-color:#edfcf9}.trace .api-header[data-v-d4afcaf6]{background-color:#ffe9e6}.connect .api-header[data-v-d4afcaf6]{background-color:#e6f6f1}.api-method[data-v-d4afcaf6]{font-size:14px;font-weight:700;padding:5px 15px;text-align:center;border-radius:3px;color:#fff}.api .api-method[data-v-d4afcaf6]{background-color:#3b4151}.get .api-method[data-v-d4afcaf6]{background-color:#61affe}.post .api-method[data-v-d4afcaf6]{background-color:#49cc90}.put .api-method[data-v-d4afcaf6]{background-color:#fca130}.delete .api-method[data-v-d4afcaf6]{background-color:#f93e3e}.head .api-method[data-v-d4afcaf6]{background-color:#9012fe}.options .api-method[data-v-d4afcaf6]{background-color:#0d5aa7}.patch .api-method[data-v-d4afcaf6]{background-color:#50e3c2}.trace .api-method[data-v-d4afcaf6]{background-color:#ffa8be}.connect .api-method[data-v-d4afcaf6]{background-color:#83bb83}.api-path-summary[data-v-d4afcaf6]{align-items:center;word-break:break-all;padding-left:10px;color:#3b4151}.alink[data-v-d4afcaf6]{background-color:transparent;color:#409eff;text-decoration:none;outline:none;display:inline-block;margin:3px 5px}.alink[data-v-d4afcaf6]:active,.alink[data-v-d4afcaf6]:hover{outline-width:0;opacity:.8}.group-items[data-v-d4afcaf6]{margin-top:5px;padding:0;list-style-type:none}.group-items li[data-v-d4afcaf6]{display:flex;align-items:center;padding:5px 0 3px 5px;border-left:3px solid transparent;cursor:pointer}.group-items li .group-item[data-v-d4afcaf6]{padding-bottom:2px;border-bottom:2px solid transparent}.group-items li:hover .group-item[data-v-d4afcaf6]{color:#409eff;border-bottom:2px solid #409eff}.group-items .current[data-v-d4afcaf6]{color:#409eff;border-left:3px solid #409eff}.td-item[data-v-d4afcaf6]{text-align:right;padding-right:5px}
--------------------------------------------------------------------------------
/Server-UI/css/chunk-7da4ef10.a3ff37ee.css:
--------------------------------------------------------------------------------
1 | .text-through[data-v-73069256]{-webkit-text-decoration-line:line-through;text-decoration-line:line-through}.api[data-v-73069256]{background-color:#f5f7fa;border:1px solid #3b4151}.get[data-v-73069256]{background-color:#ebf3fb;border:1px solid #61affe}.post[data-v-73069256]{background-color:#e8f6f0;border:1px solid #49cc90}.put[data-v-73069256]{background-color:#fbf1e6;border:1px solid #fca130}.delete[data-v-73069256]{background-color:#fae7e7;border:1px solid #f93e3e}.head[data-v-73069256]{background-color:#f4e7ff;border:1px solid #9012fe}.options[data-v-73069256]{background-color:#e6eef6;border:1px solid #0d5aa7}.patch[data-v-73069256]{background-color:#edfcf9;border:1px solid #50e3c2}.trace[data-v-73069256]{background-color:#ffe9e6;border:1px solid #ffa8be}.connect[data-v-73069256]{background-color:#e6f6f1;border:1px solid #83bb83}.api-header[data-v-73069256]{height:40px;display:flex;padding:3px 5px;align-items:center;border-radius:4px}.api .api-header[data-v-73069256]{background-color:#f5f7fa}.get .api-header[data-v-73069256]{background-color:#ebf3fb}.post .api-header[data-v-73069256]{background-color:#e8f6f0}.put .api-header[data-v-73069256]{background-color:#fbf1e6}.delete .api-header[data-v-73069256]{background-color:#fae7e7}.head .api-header[data-v-73069256]{background-color:#f4e7ff}.options .api-header[data-v-73069256]{background-color:#e6eef6}.patch .api-header[data-v-73069256]{background-color:#edfcf9}.trace .api-header[data-v-73069256]{background-color:#ffe9e6}.connect .api-header[data-v-73069256]{background-color:#e6f6f1}.api-method[data-v-73069256]{font-size:14px;font-weight:700;padding:5px 15px;text-align:center;border-radius:3px;color:#fff}.api .api-method[data-v-73069256]{background-color:#3b4151}.get .api-method[data-v-73069256]{background-color:#61affe}.post .api-method[data-v-73069256]{background-color:#49cc90}.put .api-method[data-v-73069256]{background-color:#fca130}.delete .api-method[data-v-73069256]{background-color:#f93e3e}.head .api-method[data-v-73069256]{background-color:#9012fe}.options .api-method[data-v-73069256]{background-color:#0d5aa7}.patch .api-method[data-v-73069256]{background-color:#50e3c2}.trace .api-method[data-v-73069256]{background-color:#ffa8be}.connect .api-method[data-v-73069256]{background-color:#83bb83}.api-path-summary[data-v-73069256]{align-items:center;word-break:break-all;padding-left:10px;color:#3b4151}.alink[data-v-73069256]{background-color:transparent;color:#409eff;text-decoration:none;outline:none;display:inline-block;margin:3px 5px}.alink[data-v-73069256]:active,.alink[data-v-73069256]:hover{outline-width:0;opacity:.8}.group-items[data-v-73069256]{margin-top:5px;padding:0;list-style-type:none}.group-items li[data-v-73069256]{display:flex;align-items:center;padding:5px 0 3px 5px;border-left:3px solid transparent;cursor:pointer}.group-items li .group-item[data-v-73069256]{padding-bottom:2px;border-bottom:2px solid transparent}.group-items li:hover .group-item[data-v-73069256]{color:#409eff;border-bottom:2px solid #409eff}.group-items .current[data-v-73069256]{color:#409eff;border-left:3px solid #409eff}.td-item[data-v-73069256]{text-align:right;padding-right:5px}
--------------------------------------------------------------------------------
/src/main/java/org/mirrentools/orion/Main.java:
--------------------------------------------------------------------------------
1 | package org.mirrentools.orion;
2 |
3 | import org.mirrentools.orion.controller.ImportWebSocketServer;
4 | import org.mybatis.spring.annotation.MapperScan;
5 | import org.springframework.boot.SpringApplication;
6 | import org.springframework.boot.autoconfigure.SpringBootApplication;
7 | import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
8 | import org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration;
9 | import org.springframework.boot.web.servlet.ServletComponentScan;
10 | import org.springframework.context.ConfigurableApplicationContext;
11 | import org.springframework.context.annotation.Bean;
12 | import org.springframework.web.servlet.config.annotation.EnableWebMvc;
13 | import org.springframework.web.socket.server.standard.ServerEndpointExporter;
14 |
15 | /**
16 | *
17 | * 嗨!我通过下面这4行代码,运行了很长很长的时间后,它打印的内容进化成现在的这个项目
18 | * Hi! I ran the following four lines of code for a long time, and the printed content evolved into the current project
19 | * while (true) {
20 | * System.out.print(new Random().nextInt(2));
21 | * Thread.sleep(1000);
22 | * }
23 | * 可能我上面的内容很疯狂,但是你可能听信过更疯狂的,比如:我们现在生活的世界是大爆炸而来的;
24 | * Maybe what I am talking above is crazy, but you may have heard much more crazy things, for example: The world we live in now is from the big bang;
25 | * 因为我们不关心或不容易证实,所以一些假说与谎言传多了就被当真了;
26 | * Because we don't care about it or it's not easy to prove it, some hypotheses and lies are taken seriously when they are spread too much;
27 | * 计算机需要被制造,程序也需要被编写或生成才有;程序能做什么,能获取到计算机的什么信息都已经在编写的时候设定好了;
28 | * A computer needs to be made, and a program needs to be written or generated. What a program can do and what information it can get has been set up at the time of writing;
29 | * 计算机的世界好比我们现在生活的世界,程序好比现在看到这段注释的你我;
30 | * The world of computer is like the world we live in now, and the program is like you and me who see this comment now;
31 | * 这个世界有一位造物主,虽然眼不能见但是籍着祂所造的一切,只要我们不压着我们的良心我们都能感受到;
32 | * There is a creator in this world, who can't see but can feel everything created by HIM as long as we don't press our conscience;
33 | * 我们编写程序需要有文档或注释帮助我们了解程序相关的,同样如果要了解这个世界的一切我们只能通过她的说明书,就是圣经
34 | * We need to have documents or notes to help us understand the program, and if we want to understand everything in the world, we can only through her instructions, that is, the BIBLE.
35 | * 程序入口
36 | * Main
37 | *
38 | *
39 | * @author Mirren
40 | * @date 2020-08-22
41 | */
42 | @SpringBootApplication(exclude = {DataSourceAutoConfiguration.class, HibernateJpaAutoConfiguration.class})
43 | @EnableWebMvc
44 | @ServletComponentScan
45 | @MapperScan("org.mirrentools.orion.mapper")
46 | public class Main {
47 | public static void main(String[] args) {
48 | ConfigurableApplicationContext content = SpringApplication.run(Main.class, args);
49 | ImportWebSocketServer.setApplicationContext(content);
50 | }
51 |
52 | @Bean
53 | public ServerEndpointExporter serverEndpointExporter() {
54 | return new ServerEndpointExporter();
55 | }
56 |
57 | }
58 |
--------------------------------------------------------------------------------
/src/test/java/org/mirrentools/orion/scripts/CreateCode.java:
--------------------------------------------------------------------------------
1 | package org.mirrentools.orion.scripts;
2 |
3 | import java.util.HashMap;
4 | import java.util.Map;
5 |
6 | import org.mirrentools.orion.Constant;
7 | import org.mirrentools.sd.ScrewDriver;
8 | import org.mirrentools.sd.models.SdTemplate;
9 | import org.mirrentools.sd.options.ScrewDriverOptions;
10 |
11 | /**
12 | * 创建代码,该脚本依赖 ScrewDriver
13 | *
14 | * @author Mirren
15 | *
16 | */
17 | public class CreateCode {
18 | /**
19 | * 不同数据库只需要修改这个变量后重新启动执行
20 | * MySQL = MySqlMapper.ftl
21 | * PostgreSQL = PostgreSqlMapper.ftl
22 | * SQLite = SqliteMapper.ftl
23 | * Oracle = OracleMapper.ftl
24 | * SQL Server = SqlServerMapper.ftl
25 | * DB2 = DB2Mapper.ftl
26 | */
27 | private static String MYBATIS_MAAPPER_TEMPLATE = "MySqlMapper.ftl";
28 | public static void main(String[] args) {
29 | ScrewDriver screwDriver = ScrewDriver.instance(new ScrewDriverOptions());
30 |
31 | // // 创建项目的代码
32 | // screwDriver.createCode(Constant.getProjectBean(), getTemplates("Project"));
33 | // // 创建项目分享记录的代码
34 | // screwDriver.createCode(Constant.getProjectShareBean(), getTemplates("ProjectShare"));
35 | // // 创建接口分组的代码
36 | // screwDriver.createCode(Constant.getProjectApiGroupBean(), getTemplates("ProjectApiGroup"));
37 | // // 创建接口的代码
38 | // screwDriver.createCode(Constant.getProjectApiBean(), getTemplates("ProjectApi"));
39 | // // 创建接口模板的代码
40 | // screwDriver.createCode(Constant.getProjectApiTemplateBean(), getTemplates("ProjectApiTemplate"));
41 | // // 创建用户代码
42 | // screwDriver.createCode(Constant.getUsersBean(), getTemplates("Users"));
43 | // 创建用户代码
44 | screwDriver.createCode(Constant.getTagsBean(), getTemplates("Tags"));
45 | }
46 |
47 | /**
48 | * 获取生成代码需要用到的模板
49 | *
50 | * @param entityName
51 | * 类的名称
52 | * @return
53 | */
54 | public static Map getTemplates(String entityName) {
55 | String packageName = "org.mirrentools.orion.";
56 | String templatePath = "mybatis";
57 | // 设置实体生成模板
58 | Map templates = new HashMap();
59 | // 实体类
60 | templates.put("entity", new SdTemplate()
61 | .setPath(templatePath)
62 | .setFile("Entity.ftl")
63 | .setPackageName(packageName + "entity")
64 | .setOverride(false).setClassName(entityName));
65 | // 数据库操作dao
66 | templates.put("dao", new SdTemplate()
67 | .setPath(templatePath)
68 | .setFile("Dao.ftl")
69 | .setPackageName(packageName + "mapper").setOverride(false)
70 | .setClassName(entityName + "Mapper"));
71 | // 查询帮助类
72 | templates.put("assist", new SdTemplate()
73 | .setPath(templatePath)
74 | .setFile("SqlAssist.ftl")
75 | .setPackageName(packageName + "common")
76 | .setOverride(false).setClassName("SqlAssist"));
77 | // MyBatis的mapper
78 | templates.put("mapper", new SdTemplate()
79 | .setPath(templatePath)
80 | .setFile(MYBATIS_MAAPPER_TEMPLATE)
81 | .setPackageName("mappers")
82 | .setSourceFolder("src/main/resources")
83 | .setClassName(entityName + "Mapper").setSuffix(".xml"));
84 | return templates;
85 | }
86 | }
87 |
--------------------------------------------------------------------------------
/src/main/java/org/mirrentools/orion/common/ResultUtil.java:
--------------------------------------------------------------------------------
1 | package org.mirrentools.orion.common;
2 |
3 | import java.util.HashMap;
4 | import java.util.Map;
5 |
6 | import org.json.JSONObject;
7 |
8 | /**
9 | * 返回结果工具
10 | *
11 | * @author Mirren
12 | *
13 | */
14 | public class ResultUtil {
15 |
16 | /**
17 | * 格式化为成功 {@link org.mirrentools.orion.common.ResultCode#R200}
18 | *
19 | * @return
20 | */
21 | public static Map format200(Object data) {
22 | return format(ResultCode.R200, data);
23 | }
24 |
25 | /**
26 | * 格式化为登录超时 {@link org.mirrentools.orion.common.ResultCode#R401}
27 | *
28 | * @return
29 | */
30 | public static Map format401() {
31 | return format(ResultCode.R401);
32 | }
33 |
34 | /**
35 | * 格式化为没有权限 {@link org.mirrentools.orion.common.ResultCode#R403}
36 | *
37 | * @return
38 | */
39 | public static Map format403() {
40 | return format(ResultCode.R403);
41 | }
42 |
43 | /**
44 | * 格式化为资源不存在 {@link org.mirrentools.orion.common.ResultCode#R404}
45 | *
46 | * @return
47 | */
48 | public static Map format404() {
49 | return format(ResultCode.R404);
50 | }
51 |
52 | /**
53 | * 响应数据
54 | *
55 | * @param status 响应的状态
56 | * @param data 响应的数据
57 | * @return
58 | */
59 | public static Map format(ResultCode status) {
60 | if (status == null) {
61 | status = ResultCode.DEFAULT;
62 | }
63 | Map result = new HashMap<>();
64 | result.put("code", status.code());
65 | result.put("msg", status.msg());
66 | result.put("explain", status.explain());
67 | return result;
68 | }
69 |
70 | /**
71 | * 响应数据
72 | *
73 | * @param status 响应的状态
74 | * @param data 响应的数据
75 | * @return
76 | */
77 | public static Map format(ResultCode status, Object data) {
78 | if (status == null) {
79 | status = ResultCode.DEFAULT;
80 | }
81 | Map result = new HashMap<>();
82 | result.put("code", status.code());
83 | result.put("msg", status.msg());
84 | result.put("explain", status.explain());
85 | result.put("data", data);
86 | return result;
87 | }
88 |
89 | /**
90 | * 返回格式化为JSON字符串
91 | *
92 | * @param status 响应的状态
93 | * @return
94 | * @throws Exception
95 | */
96 | public static String formatAsString(ResultCode status) {
97 | JSONObject result = new JSONObject();
98 | result.put("code", status.code());
99 | result.put("msg", status.msg());
100 | result.put("explain", status.explain());
101 | return result.toString();
102 | }
103 |
104 | /**
105 | * 返回格式化为JSON字符串
106 | *
107 | * @param status 响应的状态
108 | * @param data 响应的数据
109 | * @return
110 | * @throws Exception
111 | */
112 | public static String formatAsString(ResultCode status, Object data) {
113 | JSONObject result = new JSONObject();
114 | result.put("code", status.code());
115 | result.put("msg", status.msg());
116 | result.put("explain", status.explain());
117 | result.put("data", data);
118 | return result.toString();
119 | }
120 |
121 | }
122 |
--------------------------------------------------------------------------------
/src/main/java/org/mirrentools/orion/entity/MyServletRequestWrapper.java:
--------------------------------------------------------------------------------
1 | package org.mirrentools.orion.entity;
2 |
3 | import java.io.BufferedReader;
4 | import java.io.ByteArrayOutputStream;
5 | import java.io.IOException;
6 | import java.io.InputStream;
7 | import java.io.InputStreamReader;
8 |
9 | import javax.servlet.ReadListener;
10 | import javax.servlet.ServletInputStream;
11 | import javax.servlet.http.HttpServletRequest;
12 | import javax.servlet.http.HttpServletRequestWrapper;
13 |
14 | /**
15 | * 用于复制Request的流使其可以被重复使用,该类目前只作用于代理请求
16 | * @author Mirren
17 | *
18 | */
19 | public class MyServletRequestWrapper extends HttpServletRequestWrapper {
20 |
21 | private final byte[] body;
22 |
23 | public MyServletRequestWrapper(HttpServletRequest request) throws IOException {
24 | super(request);
25 | body = toByteArray(super.getInputStream());
26 | }
27 |
28 | @Override
29 | public BufferedReader getReader() throws IOException {
30 | return new BufferedReader(new InputStreamReader(getInputStream()));
31 | }
32 |
33 | @Override
34 | public ServletInputStream getInputStream() throws IOException {
35 | return new RequestBodyCachingInputStream(body);
36 | }
37 |
38 | private class RequestBodyCachingInputStream extends ServletInputStream {
39 | private byte[] body;
40 | private int lastIndexRetrieved = -1;
41 | private ReadListener listener;
42 |
43 | public RequestBodyCachingInputStream(byte[] body) {
44 | this.body = body;
45 | }
46 |
47 | @Override
48 | public int read() throws IOException {
49 | if (isFinished()) {
50 | return -1;
51 | }
52 | int i = body[lastIndexRetrieved + 1];
53 | lastIndexRetrieved++;
54 | if (isFinished() && listener != null) {
55 | try {
56 | listener.onAllDataRead();
57 | } catch (IOException e) {
58 | listener.onError(e);
59 | throw e;
60 | }
61 | }
62 | return i;
63 | }
64 |
65 | @Override
66 | public boolean isFinished() {
67 | return lastIndexRetrieved == body.length - 1;
68 | }
69 |
70 | @Override
71 | public boolean isReady() {
72 | return isFinished();
73 | }
74 |
75 | @Override
76 | public void setReadListener(ReadListener listener) {
77 | if (listener == null) {
78 | throw new IllegalArgumentException("listener cann not be null");
79 | }
80 | if (this.listener != null) {
81 | throw new IllegalArgumentException("listener has been set");
82 | }
83 | this.listener = listener;
84 | if (!isFinished()) {
85 | try {
86 | listener.onAllDataRead();
87 | } catch (IOException e) {
88 | listener.onError(e);
89 | }
90 | } else {
91 | try {
92 | listener.onAllDataRead();
93 | } catch (IOException e) {
94 | listener.onError(e);
95 | }
96 | }
97 | }
98 |
99 | @Override
100 | public int available() throws IOException {
101 | return body.length - lastIndexRetrieved - 1;
102 | }
103 |
104 | @Override
105 | public void close() throws IOException {
106 | lastIndexRetrieved = body.length - 1;
107 | body = null;
108 | }
109 | }
110 | public byte[] toByteArray(InputStream input) throws IOException {
111 | ByteArrayOutputStream output = new ByteArrayOutputStream();
112 | byte[] buffer = new byte[4096];
113 | int n = 0;
114 | while (-1 != (n = input.read(buffer))) {
115 | output.write(buffer, 0, n);
116 | }
117 | return output.toByteArray();
118 | }
119 | }
--------------------------------------------------------------------------------
/src/main/java/org/mirrentools/orion/entity/Users.java:
--------------------------------------------------------------------------------
1 | package org.mirrentools.orion.entity;
2 |
3 |
4 | /**
5 | * 用户表
6 | * @author Mirren
7 | */
8 | public class Users {
9 | /** 用户的账号 */
10 | private String uid;
11 | /** 用户的角色 */
12 | private String role;
13 | /** 用户的标签 */
14 | private String tags;
15 | /** 用户的密码 */
16 | private String pwd;
17 | /** 用户的昵称 */
18 | private String nickname;
19 | /** 用户的联系信息 */
20 | private String contact;
21 | /** 用户的简介 */
22 | private String summary;
23 | /** 创建的时间 */
24 | private Long ctime;
25 | /** 最后访问时间 */
26 | private Long lasttime;
27 | /**
28 | * 获取用户的账号
29 | *
30 | * @return
31 | */
32 | public String getUid() {
33 | return uid;
34 | }
35 | /**
36 | * 设置用户的账号
37 | *
38 | * @param uid
39 | */
40 | public void setUid(String uid) {
41 | this.uid = uid;
42 | }
43 | /**
44 | * 获取用户的角色
45 | *
46 | * @return
47 | */
48 | public String getRole() {
49 | return role;
50 | }
51 | /**
52 | * 设置用户的角色
53 | *
54 | * @param role
55 | */
56 | public void setRole(String role) {
57 | this.role = role;
58 | }
59 | /**
60 | * 获取用户的标签
61 | *
62 | * @return
63 | */
64 | public String getTags() {
65 | return tags;
66 | }
67 | /**
68 | * 设置用户的标签
69 | *
70 | * @param tags
71 | */
72 | public void setTags(String tags) {
73 | this.tags = tags;
74 | }
75 | /**
76 | * 获取用户的密码
77 | *
78 | * @return
79 | */
80 | public String getPwd() {
81 | return pwd;
82 | }
83 | /**
84 | * 设置用户的密码
85 | *
86 | * @param pwd
87 | */
88 | public void setPwd(String pwd) {
89 | this.pwd = pwd;
90 | }
91 | /**
92 | * 获取用户的昵称
93 | *
94 | * @return
95 | */
96 | public String getNickname() {
97 | return nickname;
98 | }
99 | /**
100 | * 设置用户的昵称
101 | *
102 | * @param nickname
103 | */
104 | public void setNickname(String nickname) {
105 | this.nickname = nickname;
106 | }
107 | /**
108 | * 获取用户的联系信息
109 | *
110 | * @return
111 | */
112 | public String getContact() {
113 | return contact;
114 | }
115 | /**
116 | * 设置用户的联系信息
117 | *
118 | * @param contact
119 | */
120 | public void setContact(String contact) {
121 | this.contact = contact;
122 | }
123 | /**
124 | * 获取用户的简介
125 | *
126 | * @return
127 | */
128 | public String getSummary() {
129 | return summary;
130 | }
131 | /**
132 | * 设置用户的简介
133 | *
134 | * @param summary
135 | */
136 | public void setSummary(String summary) {
137 | this.summary = summary;
138 | }
139 | /**
140 | * 获取创建的时间
141 | *
142 | * @return
143 | */
144 | public Long getCtime() {
145 | return ctime;
146 | }
147 | /**
148 | * 设置创建的时间
149 | *
150 | * @param ctime
151 | */
152 | public void setCtime(Long ctime) {
153 | this.ctime = ctime;
154 | }
155 | /**
156 | * 获取最后访问时间
157 | *
158 | * @return
159 | */
160 | public Long getLasttime() {
161 | return lasttime;
162 | }
163 | /**
164 | * 设置最后访问时间
165 | *
166 | * @param lasttime
167 | */
168 | public void setLasttime(Long lasttime) {
169 | this.lasttime = lasttime;
170 | }
171 |
172 | @Override
173 | public String toString() {
174 | return "Users [uid=" + uid + " , role=" + role + " , tags=" + tags + " , pwd=" + pwd + " , nickname=" + nickname + " , contact=" + contact + " , summary=" + summary + " , ctime=" + ctime + " , lasttime=" + lasttime + " ]";
175 | }
176 | }
177 |
--------------------------------------------------------------------------------
/src/main/java/org/mirrentools/orion/common/WebSocketBase.java:
--------------------------------------------------------------------------------
1 | package org.mirrentools.orion.common;
2 |
3 | import org.json.JSONObject;
4 |
5 | /**
6 | * WebSocket响应协议
7 | *
8 | * @author Mirren
9 | *
10 | */
11 | public class WebSocketBase {
12 |
13 | /** 操作类型,当前默认只有1000 */
14 | public final static int TYPE = 1000;
15 |
16 | /** 状态码-成功 */
17 | protected final static int C200 = 200;
18 | /** 状态码-登录超时 */
19 | protected final static int C401 = 401;
20 | /** 状态码-失败 */
21 | protected final static int C500 = 500;
22 | /** 状态码-操作完成 */
23 | protected final static int C999 = 999;
24 |
25 | /** 消息说明成功 */
26 | protected final static String M200 = "成功!";
27 | /** 消息说明登录超时 */
28 | protected final static String M401 = "登录超时,请重新登录!";
29 | /** 消息说明失败 */
30 | protected final static String M500 = "失败!";
31 | /** 消息说明操作完成 */
32 | protected final static String M999 = "操作完成!";
33 |
34 | /** 协议中的code */
35 | private final static String KEY_CODE = "code";
36 | /** 协议中的type */
37 | private final static String KEY_TYPE = "type";
38 | /** 协议中的data */
39 | private final static String KEY_DATA = "data";
40 | /** 协议中的msg */
41 | private final static String KEY_MSG = "msg";
42 |
43 | /**
44 | * 操作完成
45 | *
46 | * @param code
47 | * @param data
48 | * @return
49 | */
50 | public static String end() {
51 | return result(C999, TYPE, M200, null);
52 | }
53 |
54 | /**
55 | * 成功状态
56 | *
57 | * @param code
58 | * @param data
59 | * @return
60 | */
61 | public static String success(int code, String data) {
62 | return result(code, TYPE, M200, data);
63 | }
64 |
65 | /**
66 | * 成功状态
67 | *
68 | * @param code
69 | * @param msg
70 | * @param data
71 | * @return
72 | */
73 | public static String success(int code, String msg, String data) {
74 | return result(code, TYPE, msg, data);
75 | }
76 |
77 | /**
78 | * 异常或失败
79 | *
80 | * @param msg
81 | * @param data
82 | * @return
83 | */
84 | public static String failed(String msg) {
85 | return result(C500, TYPE, msg, null);
86 | }
87 |
88 | /**
89 | * 异常或失败
90 | *
91 | * @param code
92 | * @return
93 | */
94 | public static String failed(int code) {
95 | return result(code, TYPE, M500, null);
96 | }
97 |
98 | /**
99 | * 异常或失败
100 | *
101 | * @param code
102 | * @param data
103 | * @return
104 | */
105 | public static String failed(int code, String data) {
106 | return result(code, TYPE, M500, data);
107 | }
108 |
109 | /**
110 | * 异常或失败
111 | *
112 | * @param msg
113 | * @param data
114 | * @return
115 | */
116 | public static String failed(String msg, String data) {
117 | return result(C500, TYPE, msg, data);
118 | }
119 |
120 | /**
121 | * 异常或失败
122 | *
123 | * @param code
124 | * @param msg
125 | * @param data
126 | * @return
127 | */
128 | public static String failed(int code, String msg, String data) {
129 | return result(code, TYPE, msg, data);
130 | }
131 |
132 | /**
133 | * 响应信息
134 | *
135 | * @param code
136 | * @param type
137 | * @param state
138 | * @param msg
139 | * @param data
140 | * @return
141 | */
142 | protected static String result(int code, int type, String msg, String data) {
143 | JSONObject result = new JSONObject();
144 | result.put(KEY_CODE, code);
145 | result.put(KEY_TYPE, type);
146 | result.put(KEY_MSG, msg);
147 | result.put(KEY_DATA, data);
148 | return result.toString();
149 | }
150 | }
151 |
--------------------------------------------------------------------------------
/Server-UI/js/chunk-25904293.d8290f8f.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"sources":["webpack:///./src/views/404.vue?0e5c","webpack:///./src/views/404.vue","webpack:///./src/views/404.vue?049e"],"names":["render","_vm","this","_h","$createElement","_c","_self","staticClass","_m","_v","attrs","on","$event","$router","back","staticStyle","staticRenderFns","script","component"],"mappings":"yHAAA,IAAIA,EAAS,WAAa,IAAIC,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACE,YAAY,kBAAkB,CAACN,EAAIO,GAAG,GAAGH,EAAG,MAAM,CAACE,YAAY,OAAO,CAACF,EAAG,MAAM,CAACA,EAAG,IAAI,CAACE,YAAY,aAAa,CAACN,EAAIQ,GAAG,WAAWJ,EAAG,MAAM,CAACA,EAAG,YAAY,CAACK,MAAM,CAAC,KAAO,WAAWC,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAOX,EAAIY,QAAQC,MAAM,MAAM,CAACb,EAAIQ,GAAG,WAAWJ,EAAG,cAAc,CAACU,YAAY,CAAC,cAAc,UAAUL,MAAM,CAAC,GAAK,MAAM,CAACL,EAAG,YAAY,CAACK,MAAM,CAAC,KAAO,YAAY,CAACT,EAAIQ,GAAG,WAAW,IAAI,UACxfO,EAAkB,CAAC,WAAa,IAAIf,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACE,YAAY,OAAO,CAACF,EAAG,MAAM,CAACE,YAAY,UAAUQ,YAAY,CAAC,MAAQ,WAAWL,MAAM,CAAC,GAAK,cAAc,CAACT,EAAIQ,GAAG,OAAOJ,EAAG,MAAM,CAACE,YAAY,UAAUQ,YAAY,CAAC,MAAQ,WAAWL,MAAM,CAAC,GAAK,cAAc,CAACT,EAAIQ,GAAG,OAAOJ,EAAG,MAAM,CAACE,YAAY,UAAUQ,YAAY,CAAC,MAAQ,WAAWL,MAAM,CAAC,GAAK,cAAc,CAACT,EAAIQ,GAAG,W,wBCAxbQ,EAAS,GAMTC,EAAY,eACdD,EACAjB,EACAgB,GACA,EACA,KACA,WACA,MAIa,aAAAE,E,6CClBf,yBAAie,EAAG,G","file":"js/chunk-25904293.d8290f8f.js","sourcesContent":["var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"p404-container\"},[_vm._m(0),_c('div',{staticClass:\"msg\"},[_c('div',[_c('p',{staticClass:\"msg-title\"},[_vm._v(\"内容不存在\")]),_c('div',[_c('el-button',{attrs:{\"type\":\"primary\"},on:{\"click\":function($event){return _vm.$router.back(-1)}}},[_vm._v(\"返回上一页\")]),_c('router-link',{staticStyle:{\"margin-left\":\"0.5rem\"},attrs:{\"to\":\"/\"}},[_c('el-button',{attrs:{\"type\":\"primary\"}},[_vm._v(\"返回首页\")])],1)],1)])])])}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"img\"},[_c('div',{staticClass:\"img-404\",staticStyle:{\"color\":\"#f56c6c\"},attrs:{\"id\":\"img-404-1\"}},[_vm._v(\"4\")]),_c('div',{staticClass:\"img-404\",staticStyle:{\"color\":\"#36b455\"},attrs:{\"id\":\"img-404-2\"}},[_vm._v(\"0\")]),_c('div',{staticClass:\"img-404\",staticStyle:{\"color\":\"#409eff\"},attrs:{\"id\":\"img-404-3\"}},[_vm._v(\"4\")])])}]\n\nexport { render, staticRenderFns }","import { render, staticRenderFns } from \"./404.vue?vue&type=template&id=381e4d4a&scoped=true&\"\nvar script = {}\nimport style0 from \"./404.vue?vue&type=style&index=0&id=381e4d4a&scoped=scoped&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"381e4d4a\",\n null\n \n)\n\nexport default component.exports","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./404.vue?vue&type=style&index=0&id=381e4d4a&scoped=scoped&lang=css&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./404.vue?vue&type=style&index=0&id=381e4d4a&scoped=scoped&lang=css&\""],"sourceRoot":""}
--------------------------------------------------------------------------------
/src/main/java/org/mirrentools/orion/mapper/TagsMapper.java:
--------------------------------------------------------------------------------
1 | package org.mirrentools.orion.mapper;
2 |
3 | import java.util.List;
4 |
5 | import org.apache.ibatis.annotations.Mapper;
6 | import org.apache.ibatis.annotations.Param;
7 |
8 | import org.mirrentools.orion.common.SqlAssist;
9 | import org.mirrentools.orion.common.SqlAssist.LimitResult;
10 | import org.mirrentools.orion.entity.Tags;
11 |
12 | /**
13 | * Tags数据库相关操作
14 | * @author
15 | */
16 | @Mapper
17 | public interface TagsMapper {
18 |
19 | /**
20 | * 获取数据总行数
21 | *
22 | * @param assist 查询帮助类,没有时可以传入null
23 | * @return
24 | */
25 | long getCount(SqlAssist assist);
26 |
27 | /**
28 | * 查询所有数据
29 | *
30 | * @param assist 查询帮助类,没有时可以传入null
31 | * @return
32 | */
33 | List selectAll(SqlAssist assist);
34 |
35 | /**
36 | * 分页获取数据,
37 | *
38 | * @param assist 查询帮助类,默认page=1,rowSize=15
39 | * @return
40 | */
41 | default LimitResult limitAll(SqlAssist assist) {
42 | if (assist == null) {
43 | assist = new SqlAssist();
44 | }
45 | if (assist.getPage() == null || assist.getPage() < 1) {
46 | assist.setPage(1);
47 | }
48 | if (assist.getRowSize() == null || assist.getRowSize() < 1) {
49 | assist.setRowSize(15);
50 | }
51 | if (assist.getPage() == 1) {
52 | assist.setStartRow(0);
53 | } else {
54 | assist.setStartRow((assist.getPage() - 1) * assist.getRowSize());
55 | }
56 | long count = getCount(assist);
57 | LimitResult result = new SqlAssist().new LimitResult(count, assist.getPage(), assist.getRowSize());
58 | if (count == 0) {
59 | return result;
60 | }
61 | List data = selectAll(assist);
62 | result.setData(data);
63 | return result;
64 | }
65 |
66 |
67 | /**
68 | * 通过对象中不为空的属性为条件获取数据,只返回一条结果
69 | *
70 | * @param data
71 | * @return
72 | */
73 | Tags selectSingleByObj(Tags data);
74 |
75 | /**
76 | * 通过对象中不为空的属性作为条件获取数据
77 | *
78 | * @param data
79 | * @return
80 | */
81 | List selectByObj(Tags data);
82 |
83 | /**
84 | * 插入一个对象包括属性值为null的值
85 | *
86 | * @param data
87 | * @return
88 | */
89 | int insertAll(Tags data);
90 |
91 | /**
92 | * 插入一个对象,只插入对象中值不为null的属性
93 | *
94 | * @param data
95 | * @return
96 | */
97 | int insertNotNull(Tags data);
98 |
99 | /**
100 | * 批量添加全部所有字段
101 | *
102 | * @param data
103 | * @return
104 | */
105 | int insertBatch(List data);
106 |
107 | /**
108 | * 插入一个对象,如果该对象不存在就新建如果该对象已经存在就更新
109 | *
110 | * @param data
111 | * @return
112 | */
113 | int replace(Tags data);
114 |
115 |
116 | /**
117 | * 通过查询帮助类删除数据
118 | *
119 | * @param assist 查询帮助类,没有时可以传入null
120 | * @return
121 | */
122 | int deleteByAssist(SqlAssist assist);
123 |
124 |
125 | /**
126 | * 更新一个对象中所有的属性包括null值,条件为SqlAssist查询帮助类
127 | *
128 | * @param data 对象
129 | * @param assist 查询帮助类
130 | * @return
131 | */
132 | int updateAllByAssist(@Param("data") Tags data, @Param("assist") SqlAssist assist);
133 |
134 | /**
135 | * 更新一个对象中属性不为null值,条件为SqlAssist查询帮助类
136 | *
137 | * @param data 对象
138 | * @param assist 查询帮助类
139 | * @return
140 | */
141 | int updateNotNullByAssist(@Param("data") Tags data, @Param("assist") SqlAssist assist);
142 | /**
143 | * 通过id获取数据
144 | *
145 | * @param id
146 | * @return
147 | */
148 | Tags selectById(String id);
149 | /**
150 | * 通过id删除数据
151 | *
152 | * @param id
153 | * @return
154 | */
155 | int deleteById(String id);
156 | /**
157 | * 更新一个对象中所有的属性包括null值,条件为对象中的id
158 | *
159 | * @param data
160 | * @return
161 | */
162 | int updateAllById(Tags data);
163 |
164 | /**
165 | * 更新一个对象中属性不为null值,条件为对象中的id
166 | *
167 | * @param data
168 | * @return
169 | */
170 | int updateNotNullById(Tags data);
171 | }
172 |
--------------------------------------------------------------------------------
/src/main/java/org/mirrentools/orion/mapper/UsersMapper.java:
--------------------------------------------------------------------------------
1 | package org.mirrentools.orion.mapper;
2 |
3 | import java.util.List;
4 |
5 | import org.apache.ibatis.annotations.Mapper;
6 | import org.apache.ibatis.annotations.Param;
7 |
8 | import org.mirrentools.orion.common.SqlAssist;
9 | import org.mirrentools.orion.common.SqlAssist.LimitResult;
10 | import org.mirrentools.orion.entity.Users;
11 |
12 | /**
13 | * Users数据库相关操作
14 | * @author
15 | */
16 | @Mapper
17 | public interface UsersMapper {
18 |
19 | /**
20 | * 获取数据总行数
21 | *
22 | * @param assist 查询帮助类,没有时可以传入null
23 | * @return
24 | */
25 | long getCount(SqlAssist assist);
26 |
27 | /**
28 | * 查询所有数据
29 | *
30 | * @param assist 查询帮助类,没有时可以传入null
31 | * @return
32 | */
33 | List selectAll(SqlAssist assist);
34 |
35 | /**
36 | * 分页获取数据,
37 | *
38 | * @param assist 查询帮助类,默认page=1,rowSize=15
39 | * @return
40 | */
41 | default LimitResult limitAll(SqlAssist assist) {
42 | if (assist == null) {
43 | assist = new SqlAssist();
44 | }
45 | if (assist.getPage() == null || assist.getPage() < 1) {
46 | assist.setPage(1);
47 | }
48 | if (assist.getRowSize() == null || assist.getRowSize() < 1) {
49 | assist.setRowSize(15);
50 | }
51 | if (assist.getPage() == 1) {
52 | assist.setStartRow(0);
53 | } else {
54 | assist.setStartRow((assist.getPage() - 1) * assist.getRowSize());
55 | }
56 | long count = getCount(assist);
57 | LimitResult result = new SqlAssist().new LimitResult(count, assist.getPage(), assist.getRowSize());
58 | if (count == 0) {
59 | return result;
60 | }
61 | List data = selectAll(assist);
62 | result.setData(data);
63 | return result;
64 | }
65 |
66 |
67 | /**
68 | * 通过对象中不为空的属性为条件获取数据,只返回一条结果
69 | *
70 | * @param data
71 | * @return
72 | */
73 | Users selectSingleByObj(Users data);
74 |
75 | /**
76 | * 通过对象中不为空的属性作为条件获取数据
77 | *
78 | * @param data
79 | * @return
80 | */
81 | List selectByObj(Users data);
82 |
83 | /**
84 | * 插入一个对象包括属性值为null的值
85 | *
86 | * @param data
87 | * @return
88 | */
89 | int insertAll(Users data);
90 |
91 | /**
92 | * 插入一个对象,只插入对象中值不为null的属性
93 | *
94 | * @param data
95 | * @return
96 | */
97 | int insertNotNull(Users data);
98 |
99 | /**
100 | * 批量添加全部所有字段
101 | *
102 | * @param data
103 | * @return
104 | */
105 | int insertBatch(List data);
106 |
107 | /**
108 | * 插入一个对象,如果该对象不存在就新建如果该对象已经存在就更新
109 | *
110 | * @param data
111 | * @return
112 | */
113 | int replace(Users data);
114 |
115 |
116 | /**
117 | * 通过查询帮助类删除数据
118 | *
119 | * @param assist 查询帮助类,没有时可以传入null
120 | * @return
121 | */
122 | int deleteByAssist(SqlAssist assist);
123 |
124 |
125 | /**
126 | * 更新一个对象中所有的属性包括null值,条件为SqlAssist查询帮助类
127 | *
128 | * @param data 对象
129 | * @param assist 查询帮助类
130 | * @return
131 | */
132 | int updateAllByAssist(@Param("data") Users data, @Param("assist") SqlAssist assist);
133 |
134 | /**
135 | * 更新一个对象中属性不为null值,条件为SqlAssist查询帮助类
136 | *
137 | * @param data 对象
138 | * @param assist 查询帮助类
139 | * @return
140 | */
141 | int updateNotNullByAssist(@Param("data") Users data, @Param("assist") SqlAssist assist);
142 | /**
143 | * 通过id获取数据
144 | *
145 | * @param id
146 | * @return
147 | */
148 | Users selectById(String id);
149 | /**
150 | * 通过id删除数据
151 | *
152 | * @param id
153 | * @return
154 | */
155 | int deleteById(String id);
156 | /**
157 | * 更新一个对象中所有的属性包括null值,条件为对象中的id
158 | *
159 | * @param data
160 | * @return
161 | */
162 | int updateAllById(Users data);
163 |
164 | /**
165 | * 更新一个对象中属性不为null值,条件为对象中的id
166 | *
167 | * @param data
168 | * @return
169 | */
170 | int updateNotNullById(Users data);
171 | }
172 |
--------------------------------------------------------------------------------
/Server-UI/css/chunk-6951fa7a.11a1d5e3.css:
--------------------------------------------------------------------------------
1 | a[data-v-7fcad5ce]{text-decoration:none;color:#304455}img[data-v-7fcad5ce]{border:none}.body-max-width[data-v-7fcad5ce]{max-width:1240px}.xs-left-sm-rigth[data-v-7fcad5ce]{text-align:right}.mb10px[data-v-7fcad5ce]{margin-bottom:10px}.prem05[data-v-7fcad5ce]{padding:.5rem}.plrrem05[data-v-7fcad5ce]{padding:0 .5rem}.background-color-white[data-v-7fcad5ce]{background-color:#fff}.flexCenter[data-v-7fcad5ce]{display:flex;align-items:center}.api-body[data-v-7fcad5ce]{border:1px solid #3b4151;background-color:#f5f7fa;margin-bottom:50px}.api-body .api-header[data-v-7fcad5ce]{background-color:#3b4151;font-size:1.25rem;color:#fff;padding:.3125rem .625rem}.api-body-get[data-v-7fcad5ce]{background-color:#ebf3fb;border:1px solid #61affe}.api-body .api-header-get[data-v-7fcad5ce]{background-color:#61affe}.api-body-post[data-v-7fcad5ce]{background-color:#e8f6f0;border:1px solid #49cc90}.api-body .api-header-post[data-v-7fcad5ce]{background-color:#49cc90}.api-body-put[data-v-7fcad5ce]{background-color:#fbf1e6;border:1px solid #fca130}.api-body .api-header-put[data-v-7fcad5ce]{background-color:#fca130}.api-body-delete[data-v-7fcad5ce]{background-color:#fae7e7;border:1px solid #f93e3e}.api-body .api-header-delete[data-v-7fcad5ce]{background-color:#f93e3e}.api-body-head[data-v-7fcad5ce]{background-color:#f4e7ff;border:1px solid #9012fe}.api-body .api-header-head[data-v-7fcad5ce]{background-color:#9012fe}.api-body-options[data-v-7fcad5ce]{background-color:#e6eef6;border:1px solid #0d5aa7}.api-body .api-header-options[data-v-7fcad5ce]{background-color:#0d5aa7}.api-body-patch[data-v-7fcad5ce]{background-color:#edfcf9;border:1px solid #50e3c2}.api-body .api-header-patch[data-v-7fcad5ce]{background-color:#50e3c2}.api-body-trace[data-v-7fcad5ce]{background-color:#ffe9e6;border:1px solid #ffa8be}.api-body .api-header-trace[data-v-7fcad5ce]{background-color:#ffa8be}.api-body-connect[data-v-7fcad5ce]{background-color:#e6f6f1;border:1px solid #83bb83}.api-body .api-header-connect[data-v-7fcad5ce]{background-color:#83bb83}.api-body .api-header .api-header-item[data-v-7fcad5ce]{line-height:2.5rem}.api-body .api-body-param-header[data-v-7fcad5ce],.api-body .api-body-response-header[data-v-7fcad5ce],.api-body .api-body-result-header[data-v-7fcad5ce]{padding:.5rem;display:flex;flex-wrap:wrap;align-items:first baseline;justify-content:space-between}.api-body .api-body-response-body[data-v-7fcad5ce]{color:#fff;background-color:#18181a;padding:0 .5rem .5rem .5rem;display:flex}.api-body .api-body-response-body .el-tabs__item[data-v-7fcad5ce]{color:#fff}.api-body .api-body-response-body .el-tabs__item.is-active[data-v-7fcad5ce]{color:#409eff}.api-body .api-body-response-body .el-divider__text[data-v-7fcad5ce]{background-color:#18181a;color:#409eff}.api-body .api-body-response-body .jv-container[data-v-7fcad5ce]{background-color:#18181a}.api-body .api-body-response-body .jv-container.jv-light .jv-item.jv-array[data-v-7fcad5ce],.api-body .api-body-response-body .jv-container.jv-light .jv-item.jv-object[data-v-7fcad5ce],.api-body .api-body-response-body .jv-container.jv-light[data-v-7fcad5ce]{color:#fff}.api-body .api-body-response-body .jv-container.jv-light .jv-item.jv-string[data-v-7fcad5ce]{color:#ff7de9}.api-body .api-body-response-body .jv-container.jv-light .jv-item.jv-boolean[data-v-7fcad5ce]{color:gold}.api-body .api-body-response-body .jv-container.jv-light .jv-key[data-v-7fcad5ce]{color:#409eff}.alink[data-v-7fcad5ce]{background-color:transparent;color:#409eff;text-decoration:none;outline:none;display:inline-block;margin:3px 5px}.alink[data-v-7fcad5ce]:active,.alink[data-v-7fcad5ce]:hover{outline-width:0;opacity:.8}.group-items[data-v-7fcad5ce]{margin-top:5px;padding:0;list-style-type:none}.group-items li[data-v-7fcad5ce]{display:flex;align-items:center;padding:5px 0 3px 5px;border-left:3px solid transparent;cursor:pointer}.group-items li .group-item[data-v-7fcad5ce]{padding-bottom:2px;border-bottom:2px solid transparent}.group-items li:hover .group-item[data-v-7fcad5ce]{color:#409eff;border-bottom:2px solid #409eff}.group-items .current[data-v-7fcad5ce]{color:#409eff;border-left:3px solid #409eff}.td-item[data-v-7fcad5ce]{text-align:right;padding-right:5px}
--------------------------------------------------------------------------------
/Server-UI/css/chunk-b62889f0.0fcd1e95.css:
--------------------------------------------------------------------------------
1 | a[data-v-20c7d437]{text-decoration:none;color:#304455}img[data-v-20c7d437]{border:none}.body-max-width[data-v-20c7d437]{max-width:1240px}.xs-left-sm-rigth[data-v-20c7d437]{text-align:right}.mb10px[data-v-20c7d437]{margin-bottom:10px}.prem05[data-v-20c7d437]{padding:.5rem}.plrrem05[data-v-20c7d437]{padding:0 .5rem}.background-color-white[data-v-20c7d437]{background-color:#fff}.flexCenter[data-v-20c7d437]{display:flex;align-items:center}.api-body[data-v-20c7d437]{border:1px solid #3b4151;background-color:#f5f7fa;margin-bottom:50px}.api-body .api-header[data-v-20c7d437]{background-color:#3b4151;font-size:1.25rem;color:#fff;padding:.3125rem .625rem}.api-body-get[data-v-20c7d437]{background-color:#ebf3fb;border:1px solid #61affe}.api-body .api-header-get[data-v-20c7d437]{background-color:#61affe}.api-body-post[data-v-20c7d437]{background-color:#e8f6f0;border:1px solid #49cc90}.api-body .api-header-post[data-v-20c7d437]{background-color:#49cc90}.api-body-put[data-v-20c7d437]{background-color:#fbf1e6;border:1px solid #fca130}.api-body .api-header-put[data-v-20c7d437]{background-color:#fca130}.api-body-delete[data-v-20c7d437]{background-color:#fae7e7;border:1px solid #f93e3e}.api-body .api-header-delete[data-v-20c7d437]{background-color:#f93e3e}.api-body-head[data-v-20c7d437]{background-color:#f4e7ff;border:1px solid #9012fe}.api-body .api-header-head[data-v-20c7d437]{background-color:#9012fe}.api-body-options[data-v-20c7d437]{background-color:#e6eef6;border:1px solid #0d5aa7}.api-body .api-header-options[data-v-20c7d437]{background-color:#0d5aa7}.api-body-patch[data-v-20c7d437]{background-color:#edfcf9;border:1px solid #50e3c2}.api-body .api-header-patch[data-v-20c7d437]{background-color:#50e3c2}.api-body-trace[data-v-20c7d437]{background-color:#ffe9e6;border:1px solid #ffa8be}.api-body .api-header-trace[data-v-20c7d437]{background-color:#ffa8be}.api-body-connect[data-v-20c7d437]{background-color:#e6f6f1;border:1px solid #83bb83}.api-body .api-header-connect[data-v-20c7d437]{background-color:#83bb83}.api-body .api-header .api-header-item[data-v-20c7d437]{line-height:2.5rem}.api-body .api-body-param-header[data-v-20c7d437],.api-body .api-body-response-header[data-v-20c7d437],.api-body .api-body-result-header[data-v-20c7d437]{padding:.5rem;display:flex;flex-wrap:wrap;align-items:first baseline;justify-content:space-between}.api-body .api-body-response-body[data-v-20c7d437]{color:#fff;background-color:#18181a;padding:0 .5rem .5rem .5rem;display:flex}.api-body .api-body-response-body .el-tabs__item[data-v-20c7d437]{color:#fff}.api-body .api-body-response-body .el-tabs__item.is-active[data-v-20c7d437]{color:#409eff}.api-body .api-body-response-body .el-divider__text[data-v-20c7d437]{background-color:#18181a;color:#409eff}.api-body .api-body-response-body .jv-container[data-v-20c7d437]{background-color:#18181a}.api-body .api-body-response-body .jv-container.jv-light .jv-item.jv-array[data-v-20c7d437],.api-body .api-body-response-body .jv-container.jv-light .jv-item.jv-object[data-v-20c7d437],.api-body .api-body-response-body .jv-container.jv-light[data-v-20c7d437]{color:#fff}.api-body .api-body-response-body .jv-container.jv-light .jv-item.jv-string[data-v-20c7d437]{color:#ff7de9}.api-body .api-body-response-body .jv-container.jv-light .jv-item.jv-boolean[data-v-20c7d437]{color:gold}.api-body .api-body-response-body .jv-container.jv-light .jv-key[data-v-20c7d437]{color:#409eff}.alink[data-v-20c7d437]{background-color:transparent;color:#409eff;text-decoration:none;outline:none;display:inline-block;margin:3px 5px}.alink[data-v-20c7d437]:active,.alink[data-v-20c7d437]:hover{outline-width:0;opacity:.8}.group-items[data-v-20c7d437]{margin-top:5px;padding:0;list-style-type:none}.group-items li[data-v-20c7d437]{display:flex;align-items:center;padding:5px 0 3px 5px;border-left:3px solid transparent;cursor:pointer}.group-items li .group-item[data-v-20c7d437]{padding-bottom:2px;border-bottom:2px solid transparent}.group-items li:hover .group-item[data-v-20c7d437]{color:#409eff;border-bottom:2px solid #409eff}.group-items .current[data-v-20c7d437]{color:#409eff;border-left:3px solid #409eff}.td-item[data-v-20c7d437]{text-align:right;padding-right:5px}
--------------------------------------------------------------------------------
/src/main/java/org/mirrentools/orion/entity/ProjectApiGroup.java:
--------------------------------------------------------------------------------
1 | package org.mirrentools.orion.entity;
2 |
3 | import java.util.List;
4 |
5 | /**
6 | * 接口分组的实体类
7 | *
8 | * @author Mirren
9 | *
10 | */
11 | public class ProjectApiGroup {
12 | /** 分组的id */
13 | private String groupId;
14 | /** 项目的id */
15 | private String projectId;
16 | /** 分组的名字 */
17 | private String name;
18 | /** 分组的简单描述 */
19 | private String summary;
20 | /** 分组的详细描述(支持HTML) */
21 | private String description;
22 | /**
23 | * 分组的拓展文档(JsonObject):
24 | * description(String):附加文档说明
25 | * url(String): 附加文档路径
26 | */
27 | private String externalDocs;
28 | /** 分组的拓展属性String|String(JsonArray)|String(JsonObject) */
29 | private String extensions;
30 | /** 分组的排序 */
31 | private Integer sorts;
32 | /** 该分组下的所有接口 */
33 | private List apis;
34 |
35 | /**
36 | * 实例化
37 | */
38 | public ProjectApiGroup() {
39 | super();
40 | }
41 |
42 | /**
43 | * 获取groupId
44 | *
45 | * @return
46 | */
47 | public String getGroupId() {
48 | return groupId;
49 | }
50 |
51 | /**
52 | * 设置groupId
53 | *
54 | * @param groupId
55 | */
56 | public void setGroupId(String groupId) {
57 | this.groupId = groupId;
58 | }
59 |
60 | /**
61 | * 获取projectId
62 | *
63 | * @return
64 | */
65 | public String getProjectId() {
66 | return projectId;
67 | }
68 |
69 | /**
70 | * 设置projectId
71 | *
72 | * @param projectId
73 | */
74 | public void setProjectId(String projectId) {
75 | this.projectId = projectId;
76 | }
77 |
78 | /**
79 | * 获取name
80 | *
81 | * @return
82 | */
83 | public String getName() {
84 | return name;
85 | }
86 |
87 | /**
88 | * 设置name
89 | *
90 | * @param name
91 | */
92 | public void setName(String name) {
93 | this.name = name;
94 | }
95 |
96 | /**
97 | * 获取summary
98 | *
99 | * @return
100 | */
101 | public String getSummary() {
102 | return summary;
103 | }
104 |
105 | /**
106 | * 设置summary
107 | *
108 | * @param summary
109 | */
110 | public void setSummary(String summary) {
111 | this.summary = summary;
112 | }
113 |
114 | /**
115 | * 获取description
116 | *
117 | * @return
118 | */
119 | public String getDescription() {
120 | return description;
121 | }
122 |
123 | /**
124 | * 设置description
125 | *
126 | * @param description
127 | */
128 | public void setDescription(String description) {
129 | this.description = description;
130 | }
131 |
132 | /**
133 | * 获取externalDocs
134 | *
135 | * @return
136 | */
137 | public String getExternalDocs() {
138 | return externalDocs;
139 | }
140 |
141 | /**
142 | * 设置externalDocs
143 | *
144 | * @param externalDocs
145 | */
146 | public void setExternalDocs(String externalDocs) {
147 | this.externalDocs = externalDocs;
148 | }
149 |
150 | /**
151 | * 获取extensions
152 | *
153 | * @return
154 | */
155 | public String getExtensions() {
156 | return extensions;
157 | }
158 |
159 | /**
160 | * 设置extensions
161 | *
162 | * @param extensions
163 | */
164 | public void setExtensions(String extensions) {
165 | this.extensions = extensions;
166 | }
167 |
168 | public Integer getSorts() {
169 | return sorts;
170 | }
171 |
172 | public void setSorts(Integer sorts) {
173 | this.sorts = sorts;
174 | }
175 |
176 | public List getApis() {
177 | return apis;
178 | }
179 |
180 | public void setApis(List apis) {
181 | this.apis = apis;
182 | }
183 |
184 | @Override
185 | public String toString() {
186 | return "ProjectApiGroup [groupId=" + groupId + ", projectId=" + projectId + ", name=" + name + ", summary="
187 | + summary + ", description=" + description + ", externalDocs=" + externalDocs + ", extensions=" + extensions
188 | + ", sorts=" + sorts + ", apis=" + apis + "]";
189 | }
190 |
191 | }
192 |
--------------------------------------------------------------------------------
/src/main/java/org/mirrentools/orion/controller/ImportWebSocketServer.java:
--------------------------------------------------------------------------------
1 | package org.mirrentools.orion.controller;
2 |
3 | import java.io.IOException;
4 | import java.util.Map;
5 | import java.util.concurrent.ConcurrentHashMap;
6 |
7 | import javax.websocket.OnClose;
8 | import javax.websocket.OnError;
9 | import javax.websocket.OnMessage;
10 | import javax.websocket.OnOpen;
11 | import javax.websocket.Session;
12 | import javax.websocket.server.PathParam;
13 | import javax.websocket.server.ServerEndpoint;
14 |
15 | import org.apache.logging.log4j.LogManager;
16 | import org.apache.logging.log4j.Logger;
17 | import org.json.JSONObject;
18 | import org.mirrentools.orion.common.LoginRole;
19 | import org.mirrentools.orion.common.LoginSession;
20 | import org.mirrentools.orion.common.LoginSessionStore;
21 | import org.mirrentools.orion.common.WebSocket;
22 | import org.mirrentools.orion.service.ProjectService;
23 | import org.springframework.context.ApplicationContext;
24 | import org.springframework.stereotype.Component;
25 |
26 | /**
27 | * 用于导入API的WebSocket
28 | *
29 | * @author Mirren
30 | *
31 | */
32 | @ServerEndpoint("/private/server/ws/project/fromJson/{sessionId}")
33 | @Component
34 | public class ImportWebSocketServer {
35 | private static final Logger LOG = LogManager.getLogger(ImportWebSocketServer.class);
36 | /** Spring的上下文 */
37 | private static ApplicationContext applicationContext;
38 | /** 项目服务接口 */
39 | private ProjectService proService;
40 | /**
41 | * 存放所有在线的客户端
42 | */
43 | private static Map clients = new ConcurrentHashMap<>();
44 |
45 | public static void setApplicationContext(ApplicationContext applicationContext) {
46 | ImportWebSocketServer.applicationContext = applicationContext;
47 | }
48 |
49 | @OnOpen
50 | public void onOpen(Session session, @PathParam(value = "sessionId") String sessionId) {
51 | LoginSession login = LoginSessionStore.get(sessionId);
52 | if (login == null || login.getUid() == null || LoginRole.CLIENT == login.getRole()) {
53 | session.getAsyncRemote().sendText(WebSocket.failed401());
54 | try {
55 | session.close();
56 | } catch (IOException e) {
57 | LOG.error("执行打开Websocket->关闭会话-->失败:", e);
58 | }
59 | return;
60 | }
61 | this.proService = applicationContext.getBean(ProjectService.class);
62 | session.setMaxTextMessageBufferSize(10 * 1024 * 1024);
63 | clients.put(sessionId, session);
64 | }
65 |
66 | /**
67 | * 客户端关闭
68 | *
69 | * @param session session
70 | */
71 | @OnClose
72 | public void onClose(Session session, @PathParam(value = "sessionId") String sessionId) {
73 | clients.remove(sessionId);
74 | }
75 |
76 | /**
77 | * 发生错误
78 | *
79 | * @param throwable e
80 | */
81 | @OnError
82 | public void onError(Throwable throwable, @PathParam(value = "sessionId") String sessionId) {
83 | Session session = clients.get(sessionId);
84 | try {
85 | session.close();
86 | } catch (IOException e) {
87 | LOG.error("执行Websocket发生异常->关闭会话-->失败:", e);
88 | }
89 | LOG.error("执行Websocket发生异常:", throwable);
90 | }
91 |
92 | /**
93 | * 收到客户端发来消息
94 | *
95 | * @param message 消息对象
96 | */
97 | @OnMessage
98 | public void onMessage(String message, @PathParam(value = "sessionId") String sessionId) {
99 | LoginSession login = LoginSessionStore.get(sessionId);
100 | Session session = clients.get(sessionId);
101 | if (session == null) {
102 | return;
103 | }
104 | JSONObject msg = new JSONObject(message);
105 | if (msg.getInt("type") != WebSocket.TYPE) {
106 | session.getAsyncRemote().sendText(WebSocket.failed(WebSocket.UNRECOGNIZED));
107 | try {
108 | session.close();
109 | } catch (IOException e) {
110 | }
111 | return;
112 | }
113 | proService.saveProjectfromJsonWebSocket(login, msg.getString("data"), session);
114 | try {
115 | session.close();
116 | } catch (IOException e) {
117 | LOG.error("执行Websocket消息事件->关闭会话-->失败:", e);
118 | }
119 | }
120 | }
121 |
--------------------------------------------------------------------------------
/src/main/java/org/mirrentools/orion/mapper/ProjectShareMapper.java:
--------------------------------------------------------------------------------
1 | package org.mirrentools.orion.mapper;
2 |
3 | import java.util.List;
4 |
5 | import org.apache.ibatis.annotations.Mapper;
6 | import org.apache.ibatis.annotations.Param;
7 |
8 | import org.mirrentools.orion.common.SqlAssist;
9 | import org.mirrentools.orion.common.SqlAssist.LimitResult;
10 | import org.mirrentools.orion.entity.ProjectShare;
11 |
12 | /**
13 | * ProjectShare数据库相关操作
14 | * @author
15 | */
16 | @Mapper
17 | public interface ProjectShareMapper {
18 |
19 | /**
20 | * 获取数据总行数
21 | *
22 | * @param assist 查询帮助类,没有时可以传入null
23 | * @return
24 | */
25 | long getCount(SqlAssist assist);
26 |
27 | /**
28 | * 查询所有数据
29 | *
30 | * @param assist 查询帮助类,没有时可以传入null
31 | * @return
32 | */
33 | List selectAll(SqlAssist assist);
34 |
35 | /**
36 | * 分页获取数据,
37 | *
38 | * @param assist 查询帮助类,默认page=1,rowSize=15
39 | * @return
40 | */
41 | default LimitResult limitAll(SqlAssist assist) {
42 | if (assist == null) {
43 | assist = new SqlAssist();
44 | }
45 | if (assist.getPage() == null || assist.getPage() < 1) {
46 | assist.setPage(1);
47 | }
48 | if (assist.getRowSize() == null || assist.getRowSize() < 1) {
49 | assist.setRowSize(15);
50 | }
51 | if (assist.getPage() == 1) {
52 | assist.setStartRow(0);
53 | } else {
54 | assist.setStartRow((assist.getPage() - 1) * assist.getRowSize());
55 | }
56 | long count = getCount(assist);
57 | LimitResult result = new SqlAssist().new LimitResult(count, assist.getPage(), assist.getRowSize());
58 | if (count == 0) {
59 | return result;
60 | }
61 | List data = selectAll(assist);
62 | result.setData(data);
63 | return result;
64 | }
65 |
66 |
67 | /**
68 | * 通过对象中不为空的属性为条件获取数据,只返回一条结果
69 | *
70 | * @param data
71 | * @return
72 | */
73 | ProjectShare selectSingleByObj(ProjectShare data);
74 |
75 | /**
76 | * 通过对象中不为空的属性作为条件获取数据
77 | *
78 | * @param data
79 | * @return
80 | */
81 | List selectByObj(ProjectShare data);
82 |
83 | /**
84 | * 插入一个对象包括属性值为null的值
85 | *
86 | * @param data
87 | * @return
88 | */
89 | int insertAll(ProjectShare data);
90 |
91 | /**
92 | * 插入一个对象,只插入对象中值不为null的属性
93 | *
94 | * @param data
95 | * @return
96 | */
97 | int insertNotNull(ProjectShare data);
98 |
99 | /**
100 | * 批量添加全部所有字段
101 | *
102 | * @param data
103 | * @return
104 | */
105 | int insertBatch(List data);
106 |
107 | /**
108 | * 插入一个对象,如果该对象不存在就新建如果该对象已经存在就更新
109 | *
110 | * @param data
111 | * @return
112 | */
113 | int replace(ProjectShare data);
114 |
115 |
116 | /**
117 | * 通过查询帮助类删除数据
118 | *
119 | * @param assist 查询帮助类,没有时可以传入null
120 | * @return
121 | */
122 | int deleteByAssist(SqlAssist assist);
123 |
124 |
125 | /**
126 | * 更新一个对象中所有的属性包括null值,条件为SqlAssist查询帮助类
127 | *
128 | * @param data 对象
129 | * @param assist 查询帮助类
130 | * @return
131 | */
132 | int updateAllByAssist(@Param("data") ProjectShare data, @Param("assist") SqlAssist assist);
133 |
134 | /**
135 | * 更新一个对象中属性不为null值,条件为SqlAssist查询帮助类
136 | *
137 | * @param data 对象
138 | * @param assist 查询帮助类
139 | * @return
140 | */
141 | int updateNotNullByAssist(@Param("data") ProjectShare data, @Param("assist") SqlAssist assist);
142 | /**
143 | * 通过id获取数据
144 | *
145 | * @param id
146 | * @return
147 | */
148 | ProjectShare selectById(String id);
149 | /**
150 | * 通过id删除数据
151 | *
152 | * @param id
153 | * @return
154 | */
155 | int deleteById(String id);
156 | /**
157 | * 更新一个对象中所有的属性包括null值,条件为对象中的id
158 | *
159 | * @param data
160 | * @return
161 | */
162 | int updateAllById(ProjectShare data);
163 |
164 | /**
165 | * 更新一个对象中属性不为null值,条件为对象中的id
166 | *
167 | * @param data
168 | * @return
169 | */
170 | int updateNotNullById(ProjectShare data);
171 | }
172 |
--------------------------------------------------------------------------------
/src/main/java/org/mirrentools/orion/mapper/ProjectApiTemplateMapper.java:
--------------------------------------------------------------------------------
1 | package org.mirrentools.orion.mapper;
2 |
3 | import java.util.List;
4 |
5 | import org.apache.ibatis.annotations.Mapper;
6 | import org.apache.ibatis.annotations.Param;
7 |
8 | import org.mirrentools.orion.common.SqlAssist;
9 | import org.mirrentools.orion.common.SqlAssist.LimitResult;
10 | import org.mirrentools.orion.entity.ProjectApiTemplate;
11 |
12 | /**
13 | * ProjectApiTemplate数据库相关操作
14 | * @author
15 | */
16 | @Mapper
17 | public interface ProjectApiTemplateMapper {
18 |
19 | /**
20 | * 获取数据总行数
21 | *
22 | * @param assist 查询帮助类,没有时可以传入null
23 | * @return
24 | */
25 | long getCount(SqlAssist assist);
26 |
27 | /**
28 | * 查询所有数据
29 | *
30 | * @param assist 查询帮助类,没有时可以传入null
31 | * @return
32 | */
33 | List selectAll(SqlAssist assist);
34 |
35 | /**
36 | * 分页获取数据,
37 | *
38 | * @param assist 查询帮助类,默认page=1,rowSize=15
39 | * @return
40 | */
41 | default LimitResult limitAll(SqlAssist assist) {
42 | if (assist == null) {
43 | assist = new SqlAssist();
44 | }
45 | if (assist.getPage() == null || assist.getPage() < 1) {
46 | assist.setPage(1);
47 | }
48 | if (assist.getRowSize() == null || assist.getRowSize() < 1) {
49 | assist.setRowSize(15);
50 | }
51 | if (assist.getPage() == 1) {
52 | assist.setStartRow(0);
53 | } else {
54 | assist.setStartRow((assist.getPage() - 1) * assist.getRowSize());
55 | }
56 | long count = getCount(assist);
57 | LimitResult result = new SqlAssist().new LimitResult(count, assist.getPage(), assist.getRowSize());
58 | if (count == 0) {
59 | return result;
60 | }
61 | List data = selectAll(assist);
62 | result.setData(data);
63 | return result;
64 | }
65 |
66 |
67 | /**
68 | * 通过对象中不为空的属性为条件获取数据,只返回一条结果
69 | *
70 | * @param data
71 | * @return
72 | */
73 | ProjectApiTemplate selectSingleByObj(ProjectApiTemplate data);
74 |
75 | /**
76 | * 通过对象中不为空的属性作为条件获取数据
77 | *
78 | * @param data
79 | * @return
80 | */
81 | List selectByObj(ProjectApiTemplate data);
82 |
83 | /**
84 | * 插入一个对象包括属性值为null的值
85 | *
86 | * @param data
87 | * @return
88 | */
89 | int insertAll(ProjectApiTemplate data);
90 |
91 | /**
92 | * 插入一个对象,只插入对象中值不为null的属性
93 | *
94 | * @param data
95 | * @return
96 | */
97 | int insertNotNull(ProjectApiTemplate data);
98 |
99 | /**
100 | * 批量添加全部所有字段
101 | *
102 | * @param data
103 | * @return
104 | */
105 | int insertBatch(List data);
106 |
107 | /**
108 | * 插入一个对象,如果该对象不存在就新建如果该对象已经存在就更新
109 | *
110 | * @param data
111 | * @return
112 | */
113 | int replace(ProjectApiTemplate data);
114 |
115 |
116 | /**
117 | * 通过查询帮助类删除数据
118 | *
119 | * @param assist 查询帮助类,没有时可以传入null
120 | * @return
121 | */
122 | int deleteByAssist(SqlAssist assist);
123 |
124 |
125 | /**
126 | * 更新一个对象中所有的属性包括null值,条件为SqlAssist查询帮助类
127 | *
128 | * @param data 对象
129 | * @param assist 查询帮助类
130 | * @return
131 | */
132 | int updateAllByAssist(@Param("data") ProjectApiTemplate data, @Param("assist") SqlAssist assist);
133 |
134 | /**
135 | * 更新一个对象中属性不为null值,条件为SqlAssist查询帮助类
136 | *
137 | * @param data 对象
138 | * @param assist 查询帮助类
139 | * @return
140 | */
141 | int updateNotNullByAssist(@Param("data") ProjectApiTemplate data, @Param("assist") SqlAssist assist);
142 | /**
143 | * 通过id获取数据
144 | *
145 | * @param id
146 | * @return
147 | */
148 | ProjectApiTemplate selectById(String id);
149 | /**
150 | * 通过id删除数据
151 | *
152 | * @param id
153 | * @return
154 | */
155 | int deleteById(String id);
156 | /**
157 | * 更新一个对象中所有的属性包括null值,条件为对象中的id
158 | *
159 | * @param data
160 | * @return
161 | */
162 | int updateAllById(ProjectApiTemplate data);
163 |
164 | /**
165 | * 更新一个对象中属性不为null值,条件为对象中的id
166 | *
167 | * @param data
168 | * @return
169 | */
170 | int updateNotNullById(ProjectApiTemplate data);
171 | }
172 |
--------------------------------------------------------------------------------
/src/main/java/org/mirrentools/orion/common/MD5Util.java:
--------------------------------------------------------------------------------
1 | package org.mirrentools.orion.common;
2 |
3 | import java.security.MessageDigest;
4 | /**
5 | * MD5工具
6 | *
7 | * @author Mirren
8 | *
9 | */
10 | public class MD5Util {
11 | /** 小写十六进制 */
12 | private static final char[] DIGITS_LOWER = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
13 | /** 大写十六进制 */
14 | private static final char[] DIGITS_UPPER = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
15 |
16 | /**
17 | * 将字符串编码为小写MD5
18 | *
19 | * @param value
20 | * 字符串
21 | * @return
22 | */
23 | public static String encode(String value) {
24 | try {
25 | MessageDigest md = MessageDigest.getInstance("MD5");
26 | byte[] digest = md.digest(value.getBytes());
27 | return new String(encodeHex(digest, DIGITS_LOWER));
28 | } catch (Exception e) {
29 | e.printStackTrace();
30 | return null;
31 | }
32 | }
33 |
34 | /**
35 | * 将字符串编码为大写字的MD5
36 | *
37 | * @param value
38 | * @return
39 | */
40 | public static String encodeUpperCase(String value) {
41 | try {
42 | MessageDigest md = MessageDigest.getInstance("MD5");
43 | byte[] digest = md.digest(value.getBytes());
44 | return new String(encodeHex(digest, DIGITS_UPPER));
45 | } catch (Exception e) {
46 | e.printStackTrace();
47 | return null;
48 | }
49 | }
50 | /**
51 | * 将字符串按次数编码为小写MD5
52 | *
53 | * @param value
54 | * 字符串
55 | * @param count
56 | * 次数
57 | * @return
58 | */
59 | public static String encode(String value, int count) {
60 | String result = encode(value);
61 | for (int i = 1; i < count; i++) {
62 | result = encode(result);
63 | }
64 | return result;
65 | }
66 | /**
67 | * 将字符串按次数编码为大写MD5
68 | *
69 | * @param value
70 | * 字符串
71 | * @param count
72 | * 次数
73 | * @return
74 | */
75 | public static String encodeUpperCase(String value, int count) {
76 | String result = encode(value);
77 | for (int i = 1; i < count; i++) {
78 | result = encodeUpperCase(result);
79 | }
80 | return result;
81 | }
82 |
83 | /**
84 | * 对比小写MD5字符串是否相等
85 | *
86 | * @param str
87 | * 字符串
88 | * @param md5Code
89 | * MD5码
90 | * @return
91 | */
92 | public static boolean compare(String str, String md5Code) {
93 | if (encode(str).equals(md5Code)) {
94 | return true;
95 | }
96 | return false;
97 | }
98 | /**
99 | * 对比小写MD5字符串是否相等
100 | *
101 | * @param str
102 | * 字符串
103 | * @param encodeCount
104 | * 将字符串加密几次
105 | * @param md5Code
106 | * MD5码
107 | * @return
108 | */
109 | public static boolean compare(String str, int encodeCount, String md5Code) {
110 | if (encode(str, encodeCount).equals(md5Code)) {
111 | return true;
112 | }
113 | return false;
114 | }
115 | /**
116 | * 对比大写MD5字符串是否相等
117 | *
118 | * @param str
119 | * 字符串
120 | * @param md5Code
121 | * MD5码
122 | * @return
123 | */
124 | public static boolean compareUpperCase(String str, String md5Code) {
125 | if (encodeUpperCase(str).equals(md5Code)) {
126 | return true;
127 | }
128 | return false;
129 | }
130 | /**
131 | * 对比大写MD5字符串是否相等
132 | *
133 | * @param str
134 | * 字符串
135 | * @param encodeCount
136 | * 将字符串加密几次
137 | * @param md5Code
138 | * MD5码
139 | * @return
140 | */
141 | public static boolean compareUpperCase(String str, int encodeCount, String md5Code) {
142 | if (encodeUpperCase(str, encodeCount).equals(md5Code)) {
143 | return true;
144 | }
145 | return false;
146 | }
147 |
148 | /**
149 | * 字节数组转换十六进制
150 | *
151 | * @param data
152 | * @param toDigits
153 | * @return
154 | */
155 | protected static char[] encodeHex(final byte[] data, final char[] toDigits) {
156 | final int l = data.length;
157 | final char[] out = new char[l << 1];
158 | for (int i = 0, j = 0; i < l; i++) {
159 | out[j++] = toDigits[(0xF0 & data[i]) >>> 4];
160 | out[j++] = toDigits[0x0F & data[i]];
161 | }
162 | return out;
163 | }
164 |
165 | }
166 |
--------------------------------------------------------------------------------
/Client-UI/css/app.af54f0fc.css:
--------------------------------------------------------------------------------
1 | .oam_tree_node_default[data-v-ac06bb60]{word-wrap:break-word;padding:5px;margin-left:42px;border-left:3px solid transparent}.oam_tree_node_default[data-v-ac06bb60]:hover{color:#1890ff}.slide-fade-enter-active[data-v-110bca00]{transition:all .2s ease}.slide-fade-leave-active[data-v-110bca00]{transition:all .2s cubic-bezier(1,.5,.8,1)}.slide-fade-enter[data-v-110bca00],.slide-fade-leave-to[data-v-110bca00]{opacity:0}.oam_tree[data-v-110bca00]{max-width:100%;min-height:70%;cursor:pointer}.oam_tree_group_icon[data-v-110bca00]{width:30px;height:100%;display:flex;align-items:center;justify-content:center;transform:rotate(0deg);transition:transform .3s ease-in-out}.oam_tree_group_icon_expand[data-v-110bca00]{transform:rotate(90deg)}.oam_tree_group_title[data-v-110bca00]{padding:5px;padding-left:3px;cursor:pointer;border-left:3px solid transparent;width:100%}.oam_tree_group_title[data-v-110bca00]:hover{color:#1890ff}.oam_tree_select[data-v-110bca00]{background-color:#e6f7ff;border-left:3px solid #1890ff}a{text-decoration:none;color:#304455}img{border:none}.body-max-width{max-width:1240px}.xs-left-sm-rigth{text-align:right}.mb10px{margin-bottom:10px}.prem05{padding:.5rem}.plrrem05{padding:0 .5rem}.background-color-white{background-color:#fff}.flexCenter{display:flex;align-items:center}.api-body{border:1px solid #3b4151;background-color:#f5f7fa;margin-bottom:50px}.api-body .api-header{background-color:#3b4151;font-size:1.25rem;color:#fff;padding:.3125rem .625rem}.api-body-get{background-color:#ebf3fb;border:1px solid #61affe}.api-body .api-header-get{background-color:#61affe}.api-body-post{background-color:#e8f6f0;border:1px solid #49cc90}.api-body .api-header-post{background-color:#49cc90}.api-body-put{background-color:#fbf1e6;border:1px solid #fca130}.api-body .api-header-put{background-color:#fca130}.api-body-delete{background-color:#fae7e7;border:1px solid #f93e3e}.api-body .api-header-delete{background-color:#f93e3e}.api-body-head{background-color:#f4e7ff;border:1px solid #9012fe}.api-body .api-header-head{background-color:#9012fe}.api-body-options{background-color:#e6eef6;border:1px solid #0d5aa7}.api-body .api-header-options{background-color:#0d5aa7}.api-body-patch{background-color:#edfcf9;border:1px solid #50e3c2}.api-body .api-header-patch{background-color:#50e3c2}.api-body-trace{background-color:#ffe9e6;border:1px solid #ffa8be}.api-body .api-header-trace{background-color:#ffa8be}.api-body-connect{background-color:#e6f6f1;border:1px solid #83bb83}.api-body .api-header-connect{background-color:#83bb83}.api-body .api-header .api-header-item{line-height:2.5rem}.api-body .api-body-param-header,.api-body .api-body-response-header,.api-body .api-body-result-header{padding:.5rem;display:flex;flex-wrap:wrap;align-items:first baseline;justify-content:space-between}.api-body .api-body-response-body{color:#fff;background-color:#18181a;padding:0 .5rem .5rem .5rem;display:flex}.api-body .api-body-response-body .el-tabs__item{color:#fff}.api-body .api-body-response-body .el-tabs__item.is-active{color:#409eff}.api-body .api-body-response-body .el-divider__text{background-color:#18181a;color:#409eff}.api-body .api-body-response-body .jv-container{background-color:#18181a}.api-body .api-body-response-body .jv-container.jv-light,.api-body .api-body-response-body .jv-container.jv-light .jv-item.jv-array,.api-body .api-body-response-body .jv-container.jv-light .jv-item.jv-object{color:#fff}.api-body .api-body-response-body .jv-container.jv-light .jv-item.jv-string{color:#ff7de9}.api-body .api-body-response-body .jv-container.jv-light .jv-item.jv-boolean{color:gold}.api-body .api-body-response-body .jv-container.jv-light .jv-key{color:#409eff}.clearBtn[data-v-3fef6540]{color:#909399;margin-right:10px;font-size:80%;cursor:pointer}.clearBtn[data-v-3fef6540]:hover{color:red}.el-main{padding:14px!important}.el-table__indent{padding-left:0!important}@media screen and (max-width:768px){#header #collapse{display:block!important}#header #project-title{white-space:normal!important}.mini-screen-mide{display:none}.mini-screen-show{display:flex!important}}.mini-screen-show{display:none;align-items:center;margin-left:.3125rem}#app{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;color:#2c3e50}#header{position:fixed;top:0;width:100%;box-shadow:0 0 1px rgba(0,0,0,.25);transition:background-color .3s ease-in-out;background-color:#fff;height:60px;z-index:10;display:flex;align-items:center}#header .nav-item{padding-left:20px}#header .nav-item-color{color:#2c3e50}#header #collapse{display:none;padding-left:10px;font-size:30px}#header #project-title{width:380px;padding-left:8px;display:flex;cursor:pointer;align-items:center;white-space:nowrap}
--------------------------------------------------------------------------------
/Orion-API-Manager-Docs/dist/client/css/app.af54f0fc.css:
--------------------------------------------------------------------------------
1 | .oam_tree_node_default[data-v-ac06bb60]{word-wrap:break-word;padding:5px;margin-left:42px;border-left:3px solid transparent}.oam_tree_node_default[data-v-ac06bb60]:hover{color:#1890ff}.slide-fade-enter-active[data-v-110bca00]{transition:all .2s ease}.slide-fade-leave-active[data-v-110bca00]{transition:all .2s cubic-bezier(1,.5,.8,1)}.slide-fade-enter[data-v-110bca00],.slide-fade-leave-to[data-v-110bca00]{opacity:0}.oam_tree[data-v-110bca00]{max-width:100%;min-height:70%;cursor:pointer}.oam_tree_group_icon[data-v-110bca00]{width:30px;height:100%;display:flex;align-items:center;justify-content:center;transform:rotate(0deg);transition:transform .3s ease-in-out}.oam_tree_group_icon_expand[data-v-110bca00]{transform:rotate(90deg)}.oam_tree_group_title[data-v-110bca00]{padding:5px;padding-left:3px;cursor:pointer;border-left:3px solid transparent;width:100%}.oam_tree_group_title[data-v-110bca00]:hover{color:#1890ff}.oam_tree_select[data-v-110bca00]{background-color:#e6f7ff;border-left:3px solid #1890ff}a{text-decoration:none;color:#304455}img{border:none}.body-max-width{max-width:1240px}.xs-left-sm-rigth{text-align:right}.mb10px{margin-bottom:10px}.prem05{padding:.5rem}.plrrem05{padding:0 .5rem}.background-color-white{background-color:#fff}.flexCenter{display:flex;align-items:center}.api-body{border:1px solid #3b4151;background-color:#f5f7fa;margin-bottom:50px}.api-body .api-header{background-color:#3b4151;font-size:1.25rem;color:#fff;padding:.3125rem .625rem}.api-body-get{background-color:#ebf3fb;border:1px solid #61affe}.api-body .api-header-get{background-color:#61affe}.api-body-post{background-color:#e8f6f0;border:1px solid #49cc90}.api-body .api-header-post{background-color:#49cc90}.api-body-put{background-color:#fbf1e6;border:1px solid #fca130}.api-body .api-header-put{background-color:#fca130}.api-body-delete{background-color:#fae7e7;border:1px solid #f93e3e}.api-body .api-header-delete{background-color:#f93e3e}.api-body-head{background-color:#f4e7ff;border:1px solid #9012fe}.api-body .api-header-head{background-color:#9012fe}.api-body-options{background-color:#e6eef6;border:1px solid #0d5aa7}.api-body .api-header-options{background-color:#0d5aa7}.api-body-patch{background-color:#edfcf9;border:1px solid #50e3c2}.api-body .api-header-patch{background-color:#50e3c2}.api-body-trace{background-color:#ffe9e6;border:1px solid #ffa8be}.api-body .api-header-trace{background-color:#ffa8be}.api-body-connect{background-color:#e6f6f1;border:1px solid #83bb83}.api-body .api-header-connect{background-color:#83bb83}.api-body .api-header .api-header-item{line-height:2.5rem}.api-body .api-body-param-header,.api-body .api-body-response-header,.api-body .api-body-result-header{padding:.5rem;display:flex;flex-wrap:wrap;align-items:first baseline;justify-content:space-between}.api-body .api-body-response-body{color:#fff;background-color:#18181a;padding:0 .5rem .5rem .5rem;display:flex}.api-body .api-body-response-body .el-tabs__item{color:#fff}.api-body .api-body-response-body .el-tabs__item.is-active{color:#409eff}.api-body .api-body-response-body .el-divider__text{background-color:#18181a;color:#409eff}.api-body .api-body-response-body .jv-container{background-color:#18181a}.api-body .api-body-response-body .jv-container.jv-light,.api-body .api-body-response-body .jv-container.jv-light .jv-item.jv-array,.api-body .api-body-response-body .jv-container.jv-light .jv-item.jv-object{color:#fff}.api-body .api-body-response-body .jv-container.jv-light .jv-item.jv-string{color:#ff7de9}.api-body .api-body-response-body .jv-container.jv-light .jv-item.jv-boolean{color:gold}.api-body .api-body-response-body .jv-container.jv-light .jv-key{color:#409eff}.clearBtn[data-v-3fef6540]{color:#909399;margin-right:10px;font-size:80%;cursor:pointer}.clearBtn[data-v-3fef6540]:hover{color:red}.el-main{padding:14px!important}.el-table__indent{padding-left:0!important}@media screen and (max-width:768px){#header #collapse{display:block!important}#header #project-title{white-space:normal!important}.mini-screen-mide{display:none}.mini-screen-show{display:flex!important}}.mini-screen-show{display:none;align-items:center;margin-left:.3125rem}#app{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;color:#2c3e50}#header{position:fixed;top:0;width:100%;box-shadow:0 0 1px rgba(0,0,0,.25);transition:background-color .3s ease-in-out;background-color:#fff;height:60px;z-index:10;display:flex;align-items:center}#header .nav-item{padding-left:20px}#header .nav-item-color{color:#2c3e50}#header #collapse{display:none;padding-left:10px;font-size:30px}#header #project-title{width:380px;padding-left:8px;display:flex;cursor:pointer;align-items:center;white-space:nowrap}
--------------------------------------------------------------------------------
/Orion-API-Manager-Docs/docs/.vuepress/public/client/css/app.af54f0fc.css:
--------------------------------------------------------------------------------
1 | .oam_tree_node_default[data-v-ac06bb60]{word-wrap:break-word;padding:5px;margin-left:42px;border-left:3px solid transparent}.oam_tree_node_default[data-v-ac06bb60]:hover{color:#1890ff}.slide-fade-enter-active[data-v-110bca00]{transition:all .2s ease}.slide-fade-leave-active[data-v-110bca00]{transition:all .2s cubic-bezier(1,.5,.8,1)}.slide-fade-enter[data-v-110bca00],.slide-fade-leave-to[data-v-110bca00]{opacity:0}.oam_tree[data-v-110bca00]{max-width:100%;min-height:70%;cursor:pointer}.oam_tree_group_icon[data-v-110bca00]{width:30px;height:100%;display:flex;align-items:center;justify-content:center;transform:rotate(0deg);transition:transform .3s ease-in-out}.oam_tree_group_icon_expand[data-v-110bca00]{transform:rotate(90deg)}.oam_tree_group_title[data-v-110bca00]{padding:5px;padding-left:3px;cursor:pointer;border-left:3px solid transparent;width:100%}.oam_tree_group_title[data-v-110bca00]:hover{color:#1890ff}.oam_tree_select[data-v-110bca00]{background-color:#e6f7ff;border-left:3px solid #1890ff}a{text-decoration:none;color:#304455}img{border:none}.body-max-width{max-width:1240px}.xs-left-sm-rigth{text-align:right}.mb10px{margin-bottom:10px}.prem05{padding:.5rem}.plrrem05{padding:0 .5rem}.background-color-white{background-color:#fff}.flexCenter{display:flex;align-items:center}.api-body{border:1px solid #3b4151;background-color:#f5f7fa;margin-bottom:50px}.api-body .api-header{background-color:#3b4151;font-size:1.25rem;color:#fff;padding:.3125rem .625rem}.api-body-get{background-color:#ebf3fb;border:1px solid #61affe}.api-body .api-header-get{background-color:#61affe}.api-body-post{background-color:#e8f6f0;border:1px solid #49cc90}.api-body .api-header-post{background-color:#49cc90}.api-body-put{background-color:#fbf1e6;border:1px solid #fca130}.api-body .api-header-put{background-color:#fca130}.api-body-delete{background-color:#fae7e7;border:1px solid #f93e3e}.api-body .api-header-delete{background-color:#f93e3e}.api-body-head{background-color:#f4e7ff;border:1px solid #9012fe}.api-body .api-header-head{background-color:#9012fe}.api-body-options{background-color:#e6eef6;border:1px solid #0d5aa7}.api-body .api-header-options{background-color:#0d5aa7}.api-body-patch{background-color:#edfcf9;border:1px solid #50e3c2}.api-body .api-header-patch{background-color:#50e3c2}.api-body-trace{background-color:#ffe9e6;border:1px solid #ffa8be}.api-body .api-header-trace{background-color:#ffa8be}.api-body-connect{background-color:#e6f6f1;border:1px solid #83bb83}.api-body .api-header-connect{background-color:#83bb83}.api-body .api-header .api-header-item{line-height:2.5rem}.api-body .api-body-param-header,.api-body .api-body-response-header,.api-body .api-body-result-header{padding:.5rem;display:flex;flex-wrap:wrap;align-items:first baseline;justify-content:space-between}.api-body .api-body-response-body{color:#fff;background-color:#18181a;padding:0 .5rem .5rem .5rem;display:flex}.api-body .api-body-response-body .el-tabs__item{color:#fff}.api-body .api-body-response-body .el-tabs__item.is-active{color:#409eff}.api-body .api-body-response-body .el-divider__text{background-color:#18181a;color:#409eff}.api-body .api-body-response-body .jv-container{background-color:#18181a}.api-body .api-body-response-body .jv-container.jv-light,.api-body .api-body-response-body .jv-container.jv-light .jv-item.jv-array,.api-body .api-body-response-body .jv-container.jv-light .jv-item.jv-object{color:#fff}.api-body .api-body-response-body .jv-container.jv-light .jv-item.jv-string{color:#ff7de9}.api-body .api-body-response-body .jv-container.jv-light .jv-item.jv-boolean{color:gold}.api-body .api-body-response-body .jv-container.jv-light .jv-key{color:#409eff}.clearBtn[data-v-3fef6540]{color:#909399;margin-right:10px;font-size:80%;cursor:pointer}.clearBtn[data-v-3fef6540]:hover{color:red}.el-main{padding:14px!important}.el-table__indent{padding-left:0!important}@media screen and (max-width:768px){#header #collapse{display:block!important}#header #project-title{white-space:normal!important}.mini-screen-mide{display:none}.mini-screen-show{display:flex!important}}.mini-screen-show{display:none;align-items:center;margin-left:.3125rem}#app{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;color:#2c3e50}#header{position:fixed;top:0;width:100%;box-shadow:0 0 1px rgba(0,0,0,.25);transition:background-color .3s ease-in-out;background-color:#fff;height:60px;z-index:10;display:flex;align-items:center}#header .nav-item{padding-left:20px}#header .nav-item-color{color:#2c3e50}#header #collapse{display:none;padding-left:10px;font-size:30px}#header #project-title{width:380px;padding-left:8px;display:flex;cursor:pointer;align-items:center;white-space:nowrap}
--------------------------------------------------------------------------------
/src/main/java/org/mirrentools/orion/mapper/ProjectApiMapper.java:
--------------------------------------------------------------------------------
1 | package org.mirrentools.orion.mapper;
2 |
3 | import java.util.List;
4 |
5 | import org.apache.ibatis.annotations.Mapper;
6 | import org.apache.ibatis.annotations.Param;
7 | import org.apache.ibatis.annotations.Update;
8 | import org.mirrentools.orion.common.ColumnsAPI;
9 | import org.mirrentools.orion.common.SqlAssist;
10 | import org.mirrentools.orion.common.SqlAssist.LimitResult;
11 | import org.mirrentools.orion.entity.ProjectApi;
12 |
13 | /**
14 | * ProjectApi数据库相关操作
15 | *
16 | * @author
17 | */
18 | @Mapper
19 | public interface ProjectApiMapper {
20 |
21 | /**
22 | * 获取数据总行数
23 | *
24 | * @param assist 查询帮助类,没有时可以传入null
25 | * @return
26 | */
27 | long getCount(SqlAssist assist);
28 |
29 | /**
30 | * 查询所有数据
31 | *
32 | * @param assist 查询帮助类,没有时可以传入null
33 | * @return
34 | */
35 | List selectAll(SqlAssist assist);
36 |
37 | /**
38 | * 分页获取数据,
39 | *
40 | * @param assist 查询帮助类,默认page=1,rowSize=15
41 | * @return
42 | */
43 | default LimitResult limitAll(SqlAssist assist) {
44 | if (assist == null) {
45 | assist = new SqlAssist();
46 | }
47 | if (assist.getPage() == null || assist.getPage() < 1) {
48 | assist.setPage(1);
49 | }
50 | if (assist.getRowSize() == null || assist.getRowSize() < 1) {
51 | assist.setRowSize(15);
52 | }
53 | if (assist.getPage() == 1) {
54 | assist.setStartRow(0);
55 | } else {
56 | assist.setStartRow((assist.getPage() - 1) * assist.getRowSize());
57 | }
58 | long count = getCount(assist);
59 | LimitResult result = new SqlAssist().new LimitResult(count, assist.getPage(),
60 | assist.getRowSize());
61 | if (count == 0) {
62 | return result;
63 | }
64 | List data = selectAll(assist);
65 | result.setData(data);
66 | return result;
67 | }
68 |
69 | /**
70 | * 通过对象中不为空的属性为条件获取数据,只返回一条结果
71 | *
72 | * @param data
73 | * @return
74 | */
75 | ProjectApi selectSingleByObj(ProjectApi data);
76 |
77 | /**
78 | * 通过对象中不为空的属性作为条件获取数据
79 | *
80 | * @param data
81 | * @return
82 | */
83 | List selectByObj(ProjectApi data);
84 |
85 | /**
86 | * 插入一个对象包括属性值为null的值
87 | *
88 | * @param data
89 | * @return
90 | */
91 | int insertAll(ProjectApi data);
92 |
93 | /**
94 | * 插入一个对象,只插入对象中值不为null的属性
95 | *
96 | * @param data
97 | * @return
98 | */
99 | int insertNotNull(ProjectApi data);
100 |
101 | /**
102 | * 批量添加全部所有字段
103 | *
104 | * @param data
105 | * @return
106 | */
107 | int insertBatch(List data);
108 |
109 | /**
110 | * 插入一个对象,如果该对象不存在就新建如果该对象已经存在就更新
111 | *
112 | * @param data
113 | * @return
114 | */
115 | int replace(ProjectApi data);
116 |
117 | /**
118 | * 通过查询帮助类删除数据
119 | *
120 | * @param assist 查询帮助类,没有时可以传入null
121 | * @return
122 | */
123 | int deleteByAssist(SqlAssist assist);
124 |
125 | /**
126 | * 更新一个对象中所有的属性包括null值,条件为SqlAssist查询帮助类
127 | *
128 | * @param data 对象
129 | * @param assist 查询帮助类
130 | * @return
131 | */
132 | int updateAllByAssist(@Param("data") ProjectApi data, @Param("assist") SqlAssist assist);
133 |
134 | /**
135 | * 更新一个对象中属性不为null值,条件为SqlAssist查询帮助类
136 | *
137 | * @param data 对象
138 | * @param assist 查询帮助类
139 | * @return
140 | */
141 | int updateNotNullByAssist(@Param("data") ProjectApi data, @Param("assist") SqlAssist assist);
142 |
143 | /**
144 | * 通过id获取数据
145 | *
146 | * @param id
147 | * @return
148 | */
149 | ProjectApi selectById(String id);
150 |
151 | /**
152 | * 通过id删除数据
153 | *
154 | * @param id
155 | * @return
156 | */
157 | int deleteById(String id);
158 |
159 | /**
160 | * 更新一个对象中所有的属性包括null值,条件为对象中的id
161 | *
162 | * @param data
163 | * @return
164 | */
165 | int updateAllById(ProjectApi data);
166 |
167 | /**
168 | * 更新一个对象中属性不为null值,条件为对象中的id
169 | *
170 | * @param data
171 | * @return
172 | */
173 | int updateNotNullById(ProjectApi data);
174 |
175 | /**
176 | * 将接口上移动
177 | *
178 | * @param aid 接口的id
179 | * @return
180 | */
181 | @Update("UPDATE " + ColumnsAPI.TABLE_NAME
182 | + " SET " + ColumnsAPI.SORTS + "=" + ColumnsAPI.SORTS + "-1 "
183 | + " WHERE "+ ColumnsAPI.API_ID + "=#{aid}")
184 | int updateProjectApiMoveUp(@Param("aid") String aid);
185 |
186 | /**
187 | * 将接口下移动
188 | *
189 | * @param aid 接口的id
190 | * @return
191 | */
192 | @Update("UPDATE " + ColumnsAPI.TABLE_NAME
193 | + " SET " + ColumnsAPI.SORTS + "=" + ColumnsAPI.SORTS + "+1 "
194 | + " WHERE "+ ColumnsAPI.API_ID + "=#{aid}")
195 | int updateProjectApiMoveDown(@Param("aid") String aid);
196 | }
197 |
--------------------------------------------------------------------------------
/.mvn/wrapper/MavenWrapperDownloader.java:
--------------------------------------------------------------------------------
1 | /*
2 | Licensed to the Apache Software Foundation (ASF) under one
3 | or more contributor license agreements. See the NOTICE file
4 | distributed with this work for additional information
5 | regarding copyright ownership. The ASF licenses this file
6 | to you under the Apache License, Version 2.0 (the
7 | "License"); you may not use this file except in compliance
8 | with the License. You may obtain a copy of the License at
9 |
10 | http://www.apache.org/licenses/LICENSE-2.0
11 |
12 | Unless required by applicable law or agreed to in writing,
13 | software distributed under the License is distributed on an
14 | "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15 | KIND, either express or implied. See the License for the
16 | specific language governing permissions and limitations
17 | under the License.
18 | */
19 |
20 | import java.io.File;
21 | import java.io.FileInputStream;
22 | import java.io.FileOutputStream;
23 | import java.io.IOException;
24 | import java.net.URL;
25 | import java.nio.channels.Channels;
26 | import java.nio.channels.ReadableByteChannel;
27 | import java.util.Properties;
28 |
29 | public class MavenWrapperDownloader {
30 |
31 | /**
32 | * Default URL to download the maven-wrapper.jar from, if no 'downloadUrl' is provided.
33 | */
34 | private static final String DEFAULT_DOWNLOAD_URL =
35 | "https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.4.2/maven-wrapper-0.4.2.jar";
36 |
37 | /**
38 | * Path to the maven-wrapper.properties file, which might contain a downloadUrl property to
39 | * use instead of the default one.
40 | */
41 | private static final String MAVEN_WRAPPER_PROPERTIES_PATH =
42 | ".mvn/wrapper/maven-wrapper.properties";
43 |
44 | /**
45 | * Path where the maven-wrapper.jar will be saved to.
46 | */
47 | private static final String MAVEN_WRAPPER_JAR_PATH =
48 | ".mvn/wrapper/maven-wrapper.jar";
49 |
50 | /**
51 | * Name of the property which should be used to override the default download url for the wrapper.
52 | */
53 | private static final String PROPERTY_NAME_WRAPPER_URL = "wrapperUrl";
54 |
55 | public static void main(String args[]) {
56 | System.out.println("- Downloader started");
57 | File baseDirectory = new File(args[0]);
58 | System.out.println("- Using base directory: " + baseDirectory.getAbsolutePath());
59 |
60 | // If the maven-wrapper.properties exists, read it and check if it contains a custom
61 | // wrapperUrl parameter.
62 | File mavenWrapperPropertyFile = new File(baseDirectory, MAVEN_WRAPPER_PROPERTIES_PATH);
63 | String url = DEFAULT_DOWNLOAD_URL;
64 | if(mavenWrapperPropertyFile.exists()) {
65 | FileInputStream mavenWrapperPropertyFileInputStream = null;
66 | try {
67 | mavenWrapperPropertyFileInputStream = new FileInputStream(mavenWrapperPropertyFile);
68 | Properties mavenWrapperProperties = new Properties();
69 | mavenWrapperProperties.load(mavenWrapperPropertyFileInputStream);
70 | url = mavenWrapperProperties.getProperty(PROPERTY_NAME_WRAPPER_URL, url);
71 | } catch (IOException e) {
72 | System.out.println("- ERROR loading '" + MAVEN_WRAPPER_PROPERTIES_PATH + "'");
73 | } finally {
74 | try {
75 | if(mavenWrapperPropertyFileInputStream != null) {
76 | mavenWrapperPropertyFileInputStream.close();
77 | }
78 | } catch (IOException e) {
79 | // Ignore ...
80 | }
81 | }
82 | }
83 | System.out.println("- Downloading from: : " + url);
84 |
85 | File outputFile = new File(baseDirectory.getAbsolutePath(), MAVEN_WRAPPER_JAR_PATH);
86 | if(!outputFile.getParentFile().exists()) {
87 | if(!outputFile.getParentFile().mkdirs()) {
88 | System.out.println(
89 | "- ERROR creating output direcrory '" + outputFile.getParentFile().getAbsolutePath() + "'");
90 | }
91 | }
92 | System.out.println("- Downloading to: " + outputFile.getAbsolutePath());
93 | try {
94 | downloadFileFromURL(url, outputFile);
95 | System.out.println("Done");
96 | System.exit(0);
97 | } catch (Throwable e) {
98 | System.out.println("- Error downloading");
99 | e.printStackTrace();
100 | System.exit(1);
101 | }
102 | }
103 |
104 | private static void downloadFileFromURL(String urlString, File destination) throws Exception {
105 | URL website = new URL(urlString);
106 | ReadableByteChannel rbc;
107 | rbc = Channels.newChannel(website.openStream());
108 | FileOutputStream fos = new FileOutputStream(destination);
109 | fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);
110 | fos.close();
111 | rbc.close();
112 | }
113 |
114 | }
115 |
--------------------------------------------------------------------------------
/src/main/java/org/mirrentools/orion/mapper/ProjectApiGroupMapper.java:
--------------------------------------------------------------------------------
1 | package org.mirrentools.orion.mapper;
2 |
3 | import java.util.List;
4 |
5 | import org.apache.ibatis.annotations.Mapper;
6 | import org.apache.ibatis.annotations.Param;
7 | import org.apache.ibatis.annotations.Update;
8 | import org.mirrentools.orion.common.ColumnsApiGroup;
9 | import org.mirrentools.orion.common.SqlAssist;
10 | import org.mirrentools.orion.common.SqlAssist.LimitResult;
11 | import org.mirrentools.orion.entity.ProjectApiGroup;
12 |
13 | /**
14 | * ProjectApiGroup数据库相关操作
15 | *
16 | * @author
17 | */
18 | @Mapper
19 | public interface ProjectApiGroupMapper {
20 |
21 | /**
22 | * 获取数据总行数
23 | *
24 | * @param assist
25 | * 查询帮助类,没有时可以传入null
26 | * @return
27 | */
28 | long getCount(SqlAssist assist);
29 |
30 | /**
31 | * 查询所有数据
32 | *
33 | * @param assist
34 | * 查询帮助类,没有时可以传入null
35 | * @return
36 | */
37 | List selectAll(SqlAssist assist);
38 |
39 | /**
40 | * 分页获取数据,
41 | *
42 | * @param assist
43 | * 查询帮助类,默认page=1,rowSize=15
44 | * @return
45 | */
46 | default LimitResult limitAll(SqlAssist assist) {
47 | if (assist == null) {
48 | assist = new SqlAssist();
49 | }
50 | if (assist.getPage() == null || assist.getPage() < 1) {
51 | assist.setPage(1);
52 | }
53 | if (assist.getRowSize() == null || assist.getRowSize() < 1) {
54 | assist.setRowSize(15);
55 | }
56 | if (assist.getPage() == 1) {
57 | assist.setStartRow(0);
58 | } else {
59 | assist.setStartRow((assist.getPage() - 1) * assist.getRowSize());
60 | }
61 | long count = getCount(assist);
62 | LimitResult result = new SqlAssist().new LimitResult(count, assist.getPage(), assist.getRowSize());
63 | if (count == 0) {
64 | return result;
65 | }
66 | List data = selectAll(assist);
67 | result.setData(data);
68 | return result;
69 | }
70 |
71 | /**
72 | * 通过对象中不为空的属性为条件获取数据,只返回一条结果
73 | *
74 | * @param data
75 | * @return
76 | */
77 | ProjectApiGroup selectSingleByObj(ProjectApiGroup data);
78 |
79 | /**
80 | * 通过对象中不为空的属性作为条件获取数据
81 | *
82 | * @param data
83 | * @return
84 | */
85 | List selectByObj(ProjectApiGroup data);
86 |
87 | /**
88 | * 插入一个对象包括属性值为null的值
89 | *
90 | * @param data
91 | * @return
92 | */
93 | int insertAll(ProjectApiGroup data);
94 |
95 | /**
96 | * 插入一个对象,只插入对象中值不为null的属性
97 | *
98 | * @param data
99 | * @return
100 | */
101 | int insertNotNull(ProjectApiGroup data);
102 |
103 | /**
104 | * 批量添加全部所有字段
105 | *
106 | * @param data
107 | * @return
108 | */
109 | int insertBatch(List data);
110 |
111 | /**
112 | * 插入一个对象,如果该对象不存在就新建如果该对象已经存在就更新
113 | *
114 | * @param data
115 | * @return
116 | */
117 | int replace(ProjectApiGroup data);
118 |
119 | /**
120 | * 通过查询帮助类删除数据
121 | *
122 | * @param assist
123 | * 查询帮助类,没有时可以传入null
124 | * @return
125 | */
126 | int deleteByAssist(SqlAssist assist);
127 |
128 | /**
129 | * 更新一个对象中所有的属性包括null值,条件为SqlAssist查询帮助类
130 | *
131 | * @param data
132 | * 对象
133 | * @param assist
134 | * 查询帮助类
135 | * @return
136 | */
137 | int updateAllByAssist(@Param("data") ProjectApiGroup data, @Param("assist") SqlAssist assist);
138 |
139 | /**
140 | * 更新一个对象中属性不为null值,条件为SqlAssist查询帮助类
141 | *
142 | * @param data
143 | * 对象
144 | * @param assist
145 | * 查询帮助类
146 | * @return
147 | */
148 | int updateNotNullByAssist(@Param("data") ProjectApiGroup data, @Param("assist") SqlAssist assist);
149 | /**
150 | * 通过id获取数据
151 | *
152 | * @param id
153 | * @return
154 | */
155 | ProjectApiGroup selectById(String id);
156 | /**
157 | * 通过id删除数据
158 | *
159 | * @param id
160 | * @return
161 | */
162 | int deleteById(String id);
163 | /**
164 | * 更新一个对象中所有的属性包括null值,条件为对象中的id
165 | *
166 | * @param data
167 | * @return
168 | */
169 | int updateAllById(ProjectApiGroup data);
170 |
171 | /**
172 | * 更新一个对象中属性不为null值,条件为对象中的id
173 | *
174 | * @param data
175 | * @return
176 | */
177 | int updateNotNullById(ProjectApiGroup data);
178 | /**
179 | * 将接口分组上移动
180 | *
181 | * @param gid
182 | * 分组的id
183 | * @return
184 | */
185 | @Update("UPDATE " + ColumnsApiGroup.TABLE_NAME
186 | + " SET " + ColumnsApiGroup.SORTS + "=" + ColumnsApiGroup.SORTS + "-1 "
187 | + " WHERE "+ ColumnsApiGroup.GROUP_ID + "=#{gid}")
188 | int updateProjectApiGroupMoveUp(@Param("gid") String gid);
189 |
190 | /**
191 | * 将接口分组下移动
192 | *
193 | * @param gid
194 | * 分组的id
195 | * @return
196 | */
197 | @Update("UPDATE " + ColumnsApiGroup.TABLE_NAME
198 | + " SET " + ColumnsApiGroup.SORTS + "=" + ColumnsApiGroup.SORTS + "+1 "
199 | + " WHERE "+ ColumnsApiGroup.GROUP_ID + "=#{gid}")
200 | int updateProjectApiGroupMoveDown(@Param("gid") String gid);
201 | }
202 |
--------------------------------------------------------------------------------
/src/main/java/org/mirrentools/orion/mapper/ProjectMapper.java:
--------------------------------------------------------------------------------
1 | package org.mirrentools.orion.mapper;
2 |
3 | import java.util.List;
4 |
5 | import org.apache.ibatis.annotations.Mapper;
6 | import org.apache.ibatis.annotations.Param;
7 | import org.apache.ibatis.annotations.Select;
8 | import org.apache.ibatis.annotations.Update;
9 | import org.mirrentools.orion.common.ColumnsAPI;
10 | import org.mirrentools.orion.common.ColumnsApiGroup;
11 | import org.mirrentools.orion.common.ColumnsProject;
12 | import org.mirrentools.orion.common.SqlAssist;
13 | import org.mirrentools.orion.common.SqlAssist.LimitResult;
14 | import org.mirrentools.orion.entity.Project;
15 |
16 | /**
17 | * Project数据库相关操作
18 | *
19 | * @author
20 | */
21 | @Mapper
22 | public interface ProjectMapper {
23 |
24 | /**
25 | * 获取数据总行数
26 | *
27 | * @param assist 查询帮助类,没有时可以传入null
28 | * @return
29 | */
30 | long getCount(SqlAssist assist);
31 |
32 | /**
33 | * 查询所有数据
34 | *
35 | * @param assist 查询帮助类,没有时可以传入null
36 | * @return
37 | */
38 | List selectAll(SqlAssist assist);
39 |
40 | /**
41 | * 分页获取数据,
42 | *
43 | * @param assist 查询帮助类,默认page=1,rowSize=15
44 | * @return
45 | */
46 | default LimitResult limitAll(SqlAssist assist) {
47 | if (assist == null) {
48 | assist = new SqlAssist();
49 | }
50 | if (assist.getPage() == null || assist.getPage() < 1) {
51 | assist.setPage(1);
52 | }
53 | if (assist.getRowSize() == null || assist.getRowSize() < 1) {
54 | assist.setRowSize(15);
55 | }
56 | if (assist.getPage() == 1) {
57 | assist.setStartRow(0);
58 | } else {
59 | assist.setStartRow((assist.getPage() - 1) * assist.getRowSize());
60 | }
61 | long count = getCount(assist);
62 | LimitResult result = new SqlAssist().new LimitResult(count, assist.getPage(),
63 | assist.getRowSize());
64 | if (count == 0) {
65 | return result;
66 | }
67 | List data = selectAll(assist);
68 | result.setData(data);
69 | return result;
70 | }
71 |
72 | /**
73 | * 通过对象中不为空的属性为条件获取数据,只返回一条结果
74 | *
75 | * @param data
76 | * @return
77 | */
78 | Project selectSingleByObj(Project data);
79 |
80 | /**
81 | * 通过对象中不为空的属性作为条件获取数据
82 | *
83 | * @param data
84 | * @return
85 | */
86 | List selectByObj(Project data);
87 |
88 | /**
89 | * 插入一个对象包括属性值为null的值
90 | *
91 | * @param data
92 | * @return
93 | */
94 | int insertAll(Project data);
95 |
96 | /**
97 | * 插入一个对象,只插入对象中值不为null的属性
98 | *
99 | * @param data
100 | * @return
101 | */
102 | int insertNotNull(Project data);
103 |
104 | /**
105 | * 批量添加全部所有字段
106 | *
107 | * @param data
108 | * @return
109 | */
110 | int insertBatch(List data);
111 |
112 | /**
113 | * 插入一个对象,如果该对象不存在就新建如果该对象已经存在就更新
114 | *
115 | * @param data
116 | * @return
117 | */
118 | int replace(Project data);
119 |
120 | /**
121 | * 通过查询帮助类删除数据
122 | *
123 | * @param assist 查询帮助类,没有时可以传入null
124 | * @return
125 | */
126 | int deleteByAssist(SqlAssist assist);
127 |
128 | /**
129 | * 更新一个对象中所有的属性包括null值,条件为SqlAssist查询帮助类
130 | *
131 | * @param data 对象
132 | * @param assist 查询帮助类
133 | * @return
134 | */
135 | int updateAllByAssist(@Param("data") Project data, @Param("assist") SqlAssist assist);
136 |
137 | /**
138 | * 更新一个对象中属性不为null值,条件为SqlAssist查询帮助类
139 | *
140 | * @param data 对象
141 | * @param assist 查询帮助类
142 | * @return
143 | */
144 | int updateNotNullByAssist(@Param("data") Project data, @Param("assist") SqlAssist assist);
145 |
146 | /**
147 | * 通过id获取数据
148 | *
149 | * @param id
150 | * @return
151 | */
152 | Project selectById(String id);
153 |
154 | /**
155 | * 通过id删除数据
156 | *
157 | * @param id
158 | * @return
159 | */
160 | int deleteById(String id);
161 |
162 | /**
163 | * 更新一个对象中所有的属性包括null值,条件为对象中的id
164 | *
165 | * @param data
166 | * @return
167 | */
168 | int updateAllById(Project data);
169 |
170 | /**
171 | * 更新一个对象中属性不为null值,条件为对象中的id
172 | *
173 | * @param data
174 | * @return
175 | */
176 | int updateNotNullById(Project data);
177 |
178 | /**
179 | * 通过api的id获取项目的负责人uid
180 | *
181 | * @param apiId
182 | * @return
183 | */
184 | @Select(" select p."+ColumnsProject.KEY+" from "+ColumnsProject.TABLE_NAME+" p"
185 | + " inner join "+ColumnsApiGroup.TABLE_NAME+" g on p." + ColumnsProject.KEY + "=g."+ ColumnsApiGroup.PROJECT_ID
186 | + " inner join "+ColumnsAPI.TABLE_NAME+" a on a." + ColumnsAPI.GROUP_ID + "=g."+ ColumnsApiGroup.GROUP_ID
187 | + " where a."+ColumnsAPI.API_ID+"=#{apiId}")
188 | Project getProjectOwnerByApiId(@Param("apiId") String apiId);
189 |
190 | /**
191 | * 将项目上移动
192 | *
193 | * @param pid 项目的id
194 | * @return
195 | */
196 | @Update("UPDATE "+ColumnsProject.TABLE_NAME+" SET "+ColumnsProject.SORTS+"="+ColumnsProject.SORTS+"-1 WHERE "+ColumnsProject.KEY+"=#{pid}")
197 | int updateProjectMoveUp(@Param("pid") String pid);
198 |
199 | /**
200 | * 将项目下移动
201 | *
202 | * @param pid 项目的id
203 | * @return
204 | */
205 | @Update("UPDATE "+ColumnsProject.TABLE_NAME+" SET "+ColumnsProject.SORTS+"="+ColumnsProject.SORTS+"+1 WHERE "+ColumnsProject.KEY+"=#{pid}")
206 | int updateProjectMoveDown(@Param("pid") String pid);
207 | }
208 |
--------------------------------------------------------------------------------
/pom.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 | 4.0.0
6 |
7 | org.springframework.boot
8 | spring-boot-starter-parent
9 | 2.3.3.RELEASE
10 |
11 | org.mirrentools.orion
12 | Orion-API-Manager
13 | 1.0.1
14 | Orion-API-Manager
15 | Orion API Document Management
16 |
17 |
18 | UTF-8
19 | UTF-8
20 | 0.60.0
21 | 1.8
22 |
23 |
24 |
25 |
26 |
27 | org.springframework.boot
28 | spring-boot-starter-jdbc
29 |
30 |
31 | org.springframework.boot
32 | spring-boot-starter-web
33 |
34 |
35 | org.springframework.boot
36 | spring-boot-starter-websocket
37 |
38 |
39 | org.springframework.boot
40 | spring-boot-devtools
41 |
42 |
43 | org.springframework.boot
44 | spring-boot-starter-logging
45 |
46 |
47 | org.springframework.boot
48 | spring-boot-starter-test
49 | test
50 |
51 |
52 | org.mybatis.spring.boot
53 | mybatis-spring-boot-starter
54 | 2.1.3
55 |
56 |
57 | com.alibaba
58 | druid-spring-boot-starter
59 | 1.1.9
60 |
61 |
62 |
63 |
64 | org.xerial
65 | sqlite-jdbc
66 | 3.8.11.2
67 |
68 |
69 | mysql
70 | mysql-connector-java
71 | 8.0.16
72 |
73 |
74 | io.swagger.parser.v3
75 | swagger-parser
76 | 2.0.24
77 |
78 |
79 | org.json
80 | json
81 | 20180813
82 |
83 |
84 |
85 | com.vladsch.flexmark
86 | flexmark
87 | ${flexmark.version}
88 |
89 |
90 | com.vladsch.flexmark
91 | flexmark-util
92 | ${flexmark.version}
93 |
94 |
95 | com.vladsch.flexmark
96 | flexmark-ext-tables
97 | ${flexmark.version}
98 |
99 |
100 |
101 | org.apache.httpcomponents
102 | httpclient
103 |
104 |
105 | org.mirrentools
106 | screw-driver
107 | 1.2.3
108 | test
109 |
110 |
111 |
112 |
113 |
114 | ${project.artifactId}
115 |
116 |
117 | org.springframework.boot
118 | spring-boot-maven-plugin
119 |
120 | ${project.build.directory}/Orion/
121 |
122 |
123 |
124 | org.apache.maven.plugins
125 | maven-resources-plugin
126 |
127 |
128 | woff
129 | woff2
130 | eot
131 | ttf
132 | svg
133 |
134 |
135 |
136 | src/main/resources/
137 |
138 |
139 | ${basedir}/resources
140 | ${project.build.directory}/Orion/
141 |
142 |
143 | ${basedir}/Server-UI
144 | true
145 | ${project.build.directory}/Orion/Server-UI
146 |
147 |
148 | ${basedir}/Client-UI
149 | true
150 | ${project.build.directory}/Orion/Client-UI
151 |
152 |
153 |
154 |
155 |
156 |
157 |
158 |
159 |
--------------------------------------------------------------------------------
/src/main/java/org/mirrentools/orion/common/ResultCode.java:
--------------------------------------------------------------------------------
1 | package org.mirrentools.orion.common;
2 |
3 | /**
4 | * 响应状态码
5 | *
6 | * @author Mirren
7 | *
8 | */
9 | public enum ResultCode {
10 | /** 状态码:200, "success", "成功" */
11 | DEFAULT(200, "Succeeded", "成功"),
12 | /** 状态码:200, "success", "成功" */
13 | R200(200, "Succeeded", "成功"),
14 | /**
15 | * 状态码:202,
16 | * "The operation is complete, but you need to check whether it is successful",
17 | *
18 | * "操作完成,但需要你检查是否成功"
19 | */
20 | R202(202, "The operation is complete, but you need to check whether it is successful", "操作完成,但需要你检查是否成功"),
21 | /**
22 | * 状态码:401,
23 | * "Login timeout, please login again",
24 | * "登录超时,请重新登录!"
25 | */
26 | R401(401, "Login timeout, please login again", "登录超时,请重新登录"),
27 | /**
28 | * 状态码:402,
29 | * "Login failed, invalid account or password",
30 | * "登录失败,账号或密码错误"
31 | */
32 | R402(402, "Login failed, invalid account or password", "登录失败,账号或密码错误"),
33 | /**
34 | * 状态码:403,
35 | * "Illegal operation or no permission",
36 | * "非法操作或者没有权限"
37 | */
38 | R403(403, "Illegal operation or no permission,if you have the permission, please login again",
39 | "非法操作或者没有权限,如果你有该权限请重新登录"),
40 | /**
41 | * 状态码:404,
42 | * "The resource does not exist",
43 | * "资源不存在"
44 | */
45 | R404(404, "The resource does not exist", "资源不存在"),
46 | /**
47 | * 状态码:405,
48 | * "View password is incorrect or invalid, please re-enter",
49 | * "查看密码错误,或查看密码无效,请重新输入"
50 | */
51 | R405(405, "View password is incorrect or invalid, please re-enter", "查看密码错误,或查看密码无效,请重新输入"),
52 | /**
53 | * 状态码:412,
54 | * "Please fill in all required parameters",
55 | * "请按要求填写所有必填项"
56 | */
57 | R412(412, "Please fill in all required parameters", "请按要求填写所有必填项"),
58 | /**
59 | * 状态码:413,
60 | * "Invalid request parameter",
61 | * "无效的请求参数"
62 | */
63 | R413(413, "Invalid request parameter", "无效的请求参数"),
64 | /** 状态码:500, "failed", "失败" */
65 | R500(500, "Failed", "失败"),
66 | /**
67 | * 状态码:555,
68 | * "failed. Please try again later. Please check the console for more
69 | * information",
70 | * "请稍后重试,更多信息请查看控制台"
71 | */
72 | R555(555, "Failed. Please try again later. Please check the console for more information", "请稍后重试,更多信息请查看控制台"),
73 | /**
74 | * 状态码:1303,
75 | * "Failed to get the Captcha. Please try again later",
76 | * "获取验证码失败,请稍后重试"
77 | */
78 | R1303(1303, "Failed to get the Captcha. Please try again later", "获取验证码失败,请稍后重试"),
79 | /**
80 | * 状态码:1304,
81 | * "The Captcha is incorrect, please select again",
82 | * "验证码错误,请重新选择"
83 | */
84 | R1304(1304, "The Captcha is incorrect, please select again", "验证码错误,请重新选择"),
85 | /**
86 | * 状态码:1001,
87 | * "The user's account already exists!",
88 | * "该用户的账号已存在!"
89 | */
90 | R1001(1001, "The user's account already exists!", "该用户的账号已存在!"),
91 | /**
92 | * 状态码:1002,
93 | * "Ordinary administrator cannot create user with administrator role!",
94 | * "普通管理员无法创建管理员角色的用户!"
95 | */
96 | R1002(1002, "Ordinary administrator cannot create user with administrator role!", "普通管理员无法创建管理员角色的用户!"),
97 | /**
98 | * 状态码:1003,
99 | * "Failed. invalid role",
100 | * "失败,无效的角色"
101 | */
102 | R1003(1003, "Failed. invalid role", "失败,无效的角色"),
103 | /**
104 | * 状态码:1004,
105 | * "Login failed, account password and Captcha cannot be empty!",
106 | * "登录失败,账号密码与验证码不能为空!"
107 | */
108 | R1004(1004, "Login failed, account password and Captcha cannot be empty!", "登录失败,账号密码与验证码不能为空!"),
109 | /**
110 | * 状态码:1010,
111 | * "Ordinary administrators can only delete ordinary users",
112 | * "普通管理员只能删除普通用户"
113 | */
114 | R1010(1010, "Ordinary administrators can only delete ordinary users", "普通管理员只能删除普通用户"),
115 | /**
116 | * 状态码:1011,
117 | * "Only administrators can delete users",
118 | * "只有管理员可以删除用户"
119 | */
120 | R1011(1011, "Only administrators can delete users", "只有管理员可以删除用户"),
121 | /**
122 | * 状态码:1100,
123 | * "The tags is referenced by the project and cannot be deleted",
124 | * "该标签已被项目引用,无法进行删除"
125 | */
126 | R1100(1100, "The tags is referenced by the project and cannot be deleted", "该标签已被项目引用,无法进行删除"),
127 | /**
128 | * 状态码:1101,
129 | * "The tags is referenced by the users and cannot be deleted",
130 | * "该标签下有用户,无法进行删除"
131 | */
132 | R1101(1101, "The tags is referenced by the users and cannot be deleted", "该标签下有用户,无法进行删除"),
133 | /**
134 | * 状态码: 1501,
135 | * "Invalid URL path. If there is a path parameter, please fill in the path
136 | * parameter",
137 | * "无效的URL路径,如果有Path参数请填充Path参数"
138 | */
139 | R1501(1501, "Invalid URL path. If there is a path parameter, please fill in the path parameter",
140 | "无效的URL路径,如果有Path参数请填充Path参数"),
141 | /**
142 | * 状态码: 1502,
143 | * "Unrecognized host or address",
144 | * "无法识别主机"
145 | */
146 | R1502(1502, "Unrecognized host or address", "无法识别主机"),;
147 |
148 | /** 状态信息 */
149 | private int code;
150 | /** 状态信息 */
151 | private String msg;
152 | /** 提示信息 */
153 | private String explain;
154 |
155 | private ResultCode(int code, String msg, String explain) {
156 | this.code = code;
157 | this.msg = msg;
158 | this.explain = explain;
159 | }
160 |
161 | /**
162 | * 获取状态码
163 | *
164 | * @return
165 | */
166 | public int code() {
167 | return code;
168 | }
169 |
170 | /**
171 | * 获取状态信息
172 | *
173 | * @return
174 | */
175 | public String msg() {
176 | return msg;
177 | }
178 |
179 | /**
180 | * 获取描述信息
181 | *
182 | * @return
183 | */
184 | public String explain() {
185 | return explain;
186 | }
187 |
188 | }
189 |
--------------------------------------------------------------------------------