From e566b25168c6eb4171d82f3c458c295f0cffe734 Mon Sep 17 00:00:00 2001 From: hjhcos <3140546263@qq.com> Date: Wed, 4 May 2022 16:41:08 +0800 Subject: [PATCH 01/74] =?UTF-8?q?=F0=9F=94=A2HttpClientFluent=E8=A3=81?= =?UTF-8?q?=E5=89=AA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 14 + .../pearadmin/modules/cra/tools/Content.java | 62 +++ .../cra/tools/ContentResponseHandler.java | 28 ++ .../pearadmin/modules/cra/tools/Executor.java | 183 +++++++++ .../com/pearadmin/modules/cra/tools/Form.java | 35 ++ .../pearadmin/modules/cra/tools/Https.java | 57 +++ .../pearadmin/modules/cra/tools/Request.java | 370 ++++++++++++++++++ .../pearadmin/modules/cra/tools/Response.java | 140 +++++++ src/main/resources/application-dev.yml | 1 + 9 files changed, 890 insertions(+) create mode 100644 src/main/java/com/pearadmin/modules/cra/tools/Content.java create mode 100644 src/main/java/com/pearadmin/modules/cra/tools/ContentResponseHandler.java create mode 100644 src/main/java/com/pearadmin/modules/cra/tools/Executor.java create mode 100644 src/main/java/com/pearadmin/modules/cra/tools/Form.java create mode 100644 src/main/java/com/pearadmin/modules/cra/tools/Https.java create mode 100644 src/main/java/com/pearadmin/modules/cra/tools/Request.java create mode 100644 src/main/java/com/pearadmin/modules/cra/tools/Response.java diff --git a/pom.xml b/pom.xml index 4a75fa7c..229c8a20 100644 --- a/pom.xml +++ b/pom.xml @@ -70,6 +70,8 @@ 3.8.0 3.0.5 + + 5.1.3 8 8 @@ -78,6 +80,18 @@ + + + org.apache.httpcomponents.client5 + httpclient5 + ${httpClient-components.version} + + + org.slf4j + slf4j-api + + + org.springframework.boot diff --git a/src/main/java/com/pearadmin/modules/cra/tools/Content.java b/src/main/java/com/pearadmin/modules/cra/tools/Content.java new file mode 100644 index 00000000..a50f2ae1 --- /dev/null +++ b/src/main/java/com/pearadmin/modules/cra/tools/Content.java @@ -0,0 +1,62 @@ +// +---------------------------------------------------------------------- +// | HJHCOS [ Laziness is creativity ] +// +---------------------------------------------------------------------- +// | Copyright (c) https://hjhcos.cn All rights reserved. +// +---------------------------------------------------------------------- +// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 ) +// +---------------------------------------------------------------------- +// | Author: hjhcos +// +---------------------------------------------------------------------- +package com.pearadmin.modules.cra.tools; + +import java.io.ByteArrayInputStream; +import java.io.InputStream; +import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; +import org.apache.hc.core5.http.ContentType; + +public class Content { + public static final Content NO_CONTENT; + private final byte[] raw; + private final ContentType type; + + public Content(byte[] raw, ContentType type) { + this.raw = raw; + this.type = type; + } + + public ContentType getType() { + return this.type; + } + + public byte[] asBytes() { + return (byte[])this.raw.clone(); + } + + public String asString() { + Charset charset = this.type.getCharset(); + if (charset == null) { + charset = StandardCharsets.ISO_8859_1; + } + + return this.asString(charset); + } + + public String asString(Charset charset) { + return new String(this.raw, charset); + } + + public InputStream asStream() { + return new ByteArrayInputStream(this.raw); + } + + @Override + public String toString() { + return this.asString(); + } + + static { + NO_CONTENT = new Content(new byte[0], ContentType.DEFAULT_BINARY); + } +} + diff --git a/src/main/java/com/pearadmin/modules/cra/tools/ContentResponseHandler.java b/src/main/java/com/pearadmin/modules/cra/tools/ContentResponseHandler.java new file mode 100644 index 00000000..07657696 --- /dev/null +++ b/src/main/java/com/pearadmin/modules/cra/tools/ContentResponseHandler.java @@ -0,0 +1,28 @@ +// +---------------------------------------------------------------------- +// | HJHCOS [ Laziness is creativity ] +// +---------------------------------------------------------------------- +// | Copyright (c) https://hjhcos.cn All rights reserved. +// +---------------------------------------------------------------------- +// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 ) +// +---------------------------------------------------------------------- +// | Author: hjhcos +// +---------------------------------------------------------------------- +package com.pearadmin.modules.cra.tools; + +import java.io.IOException; + +import org.apache.hc.client5.http.impl.classic.AbstractHttpClientResponseHandler; +import org.apache.hc.core5.http.ContentType; +import org.apache.hc.core5.http.HttpEntity; +import org.apache.hc.core5.http.io.entity.EntityUtils; + +public class ContentResponseHandler extends AbstractHttpClientResponseHandler { + public ContentResponseHandler() { + } + + @Override + public Content handleEntity(HttpEntity entity) throws IOException { + return entity != null ? new Content(EntityUtils.toByteArray(entity), ContentType.parse(entity.getContentType())) : Content.NO_CONTENT; + } +} + diff --git a/src/main/java/com/pearadmin/modules/cra/tools/Executor.java b/src/main/java/com/pearadmin/modules/cra/tools/Executor.java new file mode 100644 index 00000000..a3d2ffe1 --- /dev/null +++ b/src/main/java/com/pearadmin/modules/cra/tools/Executor.java @@ -0,0 +1,183 @@ +// +---------------------------------------------------------------------- +// | HJHCOS [ Laziness is creativity ] +// +---------------------------------------------------------------------- +// | Copyright (c) https://hjhcos.cn All rights reserved. +// +---------------------------------------------------------------------- +// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 ) +// +---------------------------------------------------------------------- +// | Author: hjhcos +// +---------------------------------------------------------------------- +package com.pearadmin.modules.cra.tools; + +import java.io.IOException; +import java.net.URISyntaxException; +import org.apache.hc.client5.http.auth.AuthCache; +import org.apache.hc.client5.http.auth.AuthScope; +import org.apache.hc.client5.http.auth.Credentials; +import org.apache.hc.client5.http.auth.CredentialsStore; +import org.apache.hc.client5.http.auth.NTCredentials; +import org.apache.hc.client5.http.auth.UsernamePasswordCredentials; +import org.apache.hc.client5.http.cookie.CookieStore; +import org.apache.hc.client5.http.impl.auth.BasicAuthCache; +import org.apache.hc.client5.http.impl.auth.BasicCredentialsProvider; +import org.apache.hc.client5.http.impl.auth.BasicScheme; +import org.apache.hc.client5.http.impl.classic.CloseableHttpClient; +import org.apache.hc.client5.http.impl.classic.HttpClientBuilder; +import org.apache.hc.client5.http.impl.io.PoolingHttpClientConnectionManagerBuilder; +import org.apache.hc.client5.http.protocol.HttpClientContext; +import org.apache.hc.core5.http.HttpHost; +import org.apache.hc.core5.http.protocol.HttpContext; +import org.apache.hc.core5.util.TimeValue; + +public class Executor { + static final CloseableHttpClient CLIENT = HttpClientBuilder.create().setConnectionManager(PoolingHttpClientConnectionManagerBuilder.create().useSystemProperties().setMaxConnPerRoute(100).setMaxConnTotal(200).setValidateAfterInactivity(TimeValue.ofSeconds(10L)).build()).useSystemProperties().evictExpiredConnections().evictIdleConnections(TimeValue.ofMinutes(1L)).build(); + private final CloseableHttpClient httpclient; + private final AuthCache authCache; + private volatile CredentialsStore credentialsStore; + private volatile CookieStore cookieStore; + + public static Executor newInstance() { + return new Executor(CLIENT); + } + + public static Executor newInstance(CloseableHttpClient httpclient) { + return new Executor(httpclient != null ? httpclient : CLIENT); + } + + Executor(CloseableHttpClient httpclient) { + this.httpclient = httpclient; + this.authCache = new BasicAuthCache(); + } + + public Executor use(CredentialsStore credentialsStore) { + this.credentialsStore = credentialsStore; + return this; + } + + public Executor auth(AuthScope authScope, Credentials credentials) { + CredentialsStore credentialsStoreSnapshot = this.credentialsStore; + if (credentialsStoreSnapshot == null) { + credentialsStoreSnapshot = new BasicCredentialsProvider(); + this.credentialsStore = (CredentialsStore)credentialsStoreSnapshot; + } + + ((CredentialsStore)credentialsStoreSnapshot).setCredentials(authScope, credentials); + return this; + } + + public Executor auth(HttpHost host, Credentials credentials) { + return this.auth(new AuthScope(host), credentials); + } + + public Executor auth(String host, Credentials credentials) { + HttpHost httpHost; + try { + httpHost = HttpHost.create(host); + } catch (URISyntaxException var5) { + throw new IllegalArgumentException("Invalid host: " + host); + } + + return this.auth(httpHost, credentials); + } + + public Executor authPreemptive(HttpHost host) { + CredentialsStore credentialsStoreSnapshot = this.credentialsStore; + if (credentialsStoreSnapshot != null) { + Credentials credentials = credentialsStoreSnapshot.getCredentials(new AuthScope(host), (HttpContext)null); + if (credentials != null) { + BasicScheme basicScheme = new BasicScheme(); + basicScheme.initPreemptive(credentials); + this.authCache.put(host, basicScheme); + } + } + + return this; + } + + public Executor authPreemptive(String host) { + HttpHost httpHost; + try { + httpHost = HttpHost.create(host); + } catch (URISyntaxException var4) { + throw new IllegalArgumentException("Invalid host: " + host); + } + + return this.authPreemptive(httpHost); + } + + public Executor authPreemptiveProxy(HttpHost proxy) { + CredentialsStore credentialsStoreSnapshot = this.credentialsStore; + if (credentialsStoreSnapshot != null) { + Credentials credentials = credentialsStoreSnapshot.getCredentials(new AuthScope(proxy), (HttpContext)null); + if (credentials != null) { + BasicScheme basicScheme = new BasicScheme(); + basicScheme.initPreemptive(credentials); + this.authCache.put(proxy, basicScheme); + } + } + + return this; + } + + public Executor authPreemptiveProxy(String proxy) { + HttpHost httpHost; + try { + httpHost = HttpHost.create(proxy); + } catch (URISyntaxException var4) { + throw new IllegalArgumentException("Invalid host: " + proxy); + } + + return this.authPreemptiveProxy(httpHost); + } + + public Executor auth(HttpHost host, String username, char[] password) { + return this.auth((HttpHost)host, new UsernamePasswordCredentials(username, password)); + } + + public Executor auth(HttpHost host, String username, char[] password, String workstation, String domain) { + return this.auth((HttpHost)host, new NTCredentials(username, password, workstation, domain)); + } + + public Executor clearAuth() { + CredentialsStore credentialsStoreSnapshot = this.credentialsStore; + if (credentialsStoreSnapshot != null) { + credentialsStoreSnapshot.clear(); + } + + return this; + } + + public Executor use(CookieStore cookieStore) { + this.cookieStore = cookieStore; + return this; + } + + public Executor clearCookies() { + CookieStore cookieStoreSnapshot = this.cookieStore; + if (cookieStoreSnapshot != null) { + cookieStoreSnapshot.clear(); + } + + return this; + } + + public Response execute(Request request) throws IOException { + HttpClientContext localContext = HttpClientContext.create(); + CredentialsStore credentialsStoreSnapshot = this.credentialsStore; + if (credentialsStoreSnapshot != null) { + localContext.setAttribute("http.auth.credentials-provider", credentialsStoreSnapshot); + } + + if (this.authCache != null) { + localContext.setAttribute("http.auth.auth-cache", this.authCache); + } + + CookieStore cookieStoreSnapshot = this.cookieStore; + if (cookieStoreSnapshot != null) { + localContext.setAttribute("http.cookie-store", cookieStoreSnapshot); + } + + return new Response(request.internalExecute(this.httpclient, localContext)); + } +} + diff --git a/src/main/java/com/pearadmin/modules/cra/tools/Form.java b/src/main/java/com/pearadmin/modules/cra/tools/Form.java new file mode 100644 index 00000000..b2c1eac5 --- /dev/null +++ b/src/main/java/com/pearadmin/modules/cra/tools/Form.java @@ -0,0 +1,35 @@ +// +---------------------------------------------------------------------- +// | HJHCOS [ Laziness is creativity ] +// +---------------------------------------------------------------------- +// | Copyright (c) https://hjhcos.cn All rights reserved. +// +---------------------------------------------------------------------- +// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 ) +// +---------------------------------------------------------------------- +// | Author: hjhcos +// +---------------------------------------------------------------------- +package com.pearadmin.modules.cra.tools; + +import java.util.ArrayList; +import java.util.List; +import org.apache.hc.core5.http.NameValuePair; +import org.apache.hc.core5.http.message.BasicNameValuePair; + +public class Form { + private final List params = new ArrayList<>(); + + public static Form form() { + return new Form(); + } + + Form() { + } + + public Form add(String name, String value) { + this.params.add(new BasicNameValuePair(name, value)); + return this; + } + + public List build() { + return new ArrayList<>(this.params); + } +} diff --git a/src/main/java/com/pearadmin/modules/cra/tools/Https.java b/src/main/java/com/pearadmin/modules/cra/tools/Https.java new file mode 100644 index 00000000..715c99dd --- /dev/null +++ b/src/main/java/com/pearadmin/modules/cra/tools/Https.java @@ -0,0 +1,57 @@ +// +---------------------------------------------------------------------- +// | HJHCOS [ Laziness is creativity ] +// +---------------------------------------------------------------------- +// | Copyright (c) https://hjhcos.cn All rights reserved. +// +---------------------------------------------------------------------- +// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 ) +// +---------------------------------------------------------------------- +// | Author: hjhcos +// +---------------------------------------------------------------------- +package com.pearadmin.modules.cra.tools; + +import org.apache.hc.core5.http.ClassicHttpRequest; +import org.apache.hc.core5.http.NameValuePair; + +import java.io.IOException; +import java.nio.charset.StandardCharsets; + +public class Https extends Request{ + + Https(ClassicHttpRequest request) { + super(request); + } + + /** + * 获取内容 + * @param method 请求方式 + * @param url 请求网址 + * @param formParams 请求参数 + * @param formHeaders 请求头 + * @return Content + */ + public static Content request(String method, String url, Iterable formParams, Iterable formHeaders){ + try { + Request req = Request.create(method, url); + if(formParams != null){ + if ("GET".equalsIgnoreCase(method)) { + req.addParams(formParams, StandardCharsets.UTF_8); + } else { + req.bodyForm(formParams); + } + } + if(formHeaders != null){ + for (NameValuePair parameter : formHeaders) { + req.setHeader(parameter.getName(), parameter.getValue()); + } + } + return req.execute().returnContent(); + } catch (IOException e) { + e.printStackTrace(); + } + return null; + } + public static Content get(String url, Iterable formParams){ + return request("GET", url, formParams, null); + } + +} diff --git a/src/main/java/com/pearadmin/modules/cra/tools/Request.java b/src/main/java/com/pearadmin/modules/cra/tools/Request.java new file mode 100644 index 00000000..9365b72f --- /dev/null +++ b/src/main/java/com/pearadmin/modules/cra/tools/Request.java @@ -0,0 +1,370 @@ +// +---------------------------------------------------------------------- +// | HJHCOS [ Laziness is creativity ] +// +---------------------------------------------------------------------- +// | Copyright (c) https://hjhcos.cn All rights reserved. +// +---------------------------------------------------------------------- +// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 ) +// +---------------------------------------------------------------------- +// | Author: hjhcos +// +---------------------------------------------------------------------- +package com.pearadmin.modules.cra.tools; + +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.net.URI; +import java.net.URISyntaxException; +import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Date; +import java.util.List; +import java.util.Locale; +import java.util.TimeZone; +import org.apache.hc.client5.http.classic.methods.HttpUriRequestBase; +import org.apache.hc.client5.http.config.Configurable; +import org.apache.hc.client5.http.config.RequestConfig; +import org.apache.hc.client5.http.config.RequestConfig.Builder; +import org.apache.hc.client5.http.impl.classic.CloseableHttpClient; +import org.apache.hc.client5.http.protocol.HttpClientContext; +import org.apache.hc.core5.http.ClassicHttpRequest; +import org.apache.hc.core5.http.ClassicHttpResponse; +import org.apache.hc.core5.http.ContentType; +import org.apache.hc.core5.http.Header; +import org.apache.hc.core5.http.HttpEntity; +import org.apache.hc.core5.http.HttpHost; +import org.apache.hc.core5.http.HttpVersion; +import org.apache.hc.core5.http.Method; +import org.apache.hc.core5.http.NameValuePair; +import org.apache.hc.core5.http.io.entity.ByteArrayEntity; +import org.apache.hc.core5.http.io.entity.FileEntity; +import org.apache.hc.core5.http.io.entity.InputStreamEntity; +import org.apache.hc.core5.http.message.BasicClassicHttpRequest; +import org.apache.hc.core5.net.WWWFormCodec; +import org.apache.hc.core5.util.Timeout; + +public class Request { + public static final String DATE_FORMAT = "EEE, dd MMM yyyy HH:mm:ss zzz"; + public static final Locale DATE_LOCALE; + public static final TimeZone TIME_ZONE; + private final ClassicHttpRequest request; + private Boolean useExpectContinue; + private Timeout connectTimeout; + private Timeout responseTimeout; + private HttpHost proxy; + private SimpleDateFormat dateFormatter; + + public static Request create(Method method, URI uri) { + return new Request(new HttpUriRequestBase(method.name(), uri)); + } + + public static Request create(String methodName, String uri) { + return new Request(new HttpUriRequestBase(methodName, URI.create(uri))); + } + + public static Request create(String methodName, URI uri) { + return new Request(new HttpUriRequestBase(methodName, uri)); + } + + public static Request get(URI uri) { + return new Request(new BasicClassicHttpRequest(Method.GET, uri)); + } + + public static Request get(String uri) { + return new Request(new BasicClassicHttpRequest(Method.GET, uri)); + } + + public static Request head(URI uri) { + return new Request(new BasicClassicHttpRequest(Method.HEAD, uri)); + } + + public static Request head(String uri) { + return new Request(new BasicClassicHttpRequest(Method.HEAD, uri)); + } + + public static Request post(URI uri) { + return new Request(new BasicClassicHttpRequest(Method.POST, uri)); + } + + public static Request post(String uri) { + return new Request(new BasicClassicHttpRequest(Method.POST, uri)); + } + + public static Request patch(URI uri) { + return new Request(new BasicClassicHttpRequest(Method.PATCH, uri)); + } + + public static Request patch(String uri) { + return new Request(new BasicClassicHttpRequest(Method.PATCH, uri)); + } + + public static Request put(URI uri) { + return new Request(new BasicClassicHttpRequest(Method.PUT, uri)); + } + + public static Request put(String uri) { + return new Request(new BasicClassicHttpRequest(Method.PUT, uri)); + } + + public static Request trace(URI uri) { + return new Request(new BasicClassicHttpRequest(Method.TRACE, uri)); + } + + public static Request trace(String uri) { + return new Request(new BasicClassicHttpRequest(Method.TRACE, uri)); + } + + public static Request delete(URI uri) { + return new Request(new BasicClassicHttpRequest(Method.DELETE, uri)); + } + + public static Request delete(String uri) { + return new Request(new BasicClassicHttpRequest(Method.DELETE, uri)); + } + + public static Request options(URI uri) { + return new Request(new BasicClassicHttpRequest(Method.OPTIONS, uri)); + } + + public static Request options(String uri) { + return new Request(new BasicClassicHttpRequest(Method.OPTIONS, uri)); + } + + Request(ClassicHttpRequest request) { + this.request = request; + } + + ClassicHttpResponse internalExecute(CloseableHttpClient client, HttpClientContext localContext) throws IOException { + Builder builder; + if (client instanceof Configurable) { + builder = RequestConfig.copy(((Configurable)client).getConfig()); + } else { + builder = RequestConfig.custom(); + } + + if (this.useExpectContinue != null) { + builder.setExpectContinueEnabled(this.useExpectContinue); + } + + if (this.connectTimeout != null) { + builder.setConnectTimeout(this.connectTimeout); + } + + if (this.responseTimeout != null) { + builder.setResponseTimeout(this.responseTimeout); + } + + if (this.proxy != null) { + builder.setProxy(this.proxy); + } + + RequestConfig config = builder.build(); + localContext.setRequestConfig(config); + return client.execute(this.request, localContext); + } + + public Response execute() throws IOException { + return this.execute(Executor.CLIENT); + } + + public Response execute(CloseableHttpClient client) throws IOException { + return new Response(this.internalExecute(client, HttpClientContext.create())); + } + + public Request addHeader(Header header) { + this.request.addHeader(header); + return this; + } + + public Request setHeader(Header header) { + this.request.setHeader(header); + return this; + } + + public Request addHeader(String name, String value) { + this.request.addHeader(name, value); + return this; + } + + public Request setHeader(String name, String value) { + this.request.setHeader(name, value); + return this; + } + + public Request removeHeader(Header header) { + this.request.removeHeader(header); + return this; + } + + public Request removeHeaders(String name) { + this.request.removeHeaders(name); + return this; + } + + public Request setHeaders(Header... headers) { + this.request.setHeaders(headers); + return this; + } + + public Request setCacheControl(String cacheControl) { + this.request.setHeader("Cache-Control", cacheControl); + return this; + } + + private SimpleDateFormat getDateFormat() { + if (this.dateFormatter == null) { + this.dateFormatter = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss zzz", DATE_LOCALE); + this.dateFormatter.setTimeZone(TIME_ZONE); + } + + return this.dateFormatter; + } + + ClassicHttpRequest getRequest() { + return this.request; + } + + public Request setDate(Date date) { + this.request.setHeader("Date", this.getDateFormat().format(date)); + return this; + } + + public Request setIfModifiedSince(Date date) { + this.request.setHeader("If-Modified-Since", this.getDateFormat().format(date)); + return this; + } + + public Request setIfUnmodifiedSince(Date date) { + this.request.setHeader("If-Unmodified-Since", this.getDateFormat().format(date)); + return this; + } + + public Request version(HttpVersion version) { + this.request.setVersion(version); + return this; + } + + public Request useExpectContinue() { + this.useExpectContinue = Boolean.TRUE; + return this; + } + + public Request userAgent(String agent) { + this.request.setHeader("User-Agent", agent); + return this; + } + + public Request connectTimeout(Timeout timeout) { + this.connectTimeout = timeout; + return this; + } + + public Request responseTimeout(Timeout timeout) { + this.responseTimeout = timeout; + return this; + } + + public Request viaProxy(HttpHost proxy) { + this.proxy = proxy; + return this; + } + + public Request viaProxy(String proxy) { + try { + this.proxy = HttpHost.create(proxy); + return this; + } catch (URISyntaxException var3) { + throw new IllegalArgumentException("Invalid host"); + } + } + + + /** + * 将参数添加到url里面 适用于 get + * @param formParams 参数列表 + * @return Request + */ + public void addParams(Iterable formParams, Charset charset){ + List paramList = new ArrayList<>(); + + for (NameValuePair param : formParams) { + paramList.add(param); + } + + ContentType contentType = charset != null ? ContentType.APPLICATION_JSON.withCharset(charset) : ContentType.APPLICATION_JSON; + String s = WWWFormCodec.format(paramList, contentType.getCharset()); + request.setPath(request.getPath()+"?"+s); + } + + public Request body(HttpEntity entity) { + this.request.setEntity(entity); + return this; + } + + public Request bodyForm(Iterable formParams, Charset charset) { + List paramList = new ArrayList<>(); + + for (NameValuePair param : formParams) { + paramList.add(param); + } + + ContentType contentType = charset != null ? ContentType.APPLICATION_FORM_URLENCODED.withCharset(charset) : ContentType.APPLICATION_FORM_URLENCODED; + String s = WWWFormCodec.format(paramList, contentType.getCharset()); + return this.bodyString(s, contentType); + } + + public Request bodyForm(Iterable formParams) { + return this.bodyForm(formParams, StandardCharsets.UTF_8); + } + + public Request bodyForm(NameValuePair... formParams) { + return this.bodyForm(Arrays.asList(formParams), StandardCharsets.UTF_8); + } + + public Request bodyString(String s, ContentType contentType) { + Charset charset = contentType != null ? contentType.getCharset() : null; + byte[] raw = charset != null ? s.getBytes(charset) : s.getBytes(); + return this.body(new ByteArrayEntity(raw, contentType)); + } + + public Request bodyFile(File file, ContentType contentType) { + return this.body(new FileEntity(file, contentType)); + } + + public Request bodyByteArray(byte[] b) { + return this.body(new ByteArrayEntity(b, (ContentType)null)); + } + + public Request bodyByteArray(byte[] b, ContentType contentType) { + return this.body(new ByteArrayEntity(b, contentType)); + } + + public Request bodyByteArray(byte[] b, int off, int len) { + return this.body(new ByteArrayEntity(b, off, len, (ContentType)null)); + } + + public Request bodyByteArray(byte[] b, int off, int len, ContentType contentType) { + return this.body(new ByteArrayEntity(b, off, len, contentType)); + } + + public Request bodyStream(InputStream inStream) { + return this.body(new InputStreamEntity(inStream, -1L, (ContentType)null)); + } + + public Request bodyStream(InputStream inStream, ContentType contentType) { + return this.body(new InputStreamEntity(inStream, -1L, contentType)); + } + + @Override + public String toString() { + return this.request.toString(); + } + + static { + DATE_LOCALE = Locale.US; + TIME_ZONE = TimeZone.getTimeZone("GMT"); + } +} + diff --git a/src/main/java/com/pearadmin/modules/cra/tools/Response.java b/src/main/java/com/pearadmin/modules/cra/tools/Response.java new file mode 100644 index 00000000..9969f797 --- /dev/null +++ b/src/main/java/com/pearadmin/modules/cra/tools/Response.java @@ -0,0 +1,140 @@ +// +---------------------------------------------------------------------- +// | HJHCOS [ Laziness is creativity ] +// +---------------------------------------------------------------------- +// | Copyright (c) https://hjhcos.cn All rights reserved. +// +---------------------------------------------------------------------- +// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 ) +// +---------------------------------------------------------------------- +// | Author: hjhcos +// +---------------------------------------------------------------------- +package com.pearadmin.modules.cra.tools; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import org.apache.hc.client5.http.ClientProtocolException; +import org.apache.hc.client5.http.HttpResponseException; +import org.apache.hc.core5.http.ClassicHttpResponse; +import org.apache.hc.core5.http.ContentType; +import org.apache.hc.core5.http.HttpEntity; +import org.apache.hc.core5.http.HttpException; +import org.apache.hc.core5.http.HttpResponse; +import org.apache.hc.core5.http.io.HttpClientResponseHandler; +import org.apache.hc.core5.http.io.entity.ByteArrayEntity; +import org.apache.hc.core5.http.io.entity.EntityUtils; + +public class Response { + private final ClassicHttpResponse response; + private boolean consumed; + + Response(ClassicHttpResponse response) { + this.response = response; + } + + private void assertNotConsumed() { + if (this.consumed) { + throw new IllegalStateException("Response content has been already consumed"); + } + } + + private void dispose() { + if (!this.consumed) { + try { + HttpEntity entity = this.response.getEntity(); + if (entity != null) { + InputStream content = entity.getContent(); + if (content != null) { + content.close(); + } + } + } catch (Exception var6) { + } finally { + this.consumed = true; + } + + } + } + + public void discardContent() { + this.dispose(); + } + + public T handleResponse(HttpClientResponseHandler handler) throws IOException { + this.assertNotConsumed(); + + T var2; + try { + var2 = handler.handleResponse(this.response); + } catch (HttpException var6) { + throw new ClientProtocolException(var6); + } finally { + this.dispose(); + } + + return var2; + } + + public Content returnContent() throws IOException { + return (Content)this.handleResponse(new ContentResponseHandler()); + } + + public HttpResponse returnResponse() throws IOException { + this.assertNotConsumed(); + + ClassicHttpResponse var6; + try { + HttpEntity entity = this.response.getEntity(); + if (entity != null) { + ByteArrayEntity byteArrayEntity = new ByteArrayEntity(EntityUtils.toByteArray(entity), ContentType.parse(entity.getContentType())); + this.response.setEntity(byteArrayEntity); + } + + var6 = this.response; + } finally { + this.consumed = true; + } + + return var6; + } + + public void saveContent(File file) throws IOException { + this.assertNotConsumed(); + int status = this.response.getCode(); + if (status >= 300) { + throw new HttpResponseException(status, this.response.getReasonPhrase()); + } else { + try { + FileOutputStream out = new FileOutputStream(file); + Throwable var4 = null; + + try { + HttpEntity entity = this.response.getEntity(); + if (entity != null) { + entity.writeTo(out); + } + } catch (Throwable var20) { + var4 = var20; + throw var20; + } finally { + if (out != null) { + if (var4 != null) { + try { + out.close(); + } catch (Throwable var19) { + var4.addSuppressed(var19); + } + } else { + out.close(); + } + } + + } + } finally { + this.consumed = true; + } + + } + } +} + diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml index 5b5de9b6..acd43079 100644 --- a/src/main/resources/application-dev.yml +++ b/src/main/resources/application-dev.yml @@ -1,3 +1,4 @@ +debug: true spring: redis: # 主 机 地 址 -- Gitee From 18a26e0b168462190fed2d1854761077b8d2ea76 Mon Sep 17 00:00:00 2001 From: hjhcos <3140546263@qq.com> Date: Sun, 15 May 2022 22:32:42 +0800 Subject: [PATCH 02/74] =?UTF-8?q?=F0=9F=95=B7=E7=88=AC=E8=99=AB=E7=AE=A1?= =?UTF-8?q?=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/pearadmin/EntranceApplication.java | 29 +- .../cra/controller/CraTaskController.java | 112 ++++++++ .../pearadmin/modules/cra/domain/CraTask.java | 71 +++++ .../modules/cra/mapper/CraTaskMapper.java | 24 ++ .../modules/cra/mapper/xml/CraTaskMapper.xml | 29 ++ .../modules/cra/service/ICraTaskService.java | 25 ++ .../cra/service/impl/CraTaskServiceImpl.java | 40 +++ src/main/resources/crawler.yml | 22 ++ .../resources/templates/cra/task/add.html | 108 ++++++++ .../resources/templates/cra/task/edit.html | 109 ++++++++ .../resources/templates/cra/task/main.html | 247 ++++++++++++++++++ src/main/resources/templates/footer.html | 0 12 files changed, 814 insertions(+), 2 deletions(-) create mode 100644 src/main/java/com/pearadmin/modules/cra/controller/CraTaskController.java create mode 100644 src/main/java/com/pearadmin/modules/cra/domain/CraTask.java create mode 100644 src/main/java/com/pearadmin/modules/cra/mapper/CraTaskMapper.java create mode 100644 src/main/java/com/pearadmin/modules/cra/mapper/xml/CraTaskMapper.xml create mode 100644 src/main/java/com/pearadmin/modules/cra/service/ICraTaskService.java create mode 100644 src/main/java/com/pearadmin/modules/cra/service/impl/CraTaskServiceImpl.java create mode 100644 src/main/resources/crawler.yml create mode 100644 src/main/resources/templates/cra/task/add.html create mode 100644 src/main/resources/templates/cra/task/edit.html create mode 100644 src/main/resources/templates/cra/task/main.html create mode 100644 src/main/resources/templates/footer.html diff --git a/src/main/java/com/pearadmin/EntranceApplication.java b/src/main/java/com/pearadmin/EntranceApplication.java index 77877b67..0d21cf16 100644 --- a/src/main/java/com/pearadmin/EntranceApplication.java +++ b/src/main/java/com/pearadmin/EntranceApplication.java @@ -1,18 +1,43 @@ package com.pearadmin; import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure; +import lombok.extern.slf4j.Slf4j; import org.activiti.spring.boot.SecurityAutoConfiguration; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; +import org.springframework.context.ConfigurableApplicationContext; +import org.springframework.core.env.Environment; + +import java.io.IOException; +import java.net.InetAddress; /** * Pear Admin Boot 入口 * */ +@Slf4j @SpringBootApplication(exclude = {SecurityAutoConfiguration.class, DataSourceAutoConfiguration.class, DruidDataSourceAutoConfigure.class, org.activiti.spring.boot.SecurityAutoConfiguration.class}) public class EntranceApplication { - public static void main(String[] args) { - SpringApplication.run(EntranceApplication.class, args); + public static void main(String[] args) throws IOException { + ConfigurableApplicationContext app = SpringApplication.run(EntranceApplication.class, args); + Environment env = app.getEnvironment(); + String ip = InetAddress.getLocalHost().getHostAddress(); + String port = env.getProperty("server.port"); + String dataBseUrl = env.getProperty("spring.datasource.dynamic.datasource.master.url"); + String envSign = env.getProperty("spring.profiles.active"); + + log.info("\n-------------------------------\n" + + "当前启动环境:\t" + envSign + "\n" + + "项目启动地址:\t" + ip + ":" + port + "\n" + + "后端请求地址:\t" + ip + ":" + port + "\n" + + "数据库访问地址:\t" + dataBseUrl + "\n" + + "-------------------------------" + ); + + if ("dev".equals(envSign)) { + Runtime.getRuntime().exec("cmd /c start http://" + ip + ":" + port); + } + } } diff --git a/src/main/java/com/pearadmin/modules/cra/controller/CraTaskController.java b/src/main/java/com/pearadmin/modules/cra/controller/CraTaskController.java new file mode 100644 index 00000000..b8cc7bd4 --- /dev/null +++ b/src/main/java/com/pearadmin/modules/cra/controller/CraTaskController.java @@ -0,0 +1,112 @@ +package com.pearadmin.modules.cra.controller; + +import com.github.pagehelper.PageInfo; +import com.pearadmin.modules.cra.domain.CraTask; +import com.pearadmin.common.web.base.BaseController; +import com.pearadmin.common.web.domain.request.PageDomain; +import com.pearadmin.common.web.domain.response.Result; +import com.pearadmin.common.web.domain.response.module.ResultTable; +import io.swagger.annotations.Api; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.ui.ModelMap; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.servlet.ModelAndView; +import com.pearadmin.modules.cra.service.ICraTaskService; + +import java.time.LocalDateTime; +import java.util.Arrays; + +/** + * 数据任务管理Controller + * + * @author hjhcos + * @date 2022-05-08 + */ +@RestController +@RequestMapping("/cra/task") +@Api(tags = {"爬虫任务"}) +public class CraTaskController extends BaseController { + + private String prefix = "cra/task"; + + @Autowired + private ICraTaskService craTaskService; + + @GetMapping("/main") + @PreAuthorize("hasPermission('/cra/task/main','cra:task:main')") + public ModelAndView main() { + return jumpPage(prefix + "/main"); + } + + /** + * 查询数据任务管理列表 + */ + @ResponseBody + @GetMapping("/data") + @PreAuthorize("hasPermission('/cra/task/data','cra:task:data')") + public ResultTable list(@ModelAttribute CraTask craTask, PageDomain pageDomain) { + PageInfo pageInfo = craTaskService.selectCraTaskPage(craTask, pageDomain); + return pageTable(pageInfo.getList(), pageInfo.getTotal()); + } + + /** + * 新增数据任务管理 + */ + @GetMapping("/add") + @PreAuthorize("hasPermission('/cra/task/add','cra:task:add')") + public ModelAndView add() { + return jumpPage(prefix + "/add"); + } + + /** + * 新增数据任务管理 + */ + @ResponseBody + @PostMapping("/save") + @PreAuthorize("hasPermission('/cra/task/add','cra:task:add')") + public Result save(@RequestBody CraTask craTask) { + return decide(craTaskService.save(craTask)); + } + + /** + * 修改数据任务管理 + */ + @GetMapping("/edit") + @PreAuthorize("hasPermission('/cra/task/edit','cra:task:edit')") + public ModelAndView edit(String craId, ModelMap map) { + CraTask craTask =craTaskService.getById(craId); + map.put("craTask", craTask); + return jumpPage(prefix + "/edit"); + } + + /** + * 修改数据任务管理 + */ + @ResponseBody + @PutMapping("/update") + @PreAuthorize("hasPermission('/cra/task/edit','cra:task:edit')") + public Result update(@RequestBody CraTask craTask) { + return decide(craTaskService.updateById(craTask)); + } + + /** + * 删除数据任务管理 + */ + @ResponseBody + @DeleteMapping("/batchRemove") + @PreAuthorize("hasPermission('/cra/task/remove','cra:task:remove')") + public Result batchRemove(String ids) { + return decide(craTaskService.removeByIds(Arrays.asList(ids.split(",")))); + } + + /** + * 删除数据任务管理 + */ + @ResponseBody + @DeleteMapping("/remove/{craId}") + @PreAuthorize("hasPermission('/cra/task/remove','cra:task:remove')") + public Result remove(@PathVariable("craId") String craId) { + return decide(craTaskService.removeById(craId)); + } +} diff --git a/src/main/java/com/pearadmin/modules/cra/domain/CraTask.java b/src/main/java/com/pearadmin/modules/cra/domain/CraTask.java new file mode 100644 index 00000000..c25ef8ea --- /dev/null +++ b/src/main/java/com/pearadmin/modules/cra/domain/CraTask.java @@ -0,0 +1,71 @@ +package com.pearadmin.modules.cra.domain; + +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + * 数据任务管理实体 + * + * @author hjhcos + * @date 2022-05-08 + */ +@Data +@TableName("cra_task") +public class CraTask implements Serializable { + + /** 任务id */ + @TableId + private String craId; + + /** 数据名称 */ + private String craName; + + /** 数据标签 */ + private String craTag; + + /** 是否可用 */ + private Integer enable; + + /** 主机 */ + private String host; + + /** 请求网址 */ + private String url; + + /** + * 创建时间 + */ + @TableField(value = "create_time", fill = FieldFill.INSERT) + private LocalDateTime createTime; + + /** + * 创建人 + */ + @TableField(value = "create_by", fill = FieldFill.INSERT) + private String createBy; + + /** + * 创建人名称 + */ + @TableField(exist = false) + private String createName; + + /** + * 修改时间 + */ + @TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE) + private LocalDateTime updateTime; + + /** + * 修改人 + */ + @TableField(value = "update_by", fill = FieldFill.INSERT_UPDATE) + private String updateBy; + +} diff --git a/src/main/java/com/pearadmin/modules/cra/mapper/CraTaskMapper.java b/src/main/java/com/pearadmin/modules/cra/mapper/CraTaskMapper.java new file mode 100644 index 00000000..ffd7f90a --- /dev/null +++ b/src/main/java/com/pearadmin/modules/cra/mapper/CraTaskMapper.java @@ -0,0 +1,24 @@ +package com.pearadmin.modules.cra.mapper; + +import org.apache.ibatis.annotations.Mapper; +import java.util.List; +import com.pearadmin.modules.cra.domain.CraTask; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + * 数据任务管理Mapper接口 + * + * @author hjhcos + * @date 2022-05-08 + */ +@Mapper +public interface CraTaskMapper extends BaseMapper { + /** + * 查询数据任务管理列表 + * + * @param craTask 数据任务管理 + * @return 数据任务管理集合 + */ + List selectCraTaskList(CraTask craTask); + +} diff --git a/src/main/java/com/pearadmin/modules/cra/mapper/xml/CraTaskMapper.xml b/src/main/java/com/pearadmin/modules/cra/mapper/xml/CraTaskMapper.xml new file mode 100644 index 00000000..89836c62 --- /dev/null +++ b/src/main/java/com/pearadmin/modules/cra/mapper/xml/CraTaskMapper.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/java/com/pearadmin/modules/cra/service/ICraTaskService.java b/src/main/java/com/pearadmin/modules/cra/service/ICraTaskService.java new file mode 100644 index 00000000..5d576432 --- /dev/null +++ b/src/main/java/com/pearadmin/modules/cra/service/ICraTaskService.java @@ -0,0 +1,25 @@ +package com.pearadmin.modules.cra.service; + +import java.util.List; +import com.github.pagehelper.PageInfo; +import com.pearadmin.common.web.domain.request.PageDomain; +import com.pearadmin.modules.cra.domain.CraTask; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + * 数据任务管理Service接口 + * + * @author hjhcos + * @date 2022-05-08 + */ +public interface ICraTaskService extends IService { + + /** + * 查询数据任务管理 + * @param craTask 数据任务管理 + * @param pageDomain + * @return 数据任务管理 分页集合 + * */ + PageInfo selectCraTaskPage(CraTask craTask, PageDomain pageDomain); + +} diff --git a/src/main/java/com/pearadmin/modules/cra/service/impl/CraTaskServiceImpl.java b/src/main/java/com/pearadmin/modules/cra/service/impl/CraTaskServiceImpl.java new file mode 100644 index 00000000..430c4e18 --- /dev/null +++ b/src/main/java/com/pearadmin/modules/cra/service/impl/CraTaskServiceImpl.java @@ -0,0 +1,40 @@ +package com.pearadmin.modules.cra.service.impl; + +import java.util.List; +import java.util.ArrayList; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import com.pearadmin.common.web.domain.request.PageDomain; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.pearadmin.modules.cra.mapper.CraTaskMapper; +import com.pearadmin.modules.cra.domain.CraTask; +import com.pearadmin.modules.cra.service.ICraTaskService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; + +import java.util.Arrays; +/** + * 数据任务管理Service业务层处理 + * + * @author hjhcos + * @date 2022-05-08 + */ +@Service +public class CraTaskServiceImpl extends ServiceImpl implements ICraTaskService { + + + /** + * 查询数据任务管理 + * @param craTask 数据任务管理 + * @param pageDomain + * @return 数据任务管理 分页集合 + * */ + @Override + public PageInfo selectCraTaskPage(CraTask craTask, PageDomain pageDomain) { + PageHelper.startPage(pageDomain.getPage(), pageDomain.getLimit()); + List data = baseMapper.selectCraTaskList(craTask); + return new PageInfo<>(data); + } + +} diff --git a/src/main/resources/crawler.yml b/src/main/resources/crawler.yml new file mode 100644 index 00000000..32e442ff --- /dev/null +++ b/src/main/resources/crawler.yml @@ -0,0 +1,22 @@ +# 数据获取 +cra: + # 作者 + author: cos + # 默认生成包路径 system 需改成自己的模块名称 如 system monitor tool + packageName: com.pearadmin.modules.cra + # 自动去除表前缀,默认是false + autoRemovePre: false + # 表前缀(生成类名不会包含表前缀,多个用逗号分隔) + tablePrefix: cra_ +# 请求标头 +headers: + # 用户代理浏览器 + User-Agent: Chrome/100.0.4896.75 + # 代理服务器 + proxy: null + # 内容类型 + Content-Type: application/json + # 字符集 + charset: utf-8 + # 缓存控制 + Cache-Control: no-cache diff --git a/src/main/resources/templates/cra/task/add.html b/src/main/resources/templates/cra/task/add.html new file mode 100644 index 00000000..c3cb3983 --- /dev/null +++ b/src/main/resources/templates/cra/task/add.html @@ -0,0 +1,108 @@ + + + + + + +
+
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+
+
+
+ + +
+
+
+ + + + \ No newline at end of file diff --git a/src/main/resources/templates/cra/task/edit.html b/src/main/resources/templates/cra/task/edit.html new file mode 100644 index 00000000..f888e0c3 --- /dev/null +++ b/src/main/resources/templates/cra/task/edit.html @@ -0,0 +1,109 @@ + + + + + + +
+
+
+ +
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+
+
+
+ + +
+
+
+ + + + \ No newline at end of file diff --git a/src/main/resources/templates/cra/task/main.html b/src/main/resources/templates/cra/task/main.html new file mode 100644 index 00000000..dc574b30 --- /dev/null +++ b/src/main/resources/templates/cra/task/main.html @@ -0,0 +1,247 @@ + + + + + + +
+
+
+
+
+
+ +
+ +
+ + +
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + +
+
+
+
+
+ + + + + + + \ No newline at end of file diff --git a/src/main/resources/templates/footer.html b/src/main/resources/templates/footer.html new file mode 100644 index 00000000..e69de29b -- Gitee From 5f5663653d403cecd9bdfc4dfc657ba5b36c0beb Mon Sep 17 00:00:00 2001 From: hjhcos <3140546263@qq.com> Date: Tue, 17 May 2022 20:23:32 +0800 Subject: [PATCH 03/74] =?UTF-8?q?=F0=9F=95=B7=E6=96=87=E7=AB=A0=E7=AE=A1?= =?UTF-8?q?=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 6 + .../cra/controller/CraArticleController.java | 120 ++++++++++ .../modules/cra/domain/CraArticle.java | 71 ++++++ .../modules/cra/mapper/CraArticleMapper.java | 34 +++ .../cra/mapper/xml/CraArticleMapper.xml | 31 +++ .../cra/service/ICraArticleService.java | 33 +++ .../service/impl/CraArticleServiceImpl.java | 46 ++++ .../modules/cra/task/CrawlerArticle.java | 31 +++ .../pearadmin/modules/cra/tools/Https.java | 6 + src/main/resources/application-dev.yml | 6 +- .../resources/templates/cra/article/add.html | 120 ++++++++++ .../resources/templates/cra/article/edit.html | 121 ++++++++++ .../resources/templates/cra/article/main.html | 224 ++++++++++++++++++ .../resources/templates/cra/task/main.html | 108 ++++++--- 14 files changed, 929 insertions(+), 28 deletions(-) create mode 100644 src/main/java/com/pearadmin/modules/cra/controller/CraArticleController.java create mode 100644 src/main/java/com/pearadmin/modules/cra/domain/CraArticle.java create mode 100644 src/main/java/com/pearadmin/modules/cra/mapper/CraArticleMapper.java create mode 100644 src/main/java/com/pearadmin/modules/cra/mapper/xml/CraArticleMapper.xml create mode 100644 src/main/java/com/pearadmin/modules/cra/service/ICraArticleService.java create mode 100644 src/main/java/com/pearadmin/modules/cra/service/impl/CraArticleServiceImpl.java create mode 100644 src/main/java/com/pearadmin/modules/cra/task/CrawlerArticle.java create mode 100644 src/main/resources/templates/cra/article/add.html create mode 100644 src/main/resources/templates/cra/article/edit.html create mode 100644 src/main/resources/templates/cra/article/main.html diff --git a/pom.xml b/pom.xml index 229c8a20..41071783 100644 --- a/pom.xml +++ b/pom.xml @@ -80,6 +80,12 @@ + + + org.springframework.boot + spring-boot-devtools + true + org.apache.httpcomponents.client5 diff --git a/src/main/java/com/pearadmin/modules/cra/controller/CraArticleController.java b/src/main/java/com/pearadmin/modules/cra/controller/CraArticleController.java new file mode 100644 index 00000000..a7fc7bf1 --- /dev/null +++ b/src/main/java/com/pearadmin/modules/cra/controller/CraArticleController.java @@ -0,0 +1,120 @@ +// +---------------------------------------------------------------------- +// | HJHCOS [ Laziness is creativity ] +// +---------------------------------------------------------------------- +// | Copyright (c) https://hjhcos.cn All rights reserved. +// +---------------------------------------------------------------------- +// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 ) +// +---------------------------------------------------------------------- +// | Author: hjhcos +// +---------------------------------------------------------------------- +package com.pearadmin.modules.cra.controller; + +import com.github.pagehelper.PageInfo; +import com.pearadmin.modules.cra.domain.CraArticle; +import com.pearadmin.common.web.base.BaseController; +import com.pearadmin.common.web.domain.request.PageDomain; +import com.pearadmin.common.web.domain.response.Result; +import com.pearadmin.common.web.domain.response.module.ResultTable; +import io.swagger.annotations.Api; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.ui.ModelMap; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.servlet.ModelAndView; +import com.pearadmin.modules.cra.service.ICraArticleService; + +import java.util.Arrays; + +/** + * 文章管理Controller + * + * @author hjhcos + * @date 2022-05-16 + */ +@RestController +@RequestMapping("/cra/article") +@Api(tags = {"文章管理"}) +public class CraArticleController extends BaseController { + + private String prefix = "cra/article"; + + @Autowired + private ICraArticleService craArticleService; + + @GetMapping("/main") + @PreAuthorize("hasPermission('/cra/article/main','cra:article:main')") + public ModelAndView main() { + return jumpPage(prefix + "/main"); + } + + /** + * 查询文章管理列表 + */ + @ResponseBody + @GetMapping("/data") + @PreAuthorize("hasPermission('/cra/article/data','cra:article:data')") + public ResultTable list(@ModelAttribute CraArticle craArticle, PageDomain pageDomain) { + PageInfo pageInfo = craArticleService.selectCraArticlePage(craArticle, pageDomain); + return pageTable(pageInfo.getList(), pageInfo.getTotal()); + } + + /** + * 新增文章管理 + */ + @GetMapping("/add") + @PreAuthorize("hasPermission('/cra/article/add','cra:article:add')") + public ModelAndView add() { + return jumpPage(prefix + "/add"); + } + + /** + * 新增文章管理 + */ + @ResponseBody + @PostMapping("/save") + @PreAuthorize("hasPermission('/cra/article/add','cra:article:add')") + public Result save(@RequestBody CraArticle craArticle) { + return decide(craArticleService.save(craArticle)); + } + + /** + * 修改文章管理 + */ + @GetMapping("/edit") + @PreAuthorize("hasPermission('/cra/article/edit','cra:article:edit')") + public ModelAndView edit(String articleId, ModelMap map) { + CraArticle craArticle =craArticleService.getById(articleId); + map.put("craArticle", craArticle); + return jumpPage(prefix + "/edit"); + } + + /** + * 修改文章管理 + */ + @ResponseBody + @PutMapping("/update") + @PreAuthorize("hasPermission('/cra/article/edit','cra:article:edit')") + public Result update(@RequestBody CraArticle craArticle) { + return decide(craArticleService.updateById(craArticle)); + } + + /** + * 删除文章管理 + */ + @ResponseBody + @DeleteMapping("/batchRemove") + @PreAuthorize("hasPermission('/cra/article/remove','cra:article:remove')") + public Result batchRemove(String ids) { + return decide(craArticleService.removeByIds(Arrays.asList(ids.split(",")))); + } + + /** + * 删除文章管理 + */ + @ResponseBody + @DeleteMapping("/remove/{articleId}") + @PreAuthorize("hasPermission('/cra/article/remove','cra:article:remove')") + public Result remove(@PathVariable("articleId") String articleId) { + return decide(craArticleService.removeById(articleId)); + } +} diff --git a/src/main/java/com/pearadmin/modules/cra/domain/CraArticle.java b/src/main/java/com/pearadmin/modules/cra/domain/CraArticle.java new file mode 100644 index 00000000..cfeccece --- /dev/null +++ b/src/main/java/com/pearadmin/modules/cra/domain/CraArticle.java @@ -0,0 +1,71 @@ +// +---------------------------------------------------------------------- +// | HJHCOS [ Laziness is creativity ] +// +---------------------------------------------------------------------- +// | Copyright (c) https://hjhcos.cn All rights reserved. +// +---------------------------------------------------------------------- +// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 ) +// +---------------------------------------------------------------------- +// | Author: hjhcos +// +---------------------------------------------------------------------- +package com.pearadmin.modules.cra.domain; + +import java.time.LocalDateTime; +import java.util.Date; + +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; + +/** + * 文章管理实体 + * + * @author hjhcos + * @date 2022-05-16 + */ +public class CraArticle { + /** 文章 id */ + @TableId + private String articleId; + + /** 文章作者 */ + private String articleAuthor; + + /** 文章标题 */ + private String articleTitle; + + /** 文章描述 */ + private String articleDesc; + + /** 发布时间 */ + private Date postTime; + + /** 数据地址 */ + private String url; + + /** 状态码 */ + private Long code; + + /** + * 创建时间 + */ + @TableField(value = "create_time", fill = FieldFill.INSERT) + private LocalDateTime createTime; + + /** + * 创建人 + */ + @TableField(value = "create_by", fill = FieldFill.INSERT) + private String createBy; + + /** + * 修改时间 + */ + @TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE) + private LocalDateTime updateTime; + + /** + * 修改人 + */ + @TableField(value = "update_by", fill = FieldFill.INSERT_UPDATE) + private String updateBy; +} diff --git a/src/main/java/com/pearadmin/modules/cra/mapper/CraArticleMapper.java b/src/main/java/com/pearadmin/modules/cra/mapper/CraArticleMapper.java new file mode 100644 index 00000000..4be018c3 --- /dev/null +++ b/src/main/java/com/pearadmin/modules/cra/mapper/CraArticleMapper.java @@ -0,0 +1,34 @@ +// +---------------------------------------------------------------------- +// | HJHCOS [ Laziness is creativity ] +// +---------------------------------------------------------------------- +// | Copyright (c) https://hjhcos.cn All rights reserved. +// +---------------------------------------------------------------------- +// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 ) +// +---------------------------------------------------------------------- +// | Author: hjhcos +// +---------------------------------------------------------------------- +package com.pearadmin.modules.cra.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.pearadmin.modules.cra.domain.CraArticle; +import org.apache.ibatis.annotations.Mapper; + +import java.util.List; + +/** + * 文章管理Mapper接口 + * + * @author hjhcos + * @date 2022-05-16 + */ +@Mapper +public interface CraArticleMapper extends BaseMapper { + /** + * 查询文章管理列表 + * + * @param craArticle 文章管理 + * @return 文章管理集合 + */ + List selectCraArticleList(CraArticle craArticle); + +} diff --git a/src/main/java/com/pearadmin/modules/cra/mapper/xml/CraArticleMapper.xml b/src/main/java/com/pearadmin/modules/cra/mapper/xml/CraArticleMapper.xml new file mode 100644 index 00000000..1f55d7db --- /dev/null +++ b/src/main/java/com/pearadmin/modules/cra/mapper/xml/CraArticleMapper.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/java/com/pearadmin/modules/cra/service/ICraArticleService.java b/src/main/java/com/pearadmin/modules/cra/service/ICraArticleService.java new file mode 100644 index 00000000..ba8778c3 --- /dev/null +++ b/src/main/java/com/pearadmin/modules/cra/service/ICraArticleService.java @@ -0,0 +1,33 @@ +// +---------------------------------------------------------------------- +// | HJHCOS [ Laziness is creativity ] +// +---------------------------------------------------------------------- +// | Copyright (c) https://hjhcos.cn All rights reserved. +// +---------------------------------------------------------------------- +// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 ) +// +---------------------------------------------------------------------- +// | Author: hjhcos +// +---------------------------------------------------------------------- +package com.pearadmin.modules.cra.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.github.pagehelper.PageInfo; +import com.pearadmin.common.web.domain.request.PageDomain; +import com.pearadmin.modules.cra.domain.CraArticle; + +/** + * 文章管理Service接口 + * + * @author hjhcos + * @date 2022-05-16 + */ +public interface ICraArticleService extends IService { + + /** + * 查询文章管理 + * @param craArticle 文章管理 + * @param pageDomain + * @return 文章管理 分页集合 + * */ + PageInfo selectCraArticlePage(CraArticle craArticle, PageDomain pageDomain); + +} diff --git a/src/main/java/com/pearadmin/modules/cra/service/impl/CraArticleServiceImpl.java b/src/main/java/com/pearadmin/modules/cra/service/impl/CraArticleServiceImpl.java new file mode 100644 index 00000000..da02f909 --- /dev/null +++ b/src/main/java/com/pearadmin/modules/cra/service/impl/CraArticleServiceImpl.java @@ -0,0 +1,46 @@ +// +---------------------------------------------------------------------- +// | HJHCOS [ Laziness is creativity ] +// +---------------------------------------------------------------------- +// | Copyright (c) https://hjhcos.cn All rights reserved. +// +---------------------------------------------------------------------- +// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 ) +// +---------------------------------------------------------------------- +// | Author: hjhcos +// +---------------------------------------------------------------------- +package com.pearadmin.modules.cra.service.impl; + +import java.util.List; +import java.util.ArrayList; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import com.pearadmin.common.web.domain.request.PageDomain; +import org.springframework.stereotype.Service; +import com.pearadmin.modules.cra.mapper.CraArticleMapper; +import com.pearadmin.modules.cra.domain.CraArticle; +import com.pearadmin.modules.cra.service.ICraArticleService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; + +/** + * 文章管理Service业务层处理 + * + * @author hjhcos + * @date 2022-05-16 + */ +@Service +public class CraArticleServiceImpl extends ServiceImpl implements ICraArticleService { + + + /** + * 查询文章管理 + * @param craArticle 文章管理 + * @param pageDomain + * @return 文章管理 分页集合 + * */ + @Override + public PageInfo selectCraArticlePage(CraArticle craArticle, PageDomain pageDomain) { + PageHelper.startPage(pageDomain.getPage(), pageDomain.getLimit()); + List data = baseMapper.selectCraArticleList(craArticle); + return new PageInfo<>(data); + } + +} \ No newline at end of file diff --git a/src/main/java/com/pearadmin/modules/cra/task/CrawlerArticle.java b/src/main/java/com/pearadmin/modules/cra/task/CrawlerArticle.java new file mode 100644 index 00000000..15b8595c --- /dev/null +++ b/src/main/java/com/pearadmin/modules/cra/task/CrawlerArticle.java @@ -0,0 +1,31 @@ +// +---------------------------------------------------------------------- +// | HJHCOS [ Laziness is creativity ] +// +---------------------------------------------------------------------- +// | Copyright (c) https://hjhcos.cn All rights reserved. +// +---------------------------------------------------------------------- +// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 ) +// +---------------------------------------------------------------------- +// | Author: hjhcos +// +---------------------------------------------------------------------- +package com.pearadmin.modules.cra.task; + +import com.pearadmin.modules.cra.tools.Content; +import com.pearadmin.modules.cra.tools.Https; +import org.apache.hc.core5.http.NameValuePair; + +/** + * @author hjhcos + * @date 2022/05/16 + * 爬取文章 + */ +public class CrawlerArticle implements Runnable{ + + public static Content getArticle(String url, Iterable formParams){ + return Https.get(url, formParams); + } + + @Override + public void run() { + + } +} diff --git a/src/main/java/com/pearadmin/modules/cra/tools/Https.java b/src/main/java/com/pearadmin/modules/cra/tools/Https.java index 715c99dd..06453021 100644 --- a/src/main/java/com/pearadmin/modules/cra/tools/Https.java +++ b/src/main/java/com/pearadmin/modules/cra/tools/Https.java @@ -15,6 +15,11 @@ import org.apache.hc.core5.http.NameValuePair; import java.io.IOException; import java.nio.charset.StandardCharsets; +/** + * @author hjhcos + * @date 2022/05/12 + * 网络请求工具 + */ public class Https extends Request{ Https(ClassicHttpRequest request) { @@ -44,6 +49,7 @@ public class Https extends Request{ req.setHeader(parameter.getName(), parameter.getValue()); } } + Content content = req.execute().returnContent(); return req.execute().returnContent(); } catch (IOException e) { e.printStackTrace(); diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml index acd43079..82d5d66e 100644 --- a/src/main/resources/application-dev.yml +++ b/src/main/resources/application-dev.yml @@ -71,4 +71,8 @@ spring: # Quartz 配置 quartz: properties: - tablePrefix: schedule_ \ No newline at end of file + tablePrefix: schedule_ + # 热部署 + devtools: + restart: + enabled: true \ No newline at end of file diff --git a/src/main/resources/templates/cra/article/add.html b/src/main/resources/templates/cra/article/add.html new file mode 100644 index 00000000..e303590c --- /dev/null +++ b/src/main/resources/templates/cra/article/add.html @@ -0,0 +1,120 @@ + + + + + + +
+
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+
+ +
+
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+
+
+
+ + +
+
+
+ + + + \ No newline at end of file diff --git a/src/main/resources/templates/cra/article/edit.html b/src/main/resources/templates/cra/article/edit.html new file mode 100644 index 00000000..dc4f8d40 --- /dev/null +++ b/src/main/resources/templates/cra/article/edit.html @@ -0,0 +1,121 @@ + + + + + + +
+
+
+ +
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+
+ +
+
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+
+
+
+ + +
+
+
+ + + + \ No newline at end of file diff --git a/src/main/resources/templates/cra/article/main.html b/src/main/resources/templates/cra/article/main.html new file mode 100644 index 00000000..ec415264 --- /dev/null +++ b/src/main/resources/templates/cra/article/main.html @@ -0,0 +1,224 @@ + + + + + + +
+
+
+
+
+ +
+ +
+ +
+ +
+ +
+ +
+ + +
+
+
+
+
+
+
+
+ + +
+
+ + + + \ No newline at end of file diff --git a/src/main/resources/templates/cra/task/main.html b/src/main/resources/templates/cra/task/main.html index dc574b30..84b0185f 100644 --- a/src/main/resources/templates/cra/task/main.html +++ b/src/main/resources/templates/cra/task/main.html @@ -4,7 +4,62 @@ -
+
+
+
+
+
+ +
+ +
+ + +
+
+
+
+
+
+
+
+ + +
+
+ + + - -
- - - - - + + + + + + - + }) + \ No newline at end of file -- Gitee From 9576adfe35c51a030e24d953495f71d513fa0ef7 Mon Sep 17 00:00:00 2001 From: hjhcos <3140546263@qq.com> Date: Fri, 20 May 2022 00:16:59 +0800 Subject: [PATCH 05/74] =?UTF-8?q?=F0=9F=95=B7=E7=88=AC=E5=8F=96=E6=A8=A1?= =?UTF-8?q?=E6=9D=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cra/controller/CraTaskController.java | 7 +++ .../modules/cra/schedule/Crawler.java | 60 +++++++++++++++++++ .../{task => schedule}/CrawlerArticle.java | 21 ++----- .../modules/cra/schedule/CrawlerVideo.java | 18 ++++++ 4 files changed, 89 insertions(+), 17 deletions(-) create mode 100644 src/main/java/com/pearadmin/modules/cra/schedule/Crawler.java rename src/main/java/com/pearadmin/modules/cra/{task => schedule}/CrawlerArticle.java (56%) create mode 100644 src/main/java/com/pearadmin/modules/cra/schedule/CrawlerVideo.java diff --git a/src/main/java/com/pearadmin/modules/cra/controller/CraTaskController.java b/src/main/java/com/pearadmin/modules/cra/controller/CraTaskController.java index 20230346..a1e61f46 100644 --- a/src/main/java/com/pearadmin/modules/cra/controller/CraTaskController.java +++ b/src/main/java/com/pearadmin/modules/cra/controller/CraTaskController.java @@ -8,6 +8,7 @@ import com.pearadmin.common.web.base.BaseController; import com.pearadmin.common.web.domain.request.PageDomain; import com.pearadmin.common.web.domain.response.Result; import com.pearadmin.common.web.domain.response.module.ResultTable; +import com.sun.net.httpserver.Authenticator; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.ui.ModelMap; @@ -33,6 +34,12 @@ public class CraTaskController extends BaseController { @Autowired private ICraTaskService craTaskService; + @GetMapping("/run") + @PreAuthorize("hasAnyAuthority('/cra/task/run', 'cra:task:run')") + public Result run(@ModelAttribute CraTask craTask){ + return success("运行成功!"); + } + @GetMapping("/main") @PreAuthorize("hasPermission('/cra/task/main','cra:task:main')") public ModelAndView main() { diff --git a/src/main/java/com/pearadmin/modules/cra/schedule/Crawler.java b/src/main/java/com/pearadmin/modules/cra/schedule/Crawler.java new file mode 100644 index 00000000..b2a296bc --- /dev/null +++ b/src/main/java/com/pearadmin/modules/cra/schedule/Crawler.java @@ -0,0 +1,60 @@ +// +---------------------------------------------------------------------- +// | HJHCOS [ Laziness is creativity ] +// +---------------------------------------------------------------------- +// | Copyright (c) https://hjhcos.cn All rights reserved. +// +---------------------------------------------------------------------- +// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 ) +// +---------------------------------------------------------------------- +// | Author: hjhcos +// +---------------------------------------------------------------------- +package com.pearadmin.modules.cra.schedule; + +import com.pearadmin.common.quartz.base.BaseQuartz; +import com.pearadmin.modules.cra.tools.Content; + +/** + * @author hjhcos + * @date 2022/05/19 + * 爬虫数据接口 + * 1. 数据爬取 + * 2. 数据解析 + * 3. 数据缓冲 + * 4. 数据保存 + */ +public abstract class Crawler implements BaseQuartz { + + /** + * 数据爬取 + * @param url 请求链接 + * @return 数据内容 + */ + protected abstract Content getContent(String url); + + /** + * 数据解析 + * @param content 数据 + * @return 返回处理后的数据格式 + */ + protected abstract T parseData(Content content); + + /** + * 数据缓冲 + * @param data 数据 + * @return 数据 + */ + protected abstract T cacheData(T data); + + /** + * 数据保存 + * @param data 数据 + * @return 是否保存成功 + */ + protected abstract Boolean save(T data); + + /** + * 执行任务 + * @param params 参数 + */ + @Override + public abstract void run(String params); +} diff --git a/src/main/java/com/pearadmin/modules/cra/task/CrawlerArticle.java b/src/main/java/com/pearadmin/modules/cra/schedule/CrawlerArticle.java similarity index 56% rename from src/main/java/com/pearadmin/modules/cra/task/CrawlerArticle.java rename to src/main/java/com/pearadmin/modules/cra/schedule/CrawlerArticle.java index 15b8595c..191f4021 100644 --- a/src/main/java/com/pearadmin/modules/cra/task/CrawlerArticle.java +++ b/src/main/java/com/pearadmin/modules/cra/schedule/CrawlerArticle.java @@ -7,25 +7,12 @@ // +---------------------------------------------------------------------- // | Author: hjhcos // +---------------------------------------------------------------------- -package com.pearadmin.modules.cra.task; - -import com.pearadmin.modules.cra.tools.Content; -import com.pearadmin.modules.cra.tools.Https; -import org.apache.hc.core5.http.NameValuePair; +package com.pearadmin.modules.cra.schedule; /** * @author hjhcos - * @date 2022/05/16 - * 爬取文章 + * @date 2022/05/19 + * 获取文章 */ -public class CrawlerArticle implements Runnable{ - - public static Content getArticle(String url, Iterable formParams){ - return Https.get(url, formParams); - } - - @Override - public void run() { - - } +public abstract class CrawlerArticle extends Crawler{ } diff --git a/src/main/java/com/pearadmin/modules/cra/schedule/CrawlerVideo.java b/src/main/java/com/pearadmin/modules/cra/schedule/CrawlerVideo.java new file mode 100644 index 00000000..6ab3bded --- /dev/null +++ b/src/main/java/com/pearadmin/modules/cra/schedule/CrawlerVideo.java @@ -0,0 +1,18 @@ +// +---------------------------------------------------------------------- +// | HJHCOS [ Laziness is creativity ] +// +---------------------------------------------------------------------- +// | Copyright (c) https://hjhcos.cn All rights reserved. +// +---------------------------------------------------------------------- +// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 ) +// +---------------------------------------------------------------------- +// | Author: hjhcos +// +---------------------------------------------------------------------- +package com.pearadmin.modules.cra.schedule; + +/** + * @author hjhcos + * @date 2022/05/19 + * 爬取视频 + */ +public abstract class CrawlerVideo extends Crawler{ +} -- Gitee From cc2b0d966683bdf0840518d1b3a5ca804fb8382f Mon Sep 17 00:00:00 2001 From: hjhcos <3140546263@qq.com> Date: Fri, 20 May 2022 23:49:26 +0800 Subject: [PATCH 06/74] =?UTF-8?q?=F0=9F=95=B7=E6=95=B0=E6=8D=AE=E9=A2=84?= =?UTF-8?q?=E8=A7=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cra/controller/CraTaskController.java | 9 +++------ .../resources/templates/cra/task/main.html | 18 +++++++++++++++++- 2 files changed, 20 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/pearadmin/modules/cra/controller/CraTaskController.java b/src/main/java/com/pearadmin/modules/cra/controller/CraTaskController.java index a1e61f46..5fc34f28 100644 --- a/src/main/java/com/pearadmin/modules/cra/controller/CraTaskController.java +++ b/src/main/java/com/pearadmin/modules/cra/controller/CraTaskController.java @@ -1,14 +1,12 @@ package com.pearadmin.modules.cra.controller; import com.github.pagehelper.PageInfo; -import com.pearadmin.common.context.UserContext; import com.pearadmin.modules.cra.domain.CraTask; -import com.pearadmin.common.tools.string.Convert; import com.pearadmin.common.web.base.BaseController; import com.pearadmin.common.web.domain.request.PageDomain; import com.pearadmin.common.web.domain.response.Result; import com.pearadmin.common.web.domain.response.module.ResultTable; -import com.sun.net.httpserver.Authenticator; +import com.pearadmin.modules.cra.tools.Https; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.ui.ModelMap; @@ -16,7 +14,6 @@ import org.springframework.web.bind.annotation.*; import org.springframework.web.servlet.ModelAndView; import com.pearadmin.modules.cra.service.ICraTaskService; -import java.time.LocalDateTime; import java.util.Arrays; /** @@ -36,8 +33,8 @@ public class CraTaskController extends BaseController { @GetMapping("/run") @PreAuthorize("hasAnyAuthority('/cra/task/run', 'cra:task:run')") - public Result run(@ModelAttribute CraTask craTask){ - return success("运行成功!"); + public Result run(String craId){ + return success(Https.get(craTaskService.getById(craId).getUrl(), null).asString()); } @GetMapping("/main") diff --git a/src/main/resources/templates/cra/task/main.html b/src/main/resources/templates/cra/task/main.html index fc0ec493..c804b033 100644 --- a/src/main/resources/templates/cra/task/main.html +++ b/src/main/resources/templates/cra/task/main.html @@ -43,6 +43,10 @@ + \ No newline at end of file diff --git a/src/main/resources/templates/cra/video/edit.html b/src/main/resources/templates/cra/video/edit.html new file mode 100644 index 00000000..a02fc09a --- /dev/null +++ b/src/main/resources/templates/cra/video/edit.html @@ -0,0 +1,128 @@ + + + + + + +
+
+
+ +
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+
+ +
+
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+
+
+
+ + +
+
+
+ + + + \ No newline at end of file diff --git a/src/main/resources/templates/cra/video/main.html b/src/main/resources/templates/cra/video/main.html new file mode 100644 index 00000000..8a22e5ac --- /dev/null +++ b/src/main/resources/templates/cra/video/main.html @@ -0,0 +1,232 @@ + + + + + + +
+
+
+
+
+ +
+ +
+ +
+ +
+ +
+ +
+ + +
+
+
+
+
+
+
+
+ + +
+
+ + + + \ No newline at end of file -- Gitee From 676f6001a18ada70c13bd1a59a70d86ae08589e7 Mon Sep 17 00:00:00 2001 From: hjhcos <3140546263@qq.com> Date: Sat, 21 May 2022 01:58:08 +0800 Subject: [PATCH 09/74] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=20OSS?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 8 ++ .../common/constant/SystemConstant.java | 16 +++ .../common/web/base/domain/BaseDomain.java | 78 +++++++++++++++ .../common/web/base/page/PageRequest.java | 42 ++++++++ .../common/web/base/page/PageResponse.java | 55 +++++++++++ .../common/web/base/page/Pageable.java | 94 ++++++++++++++++++ .../modules/oss/cloud/StorageConfig.java | 22 +++++ .../modules/oss/cloud/StorageService.java | 15 +++ .../oss/cloud/impl/CloudStorageConfig.java | 35 +++++++ .../oss/cloud/impl/CloudStorageService.java | 59 +++++++++++ .../pearadmin/modules/oss/domain/SysOss.java | 67 +++++++++++++ .../modules/oss/param/SysOssRequest.java | 16 +++ .../oss/repository/SysOssRepository.java | 20 ++++ .../oss/repository/xml/SysOssRepository.xml | 9 ++ .../modules/oss/rest/SysOssController.java | 69 +++++++++++++ .../modules/oss/service/SysOssService.java | 40 ++++++++ .../oss/service/impl/SysOssServiceImpl.java | 99 +++++++++++++++++++ 17 files changed, 744 insertions(+) create mode 100644 src/main/java/com/pearadmin/common/web/base/domain/BaseDomain.java create mode 100644 src/main/java/com/pearadmin/common/web/base/page/PageRequest.java create mode 100644 src/main/java/com/pearadmin/common/web/base/page/PageResponse.java create mode 100644 src/main/java/com/pearadmin/common/web/base/page/Pageable.java create mode 100644 src/main/java/com/pearadmin/modules/oss/cloud/StorageConfig.java create mode 100644 src/main/java/com/pearadmin/modules/oss/cloud/StorageService.java create mode 100644 src/main/java/com/pearadmin/modules/oss/cloud/impl/CloudStorageConfig.java create mode 100644 src/main/java/com/pearadmin/modules/oss/cloud/impl/CloudStorageService.java create mode 100644 src/main/java/com/pearadmin/modules/oss/domain/SysOss.java create mode 100644 src/main/java/com/pearadmin/modules/oss/param/SysOssRequest.java create mode 100644 src/main/java/com/pearadmin/modules/oss/repository/SysOssRepository.java create mode 100644 src/main/java/com/pearadmin/modules/oss/repository/xml/SysOssRepository.xml create mode 100644 src/main/java/com/pearadmin/modules/oss/rest/SysOssController.java create mode 100644 src/main/java/com/pearadmin/modules/oss/service/SysOssService.java create mode 100644 src/main/java/com/pearadmin/modules/oss/service/impl/SysOssServiceImpl.java diff --git a/pom.xml b/pom.xml index 41071783..83726e5f 100644 --- a/pom.xml +++ b/pom.xml @@ -22,6 +22,8 @@ + + 3.10.2 1.8 @@ -80,6 +82,12 @@ + + + com.aliyun.oss + aliyun-sdk-oss + ${oss.version} + org.springframework.boot diff --git a/src/main/java/com/pearadmin/common/constant/SystemConstant.java b/src/main/java/com/pearadmin/common/constant/SystemConstant.java index 9bae724c..759f8d03 100644 --- a/src/main/java/com/pearadmin/common/constant/SystemConstant.java +++ b/src/main/java/com/pearadmin/common/constant/SystemConstant.java @@ -31,4 +31,20 @@ public class SystemConstant { * 空串 */ public static String EMPTY = ""; + + /** + * 阿里云 + * */ + public static final String ALIYUN = "aliyun"; + + /** + * 七牛 + * */ + public static final String QINIU = "qiniu"; + + /** + * 腾讯云 + * */ + public static final String TENCENT = "tencent"; + } diff --git a/src/main/java/com/pearadmin/common/web/base/domain/BaseDomain.java b/src/main/java/com/pearadmin/common/web/base/domain/BaseDomain.java new file mode 100644 index 00000000..2f287cd7 --- /dev/null +++ b/src/main/java/com/pearadmin/common/web/base/domain/BaseDomain.java @@ -0,0 +1,78 @@ +// +---------------------------------------------------------------------- +// | HJHCOS [ Laziness is creativity ] +// +---------------------------------------------------------------------- +// | Copyright (c) https://hjhcos.cn All rights reserved. +// +---------------------------------------------------------------------- +// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 ) +// +---------------------------------------------------------------------- +// | Author: hjhcos +// +---------------------------------------------------------------------- +package com.pearadmin.common.web.base.domain; + +import com.alibaba.excel.annotation.ExcelIgnore; +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.TableField; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + * Base 实体 + * + * Author: 就 眠 仪 式 + * CreateTime: 2021/03/23 + * */ +@Data +public class BaseDomain implements Serializable { + + /** + * 创建人 + * */ + @ExcelIgnore + @TableField(value = "create_by", fill = FieldFill.INSERT) + @ApiModelProperty("创建人") + private String createBy; + + /** + * 创建时间 + * */ + @ExcelIgnore + @TableField(value = "create_time", fill = FieldFill.INSERT) + @ApiModelProperty("创建时间") + private LocalDateTime createTime; + + /** + * 修改人 + * */ + @ExcelIgnore + @TableField(value = "update_by", fill = FieldFill.INSERT_UPDATE) + @ApiModelProperty("修改人") + private String updateBy; + + /** + * 修改时间 + * */ + @ExcelIgnore + @TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE) + @ApiModelProperty("修改时间") + private LocalDateTime updateTime; + + /** + * 删除 + * */ + @ExcelIgnore + @TableField(value = "deleted", fill = FieldFill.INSERT) + @ApiModelProperty("逻辑删除") + private boolean deleted; + + /** + * 备注 + * */ + @ExcelIgnore + @TableField("remark") + @ApiModelProperty("备注") + private String remark; + +} + diff --git a/src/main/java/com/pearadmin/common/web/base/page/PageRequest.java b/src/main/java/com/pearadmin/common/web/base/page/PageRequest.java new file mode 100644 index 00000000..5459061a --- /dev/null +++ b/src/main/java/com/pearadmin/common/web/base/page/PageRequest.java @@ -0,0 +1,42 @@ +// +---------------------------------------------------------------------- +// | HJHCOS [ Laziness is creativity ] +// +---------------------------------------------------------------------- +// | Copyright (c) https://hjhcos.cn All rights reserved. +// +---------------------------------------------------------------------- +// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 ) +// +---------------------------------------------------------------------- +// | Author: hjhcos +// +---------------------------------------------------------------------- +package com.pearadmin.common.web.base.page; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 分 页 参 数 + * + * Author: 就 眠 仪 式 + * CreateTime: 2021/04/01 + * */ +@Data +@ApiModel("分页实体") +@NoArgsConstructor +@AllArgsConstructor +public class PageRequest { + + /** + * 当前页码 + * */ + @ApiModelProperty("当前页码") + private int pageNum = 1; + + /** + * 每页数量 + * */ + @ApiModelProperty("每页数量") + private int pageSize = 10; +} + diff --git a/src/main/java/com/pearadmin/common/web/base/page/PageResponse.java b/src/main/java/com/pearadmin/common/web/base/page/PageResponse.java new file mode 100644 index 00000000..ffa7f18a --- /dev/null +++ b/src/main/java/com/pearadmin/common/web/base/page/PageResponse.java @@ -0,0 +1,55 @@ +// +---------------------------------------------------------------------- +// | HJHCOS [ Laziness is creativity ] +// +---------------------------------------------------------------------- +// | Copyright (c) https://hjhcos.cn All rights reserved. +// +---------------------------------------------------------------------- +// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 ) +// +---------------------------------------------------------------------- +// | Author: hjhcos +// +---------------------------------------------------------------------- +package com.pearadmin.common.web.base.page; + +import com.github.pagehelper.PageInfo; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +/** + * 分 页 结 果 + * + * Author: 就 眠 仪 式 + * CreateTime: 2021/04/01 + * */ +@Data +@NoArgsConstructor +public class PageResponse { + + /** + * 总页数 + * */ + private long total; + + /** + * 分页后的数据 + * */ + private List record; + + /** + * 构建实体 + * */ + public PageResponse(int total, List record){ + this.total = total; + this.record = record; + } + + /** + * 构建实体 + * */ + public PageResponse(PageInfo pageInfo){ + this.record = pageInfo.getList(); + this.total = pageInfo.getTotal(); + } +} + diff --git a/src/main/java/com/pearadmin/common/web/base/page/Pageable.java b/src/main/java/com/pearadmin/common/web/base/page/Pageable.java new file mode 100644 index 00000000..9601a5cf --- /dev/null +++ b/src/main/java/com/pearadmin/common/web/base/page/Pageable.java @@ -0,0 +1,94 @@ +// +---------------------------------------------------------------------- +// | HJHCOS [ Laziness is creativity ] +// +---------------------------------------------------------------------- +// | Copyright (c) https://hjhcos.cn All rights reserved. +// +---------------------------------------------------------------------- +// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 ) +// +---------------------------------------------------------------------- +// | Author: hjhcos +// +---------------------------------------------------------------------- +package com.pearadmin.common.web.base.page; + +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import java.util.stream.Collectors; +import java.util.Collections; +import java.util.List; + +/** + * 分 页 工 具 + * + * Author: 就 眠 仪 式 + * CreateTime: 2021/04/01 + * */ +public class Pageable { + + /** + * 私有构造方法 + * + * */ + private Pageable(){ } + + /** + * 内存分页 + * + * @param records 待分页的数据 + * @param pageIndex 当前页码 + * @param pageSize 每页显示的条数 + * @return 分页数据 {@link PageResponse} + */ + public static List of(List records, int pageIndex, int pageSize) { + if (records==null) { + return Collections.emptyList(); + } + int totalCount = records.size(); + int remainder = totalCount % pageSize; + int pageCount = (remainder > 0) ? totalCount/pageSize + 1 : totalCount/pageSize; + if (remainder == 0) { + return records.stream().skip((pageIndex - 1) * pageSize).limit(pageSize).collect(Collectors.toList()); + } else { + if (pageIndex == pageCount) { + return records.stream().skip((pageIndex - 1) * pageSize).limit(totalCount).collect(Collectors.toList()); + } else { + return records.stream().skip((pageIndex - 1) * pageSize).limit(pageSize).collect(Collectors.toList()); + } + } + } + + /** + * 内存分页 + * + * @param request 分页参数 + * @param records 待分页的数据 + * @return 分页数据 {@link PageResponse} + */ + public static PageResponse of(PageRequest request, List records) { + return new PageResponse(records.size(), + of( + records, + request.getPageNum(), + request.getPageSize() + )); + } + + /** + * 物理分页 + * + * @param request 分页参数 + * @return 分页数据 {@link PageResponse} + * */ + public static PageResponse of(PageRequest request, Record record){ + PageHelper.startPage(request.getPageNum(),request.getPageSize()); + return new PageResponse<>(new PageInfo<>(record.invoke())); + } + + /** + * 内部类 + * + * 常用于分页数据的来源实现 + * */ + public interface Record { + + List invoke(); + } +} diff --git a/src/main/java/com/pearadmin/modules/oss/cloud/StorageConfig.java b/src/main/java/com/pearadmin/modules/oss/cloud/StorageConfig.java new file mode 100644 index 00000000..eaecffba --- /dev/null +++ b/src/main/java/com/pearadmin/modules/oss/cloud/StorageConfig.java @@ -0,0 +1,22 @@ +package com.pearadmin.modules.oss.cloud; + +import com.pearadmin.common.constant.SystemConstant; +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +@Data +@Component +@ConfigurationProperties(prefix = "upload") +public class StorageConfig { + + /** + * Aliyun 阿里云 + * + * Qiniu 七牛 + * + * Tencent 腾讯 + * */ + private String location = SystemConstant.ALIYUN; + +} diff --git a/src/main/java/com/pearadmin/modules/oss/cloud/StorageService.java b/src/main/java/com/pearadmin/modules/oss/cloud/StorageService.java new file mode 100644 index 00000000..b1c287b9 --- /dev/null +++ b/src/main/java/com/pearadmin/modules/oss/cloud/StorageService.java @@ -0,0 +1,15 @@ +package com.pearadmin.modules.oss.cloud; + +import org.springframework.web.multipart.MultipartFile; + +public interface StorageService { + + /** + * 文件上传 + * + * @param file 文件 + * + * @return {@link String} 存储路径 + * */ + String upload(MultipartFile file); +} diff --git a/src/main/java/com/pearadmin/modules/oss/cloud/impl/CloudStorageConfig.java b/src/main/java/com/pearadmin/modules/oss/cloud/impl/CloudStorageConfig.java new file mode 100644 index 00000000..a8091512 --- /dev/null +++ b/src/main/java/com/pearadmin/modules/oss/cloud/impl/CloudStorageConfig.java @@ -0,0 +1,35 @@ +package com.pearadmin.modules.oss.cloud.impl; + +import lombok.Data; +import com.aliyun.oss.OSS; +import com.aliyun.oss.OSSClientBuilder; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.stereotype.Component; + +/** + * 阿里云 Oss 存储配置 + * + * Author: 就 眠 仪 式 + * CreateTime: 2021/04/21 + * */ +@Data +@Component +@ConfigurationProperties(prefix = "aliyun.oss") +public class CloudStorageConfig { + + private Boolean enable; + + private String endpoint; + + private String accessKeyId; + + private String accessKeySecret; + + private String bucketName; + + @Bean + public OSS initOSSClient() { + return new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret); + } +} diff --git a/src/main/java/com/pearadmin/modules/oss/cloud/impl/CloudStorageService.java b/src/main/java/com/pearadmin/modules/oss/cloud/impl/CloudStorageService.java new file mode 100644 index 00000000..df2523b8 --- /dev/null +++ b/src/main/java/com/pearadmin/modules/oss/cloud/impl/CloudStorageService.java @@ -0,0 +1,59 @@ +package com.pearadmin.modules.oss.cloud.impl; + +import com.aliyun.oss.OSS; +import com.aliyun.oss.model.CannedAccessControlList; +import com.pearadmin.modules.oss.cloud.StorageService; +import org.springframework.stereotype.Component; +import org.springframework.web.multipart.MultipartFile; +import javax.annotation.Resource; +import java.io.IOException; +import java.io.InputStream; +import java.util.UUID; + +/** + * 阿里云 Oss 存储服务 + * + * Author: 就 眠 仪 式 + * CreateTime: 2021/04/21 + * */ +@Component +public class CloudStorageService implements StorageService { + + @Resource + private CloudStorageConfig cloudStorageConfig; + + @Resource + private OSS ossClient; + + public String upload(MultipartFile file) + { + try { + + /// 默认配置 + String bucketName = cloudStorageConfig.getBucketName(); + String endpoint = cloudStorageConfig.getEndpoint(); + + /// 检验空间 + if(ossClient.doesBucketExist(bucketName)) { + ossClient.createBucket(bucketName); + ossClient.setBucketAcl(bucketName, CannedAccessControlList.PublicRead); + } + + /// 存储路径 + String original = file.getOriginalFilename(); + String suffix = original.substring(original.lastIndexOf(".")); + String fileName = UUID.randomUUID().toString(); + String newName = fileName + suffix; + InputStream inputStream = file.getInputStream(); + + ossClient.putObject(bucketName,newName,inputStream); + + /// 访问路径 + return "http://" + bucketName + "." + endpoint + "/" + newName; + + } catch (IOException e) { + throw new RuntimeException(); + } + } + +} diff --git a/src/main/java/com/pearadmin/modules/oss/domain/SysOss.java b/src/main/java/com/pearadmin/modules/oss/domain/SysOss.java new file mode 100644 index 00000000..a6cb43bf --- /dev/null +++ b/src/main/java/com/pearadmin/modules/oss/domain/SysOss.java @@ -0,0 +1,67 @@ +package com.pearadmin.modules.oss.domain; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.apache.ibatis.type.Alias; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.pearadmin.common.web.base.domain.BaseDomain; + +/** + * 文件模型 + * + * Author: 就 眠 仪 式 + * CreateTime: 2020/10/23 + * */ +@EqualsAndHashCode(callSuper = true) +@Data +@Alias("SysOss") +@TableName("sys_oss") +public class SysOss extends BaseDomain { + + /** + * 编号 + */ + @TableId + private String id; + + /** + * 名称 + */ + @TableField("name") + private String name; + + /** + * 文件存储位置 + * + * 1:阿里云 + */ + @TableField("location") + private String location; + + /** + * 桶 + * */ + @TableField("bucket") + private String bucket; + + /** + * 后缀 + */ + @TableField("suffix") + private String suffix; + + /** + * 文件大小 + */ + @TableField("size") + private Long size; + + /** + * 路径 + */ + @TableField("path") + private String path; + +} diff --git a/src/main/java/com/pearadmin/modules/oss/param/SysOssRequest.java b/src/main/java/com/pearadmin/modules/oss/param/SysOssRequest.java new file mode 100644 index 00000000..b46c752c --- /dev/null +++ b/src/main/java/com/pearadmin/modules/oss/param/SysOssRequest.java @@ -0,0 +1,16 @@ +package com.pearadmin.modules.oss.param; + +import com.pearadmin.common.web.base.page.PageRequest; +import lombok.Data; + +/** + * 文件列表 -- 参数实体 + * + * Author: 就 眠 仪 式 + * CreateTime: 2021/04/01 + */ +@Data +public class SysOssRequest extends PageRequest { + + private String name; +} diff --git a/src/main/java/com/pearadmin/modules/oss/repository/SysOssRepository.java b/src/main/java/com/pearadmin/modules/oss/repository/SysOssRepository.java new file mode 100644 index 00000000..a6fcd664 --- /dev/null +++ b/src/main/java/com/pearadmin/modules/oss/repository/SysOssRepository.java @@ -0,0 +1,20 @@ +package com.pearadmin.modules.oss.repository; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.pearadmin.modules.oss.domain.SysOss; +import com.pearadmin.modules.oss.param.SysOssRequest; +import org.apache.ibatis.annotations.Mapper; +import java.util.List; + +@Mapper +public interface SysOssRepository extends BaseMapper { + + /** + * 获取文件列表 + * + * @param request 查询参数 + * + * @return {@link SysOss} + * */ + List selectFile(SysOssRequest request); +} diff --git a/src/main/java/com/pearadmin/modules/oss/repository/xml/SysOssRepository.xml b/src/main/java/com/pearadmin/modules/oss/repository/xml/SysOssRepository.xml new file mode 100644 index 00000000..dae48fd8 --- /dev/null +++ b/src/main/java/com/pearadmin/modules/oss/repository/xml/SysOssRepository.xml @@ -0,0 +1,9 @@ + + + + + + + \ No newline at end of file diff --git a/src/main/java/com/pearadmin/modules/oss/rest/SysOssController.java b/src/main/java/com/pearadmin/modules/oss/rest/SysOssController.java new file mode 100644 index 00000000..552fc3fb --- /dev/null +++ b/src/main/java/com/pearadmin/modules/oss/rest/SysOssController.java @@ -0,0 +1,69 @@ +package com.pearadmin.modules.oss.rest; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import com.pearadmin.common.aop.annotation.Log; +import io.swagger.annotations.Api; +import com.pearadmin.modules.oss.param.SysOssRequest; +import com.pearadmin.modules.oss.service.SysOssService; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; +import com.pearadmin.common.constant.ControllerConstant; +import com.pearadmin.common.web.base.BaseController; +import com.pearadmin.common.web.domain.response.Result; +import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.multipart.MultipartHttpServletRequest; + +/** + * 文件控制器 + * + * Author: 就 眠 仪 式 + * CreateTime: 2021/03/28 + * */ +@Api(tags = {"文件"}) +@RestController +@RequestMapping(ControllerConstant.API_SYSTEM_PREFIX + "oss") +public class SysOssController extends BaseController { + + @Resource + private SysOssService sysOssService; + + /** + * 查询文件列表 + * + * @param request 查询参数 + * + * @return {@link String} + */ + @GetMapping("page") + @Log(title = "文件列表") + @ApiOperation(value = "文件列表") + public Result page(SysOssRequest request){ + return success(sysOssService.page(request)); + } + + /** + * 文件上传 + * + * @param file 上传文件 + * + * @return {@link String} + */ + @PostMapping("upload") + @ApiOperation(value = "文件上传") + public Result upload(@RequestParam("file") MultipartFile file) { + if( file.isEmpty()) { return failure(); } + return success(sysOssService.upload(file)); + } + + /** + * 文件上传 + * + * @param request 上传文件 + */ + @PostMapping("multipartUpload") + @ApiOperation(value = "多文件上传") + public Result multipartUpload(HttpServletRequest request){ + return success(sysOssService.upload(((MultipartHttpServletRequest) request).getFiles("file"))); + } +} diff --git a/src/main/java/com/pearadmin/modules/oss/service/SysOssService.java b/src/main/java/com/pearadmin/modules/oss/service/SysOssService.java new file mode 100644 index 00000000..a4d2a44a --- /dev/null +++ b/src/main/java/com/pearadmin/modules/oss/service/SysOssService.java @@ -0,0 +1,40 @@ +package com.pearadmin.modules.oss.service; + +import com.pearadmin.common.web.base.page.PageResponse; +import com.pearadmin.modules.oss.domain.SysOss; +import com.pearadmin.modules.oss.param.SysOssRequest; +import org.springframework.web.multipart.MultipartFile; + +import java.util.List; + +public interface SysOssService { + + /** + * 获取文件列表 + * + * @param request 查询参数 + * */ + List list(SysOssRequest request); + + /** + * 获取文件列表 + * + * @param request 查询参数 + * */ + PageResponse page(SysOssRequest request); + + /** + * 文件上传 + * + * @param file 文件本身 + * */ + String upload(MultipartFile file); + + /** + * 多文件上传 + * + * @param files 文件列表 + * */ + List upload(List files); + +} diff --git a/src/main/java/com/pearadmin/modules/oss/service/impl/SysOssServiceImpl.java b/src/main/java/com/pearadmin/modules/oss/service/impl/SysOssServiceImpl.java new file mode 100644 index 00000000..343bfa2f --- /dev/null +++ b/src/main/java/com/pearadmin/modules/oss/service/impl/SysOssServiceImpl.java @@ -0,0 +1,99 @@ +package com.pearadmin.modules.oss.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.pearadmin.common.constant.SystemConstant; +import com.pearadmin.modules.oss.cloud.StorageConfig; +import com.pearadmin.modules.oss.cloud.impl.CloudStorageConfig; +import com.pearadmin.modules.oss.cloud.impl.CloudStorageService; +import com.pearadmin.common.web.base.page.PageResponse; +import com.pearadmin.common.web.base.page.Pageable; +import com.pearadmin.modules.oss.domain.SysOss; +import com.pearadmin.modules.oss.repository.SysOssRepository; +import com.pearadmin.modules.oss.param.SysOssRequest; +import com.pearadmin.modules.oss.service.SysOssService; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.multipart.MultipartFile; +import javax.annotation.Resource; +import java.util.*; + +@Service +public class SysOssServiceImpl extends ServiceImpl implements SysOssService { + + @Resource + private StorageConfig storageConfig; + + @Resource + private CloudStorageConfig cloudStorageConfig; + + @Resource + private CloudStorageService cloudStorageService; + + @Resource + private SysOssRepository sysOssRepository; + + @Override + public List list(SysOssRequest request) { + return sysOssRepository.selectFile(request); + } + + @Override + public PageResponse page(SysOssRequest request) { + return Pageable.of(request,(()-> sysOssRepository.selectFile(request))); + } + + @Override + @Transactional + public List upload(List files) { + List urls = new ArrayList<>(); + files.forEach(file -> { + urls.add(upload(file)); + }); + return urls; + } + + @Override + @Transactional + public String upload(MultipartFile file) { + + /// 基础信息 + SysOss sysOss = parseInfo(file); + + /// 本地存储 + if(storageConfig.getLocation().equals(SystemConstant.ALIYUN)) { + + /// 阿里存储 + String filePath = cloudStorageService.upload(file); + + /// 附加信息 + sysOss.setPath(filePath); + sysOss.setBucket(cloudStorageConfig.getBucketName()); + + } + + /// 存 储 记 录 + sysOssRepository.insert(sysOss); + + return null; + } + + /** + * 解析文件信息 + * + * @param file 文件实体 + * + * @return {@link SysOss} 文件信息 + * */ + private SysOss parseInfo(MultipartFile file){ + + String fileName = file.getOriginalFilename(); + + SysOss sysOss = new SysOss(); + sysOss.setLocation(storageConfig.getLocation()); + sysOss.setName(file.getOriginalFilename()); + sysOss.setSuffix(fileName.substring(fileName.lastIndexOf("."))); + sysOss.setSize(file.getSize() / 1024); + + return sysOss; + } +} -- Gitee From 7768279a099188cbb31db4f856f7b76fc14c030a Mon Sep 17 00:00:00 2001 From: hjhcos <3140546263@qq.com> Date: Sat, 21 May 2022 01:59:38 +0800 Subject: [PATCH 10/74] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=20OSS?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/web/base/domain/BaseDomain.java | 78 ------------------- 1 file changed, 78 deletions(-) delete mode 100644 src/main/java/com/pearadmin/common/web/base/domain/BaseDomain.java diff --git a/src/main/java/com/pearadmin/common/web/base/domain/BaseDomain.java b/src/main/java/com/pearadmin/common/web/base/domain/BaseDomain.java deleted file mode 100644 index 2f287cd7..00000000 --- a/src/main/java/com/pearadmin/common/web/base/domain/BaseDomain.java +++ /dev/null @@ -1,78 +0,0 @@ -// +---------------------------------------------------------------------- -// | HJHCOS [ Laziness is creativity ] -// +---------------------------------------------------------------------- -// | Copyright (c) https://hjhcos.cn All rights reserved. -// +---------------------------------------------------------------------- -// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 ) -// +---------------------------------------------------------------------- -// | Author: hjhcos -// +---------------------------------------------------------------------- -package com.pearadmin.common.web.base.domain; - -import com.alibaba.excel.annotation.ExcelIgnore; -import com.baomidou.mybatisplus.annotation.FieldFill; -import com.baomidou.mybatisplus.annotation.TableField; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; -import java.io.Serializable; -import java.time.LocalDateTime; - -/** - * Base 实体 - * - * Author: 就 眠 仪 式 - * CreateTime: 2021/03/23 - * */ -@Data -public class BaseDomain implements Serializable { - - /** - * 创建人 - * */ - @ExcelIgnore - @TableField(value = "create_by", fill = FieldFill.INSERT) - @ApiModelProperty("创建人") - private String createBy; - - /** - * 创建时间 - * */ - @ExcelIgnore - @TableField(value = "create_time", fill = FieldFill.INSERT) - @ApiModelProperty("创建时间") - private LocalDateTime createTime; - - /** - * 修改人 - * */ - @ExcelIgnore - @TableField(value = "update_by", fill = FieldFill.INSERT_UPDATE) - @ApiModelProperty("修改人") - private String updateBy; - - /** - * 修改时间 - * */ - @ExcelIgnore - @TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE) - @ApiModelProperty("修改时间") - private LocalDateTime updateTime; - - /** - * 删除 - * */ - @ExcelIgnore - @TableField(value = "deleted", fill = FieldFill.INSERT) - @ApiModelProperty("逻辑删除") - private boolean deleted; - - /** - * 备注 - * */ - @ExcelIgnore - @TableField("remark") - @ApiModelProperty("备注") - private String remark; - -} - -- Gitee From 3eb776fab59ac77817fad1278402b4cdc11ff9af Mon Sep 17 00:00:00 2001 From: hjhcos <3140546263@qq.com> Date: Sat, 21 May 2022 02:07:55 +0800 Subject: [PATCH 11/74] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=20OSS?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/pearadmin/modules/oss/domain/SysOss.java | 2 +- src/main/resources/application.yml | 16 ++++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/pearadmin/modules/oss/domain/SysOss.java b/src/main/java/com/pearadmin/modules/oss/domain/SysOss.java index a6cb43bf..361522bc 100644 --- a/src/main/java/com/pearadmin/modules/oss/domain/SysOss.java +++ b/src/main/java/com/pearadmin/modules/oss/domain/SysOss.java @@ -6,7 +6,7 @@ import org.apache.ibatis.type.Alias; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; -import com.pearadmin.common.web.base.domain.BaseDomain; +import com.pearadmin.common.web.base.BaseDomain; /** * 文件模型 diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index bd6ba54b..c91655c5 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -1,3 +1,19 @@ +## 阿里云 Oss 存储 +aliyun: + ## 对象存储 + oss: + endpoint: oss-cn-beijing.aliyuncs.com + accessKeyId: anything + accessKeySecret: anything + bucketName: pear-admin + ## 短信发送 + sms: + accessKeyId: anything + accessKeySecret: anything + domain: dysmsapi.aliyuncs.com + regionId: cn-hangzhou + templateCode: template-name + signName: sign-name # Tomcat 配置 server: # 端 口 -- Gitee From 50f6b39f93c75db2d4a71ee146237f015812fffd Mon Sep 17 00:00:00 2001 From: hjhcos <3140546263@qq.com> Date: Fri, 20 May 2022 18:00:14 +0000 Subject: [PATCH 12/74] =?UTF-8?q?=E5=88=A0=E9=99=A4=E6=96=87=E4=BB=B6=20sr?= =?UTF-8?q?c/main/java/com/pearadmin/modules/cra/schedule/impl/CrawlerBili?= =?UTF-8?q?biliVideo.java?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../schedule/impl/CrawlerBilibiliVideo.java | 20 ------------------- 1 file changed, 20 deletions(-) delete mode 100644 src/main/java/com/pearadmin/modules/cra/schedule/impl/CrawlerBilibiliVideo.java diff --git a/src/main/java/com/pearadmin/modules/cra/schedule/impl/CrawlerBilibiliVideo.java b/src/main/java/com/pearadmin/modules/cra/schedule/impl/CrawlerBilibiliVideo.java deleted file mode 100644 index 3987cb5a..00000000 --- a/src/main/java/com/pearadmin/modules/cra/schedule/impl/CrawlerBilibiliVideo.java +++ /dev/null @@ -1,20 +0,0 @@ -// +---------------------------------------------------------------------- -// | HJHCOS [ Laziness is creativity ] -// +---------------------------------------------------------------------- -// | Copyright (c) https://hjhcos.cn All rights reserved. -// +---------------------------------------------------------------------- -// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 ) -// +---------------------------------------------------------------------- -// | Author: hjhcos -// +---------------------------------------------------------------------- -package com.pearadmin.modules.cra.schedule.impl; - -import com.pearadmin.modules.cra.schedule.CrawlerVideo; - -/** - * @author hjhcos - * @date 2022/05/19 - * 获取 B站 视频 - */ -public class CrawlerBilibiliVideo{ -} -- Gitee From 30c51310f06d60132932dfea65c2dea4f8d7dab4 Mon Sep 17 00:00:00 2001 From: hjhcos <3140546263@qq.com> Date: Fri, 20 May 2022 18:00:33 +0000 Subject: [PATCH 13/74] =?UTF-8?q?=E5=88=A0=E9=99=A4=E6=96=87=E4=BB=B6=20sr?= =?UTF-8?q?c/main/java/com/pearadmin/modules/cra/schedule/impl/CrawlerCsdn?= =?UTF-8?q?Article.java?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cra/schedule/impl/CrawlerCsdnArticle.java | 23 ------------------- 1 file changed, 23 deletions(-) delete mode 100644 src/main/java/com/pearadmin/modules/cra/schedule/impl/CrawlerCsdnArticle.java diff --git a/src/main/java/com/pearadmin/modules/cra/schedule/impl/CrawlerCsdnArticle.java b/src/main/java/com/pearadmin/modules/cra/schedule/impl/CrawlerCsdnArticle.java deleted file mode 100644 index 4920eea0..00000000 --- a/src/main/java/com/pearadmin/modules/cra/schedule/impl/CrawlerCsdnArticle.java +++ /dev/null @@ -1,23 +0,0 @@ -// +---------------------------------------------------------------------- -// | HJHCOS [ Laziness is creativity ] -// +---------------------------------------------------------------------- -// | Copyright (c) https://hjhcos.cn All rights reserved. -// +---------------------------------------------------------------------- -// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 ) -// +---------------------------------------------------------------------- -// | Author: hjhcos -// +---------------------------------------------------------------------- -package com.pearadmin.modules.cra.schedule.impl; - -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -/** - * @author hjhcos - * @date 2022/05/19 - * 获取 CSDN 上面博主的文章 - */ -@Slf4j -@Component("CSDNArticle") -public class CrawlerCsdnArticle{ -} -- Gitee From 8fc71d2f3acd4b52e02fd394fc5a5414c3b5703d Mon Sep 17 00:00:00 2001 From: hjhcos <3140546263@qq.com> Date: Sat, 21 May 2022 10:07:23 +0800 Subject: [PATCH 14/74] =?UTF-8?q?=E6=8B=89=E5=8F=96=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/templates/system/power/main.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/templates/system/power/main.html b/src/main/resources/templates/system/power/main.html index 1ab6ca3e..b33424a4 100644 --- a/src/main/resources/templates/system/power/main.html +++ b/src/main/resources/templates/system/power/main.html @@ -85,7 +85,7 @@ treePidName: 'parentId', skin: 'line', method: 'get', - treeDefaultClose: false, + treeDefaultClose: true, toolbar: '#power-toolbar', elem: '#power-table', url: '/system/power/data', -- Gitee From 459a15ad7f041dc405b62b29c4335fb5d4c4d1c0 Mon Sep 17 00:00:00 2001 From: hjhcos <3140546263@qq.com> Date: Mon, 23 May 2022 01:24:26 +0800 Subject: [PATCH 15/74] =?UTF-8?q?=F0=9F=92=BE=E5=AD=98=E5=82=A8=E7=AE=A1?= =?UTF-8?q?=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sys/controller/SysStorageController.java | 121 +++++++++ .../modules/sys/domain/SysStorage.java | 58 +++++ .../modules/sys/mapper/SysStorageMapper.java | 33 +++ .../sys/mapper/xml/SysStorageMapper.xml | 32 +++ .../sys/service/ISysStorageService.java | 34 +++ .../service/impl/SysStorageServiceImpl.java | 49 ++++ .../modules/sys/storage/base/Bucket.java | 50 ++++ .../sys/storage/base/CloudStorage.java | 64 +++++ .../sys/storage/base/MediaProcess.java | 57 ++++ .../resources/templates/sys/storage/add.html | 129 +++++++++ .../resources/templates/sys/storage/edit.html | 109 ++++++++ .../resources/templates/sys/storage/main.html | 244 ++++++++++++++++++ 12 files changed, 980 insertions(+) create mode 100644 src/main/java/com/pearadmin/modules/sys/controller/SysStorageController.java create mode 100644 src/main/java/com/pearadmin/modules/sys/domain/SysStorage.java create mode 100644 src/main/java/com/pearadmin/modules/sys/mapper/SysStorageMapper.java create mode 100644 src/main/java/com/pearadmin/modules/sys/mapper/xml/SysStorageMapper.xml create mode 100644 src/main/java/com/pearadmin/modules/sys/service/ISysStorageService.java create mode 100644 src/main/java/com/pearadmin/modules/sys/service/impl/SysStorageServiceImpl.java create mode 100644 src/main/java/com/pearadmin/modules/sys/storage/base/Bucket.java create mode 100644 src/main/java/com/pearadmin/modules/sys/storage/base/CloudStorage.java create mode 100644 src/main/java/com/pearadmin/modules/sys/storage/base/MediaProcess.java create mode 100644 src/main/resources/templates/sys/storage/add.html create mode 100644 src/main/resources/templates/sys/storage/edit.html create mode 100644 src/main/resources/templates/sys/storage/main.html diff --git a/src/main/java/com/pearadmin/modules/sys/controller/SysStorageController.java b/src/main/java/com/pearadmin/modules/sys/controller/SysStorageController.java new file mode 100644 index 00000000..dfa88010 --- /dev/null +++ b/src/main/java/com/pearadmin/modules/sys/controller/SysStorageController.java @@ -0,0 +1,121 @@ +// +---------------------------------------------------------------------- +// | HJHCOS [ Laziness is creativity ] +// +---------------------------------------------------------------------- +// | Copyright (c) https://hjhcos.cn All rights reserved. +// +---------------------------------------------------------------------- +// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 ) +// +---------------------------------------------------------------------- +// | Author: hjhcos +// +---------------------------------------------------------------------- +package com.pearadmin.modules.sys.controller; + +import com.github.pagehelper.PageInfo; +import com.pearadmin.common.context.UserContext; +import com.pearadmin.modules.sys.domain.SysStorage; +import com.pearadmin.common.tools.string.Convert; +import com.pearadmin.common.web.base.BaseController; +import com.pearadmin.common.web.domain.request.PageDomain; +import com.pearadmin.common.web.domain.response.Result; +import com.pearadmin.common.web.domain.response.module.ResultTable; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.ui.ModelMap; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.servlet.ModelAndView; +import com.pearadmin.modules.sys.service.ISysStorageService; + +import java.time.LocalDateTime; +import java.util.Arrays; + +/** + * 存储方式Controller + * + * @author hjhcos + * @date 2022-05-22 + */ +@RestController +@RequestMapping("/sys/storage") +public class SysStorageController extends BaseController { + + private String prefix = "sys/storage"; + + @Autowired + private ISysStorageService sysStorageService; + + @GetMapping("/main") + @PreAuthorize("hasPermission('/sys/storage/main','sys:storage:main')") + public ModelAndView main() { + return jumpPage(prefix + "/main"); + } + + /** + * 查询存储方式列表 + */ + @ResponseBody + @GetMapping("/data") + @PreAuthorize("hasPermission('/sys/storage/data','sys:storage:data')") + public ResultTable list(@ModelAttribute SysStorage sysStorage, PageDomain pageDomain) { + PageInfo pageInfo = sysStorageService.selectSysStoragePage(sysStorage, pageDomain); + return pageTable(pageInfo.getList(), pageInfo.getTotal()); + } + + /** + * 新增存储方式 + */ + @GetMapping("/add") + @PreAuthorize("hasPermission('/sys/storage/add','sys:storage:add')") + public ModelAndView add() { + return jumpPage(prefix + "/add"); + } + + /** + * 新增存储方式 + */ + @ResponseBody + @PostMapping("/save") + @PreAuthorize("hasPermission('/sys/storage/add','sys:storage:add')") + public Result save(@RequestBody SysStorage sysStorage) { + return decide(sysStorageService.save(sysStorage)); + } + + /** + * 修改存储方式 + */ + @GetMapping("/edit") + @PreAuthorize("hasPermission('/sys/storage/edit','sys:storage:edit')") + public ModelAndView edit(String storageId, ModelMap map) { + SysStorage sysStorage =sysStorageService.getById(storageId); + map.put("sysStorage", sysStorage); + return jumpPage(prefix + "/edit"); + } + + /** + * 修改存储方式 + */ + @ResponseBody + @PutMapping("/update") + @PreAuthorize("hasPermission('/sys/storage/edit','sys:storage:edit')") + public Result update(@RequestBody SysStorage sysStorage) { + return decide(sysStorageService.updateById(sysStorage)); + } + + /** + * 删除存储方式 + */ + @ResponseBody + @DeleteMapping("/batchRemove") + @PreAuthorize("hasPermission('/sys/storage/remove','sys:storage:remove')") + public Result batchRemove(String ids) { + return decide(sysStorageService.removeByIds(Arrays.asList(ids.split(",")))); + } + + /** + * 删除存储方式 + */ + @ResponseBody + @DeleteMapping("/remove/{storageId}") + @PreAuthorize("hasPermission('/sys/storage/remove','sys:storage:remove')") + public Result remove(@PathVariable("storageId") String storageId) { + return decide(sysStorageService.removeById(storageId)); + } +} diff --git a/src/main/java/com/pearadmin/modules/sys/domain/SysStorage.java b/src/main/java/com/pearadmin/modules/sys/domain/SysStorage.java new file mode 100644 index 00000000..7ca5ed02 --- /dev/null +++ b/src/main/java/com/pearadmin/modules/sys/domain/SysStorage.java @@ -0,0 +1,58 @@ +// +---------------------------------------------------------------------- +// | HJHCOS [ Laziness is creativity ] +// +---------------------------------------------------------------------- +// | Copyright (c) https://hjhcos.cn All rights reserved. +// +---------------------------------------------------------------------- +// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 ) +// +---------------------------------------------------------------------- +// | Author: hjhcos +// +---------------------------------------------------------------------- +package com.pearadmin.modules.sys.domain; + +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import com.pearadmin.common.web.base.BaseDomain; +import lombok.EqualsAndHashCode; + +/** + * 存储方式实体 + * + * @author hjhcos + * @date 2022-05-22 + */ +@Data +@TableName("sys_storage") +@EqualsAndHashCode(callSuper = true) +public class SysStorage extends BaseDomain{ + + /** 存储ID */ + @TableId + private String storageId; + + /** 存储类型 0 本地 1 七牛云 2 阿里云 3 腾讯云 4 华为云 */ + private String storageType; + + /** 用户身份信息accessId */ + private String accessId; + + /** 用户身份信息accessKey */ + private String accessKey; + + /** 存储地域 */ + private String endpoint; + + /** 桶名称 */ + private String bucket; + + /** 存储地址 */ + private String host; + + /** 回调地址 */ + private String callbackUrl; + + /** 存储路径 */ + private String storageDir; + + +} diff --git a/src/main/java/com/pearadmin/modules/sys/mapper/SysStorageMapper.java b/src/main/java/com/pearadmin/modules/sys/mapper/SysStorageMapper.java new file mode 100644 index 00000000..a203076a --- /dev/null +++ b/src/main/java/com/pearadmin/modules/sys/mapper/SysStorageMapper.java @@ -0,0 +1,33 @@ +// +---------------------------------------------------------------------- +// | HJHCOS [ Laziness is creativity ] +// +---------------------------------------------------------------------- +// | Copyright (c) https://hjhcos.cn All rights reserved. +// +---------------------------------------------------------------------- +// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 ) +// +---------------------------------------------------------------------- +// | Author: hjhcos +// +---------------------------------------------------------------------- +package com.pearadmin.modules.sys.mapper; + +import org.apache.ibatis.annotations.Mapper; +import java.util.List; +import com.pearadmin.modules.sys.domain.SysStorage; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + * 存储方式Mapper接口 + * + * @author hjhcos + * @date 2022-05-22 + */ +@Mapper +public interface SysStorageMapper extends BaseMapper { + /** + * 查询存储方式列表 + * + * @param sysStorage 存储方式 + * @return 存储方式集合 + */ + List selectSysStorageList(SysStorage sysStorage); + +} diff --git a/src/main/java/com/pearadmin/modules/sys/mapper/xml/SysStorageMapper.xml b/src/main/java/com/pearadmin/modules/sys/mapper/xml/SysStorageMapper.xml new file mode 100644 index 00000000..107d32c7 --- /dev/null +++ b/src/main/java/com/pearadmin/modules/sys/mapper/xml/SysStorageMapper.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/java/com/pearadmin/modules/sys/service/ISysStorageService.java b/src/main/java/com/pearadmin/modules/sys/service/ISysStorageService.java new file mode 100644 index 00000000..21993419 --- /dev/null +++ b/src/main/java/com/pearadmin/modules/sys/service/ISysStorageService.java @@ -0,0 +1,34 @@ +// +---------------------------------------------------------------------- +// | HJHCOS [ Laziness is creativity ] +// +---------------------------------------------------------------------- +// | Copyright (c) https://hjhcos.cn All rights reserved. +// +---------------------------------------------------------------------- +// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 ) +// +---------------------------------------------------------------------- +// | Author: hjhcos +// +---------------------------------------------------------------------- +package com.pearadmin.modules.sys.service; + +import java.util.List; +import com.github.pagehelper.PageInfo; +import com.pearadmin.common.web.domain.request.PageDomain; +import com.pearadmin.modules.sys.domain.SysStorage; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + * 存储方式Service接口 + * + * @author hjhcos + * @date 2022-05-22 + */ +public interface ISysStorageService extends IService { + + /** + * 查询存储方式 + * @param sysStorage 存储方式 + * @param pageDomain 页码 + * @return 存储方式 分页集合 + * */ + PageInfo selectSysStoragePage(SysStorage sysStorage, PageDomain pageDomain); + +} diff --git a/src/main/java/com/pearadmin/modules/sys/service/impl/SysStorageServiceImpl.java b/src/main/java/com/pearadmin/modules/sys/service/impl/SysStorageServiceImpl.java new file mode 100644 index 00000000..92215990 --- /dev/null +++ b/src/main/java/com/pearadmin/modules/sys/service/impl/SysStorageServiceImpl.java @@ -0,0 +1,49 @@ +// +---------------------------------------------------------------------- +// | HJHCOS [ Laziness is creativity ] +// +---------------------------------------------------------------------- +// | Copyright (c) https://hjhcos.cn All rights reserved. +// +---------------------------------------------------------------------- +// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 ) +// +---------------------------------------------------------------------- +// | Author: hjhcos +// +---------------------------------------------------------------------- +package com.pearadmin.modules.sys.service.impl; + +import java.util.List; +import java.util.ArrayList; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import com.pearadmin.common.web.domain.request.PageDomain; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.pearadmin.modules.sys.mapper.SysStorageMapper; +import com.pearadmin.modules.sys.domain.SysStorage; +import com.pearadmin.modules.sys.service.ISysStorageService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; + +import java.util.Arrays; +/** + * 存储方式Service业务层处理 + * + * @author hjhcos + * @date 2022-05-22 + */ +@Service +public class SysStorageServiceImpl extends ServiceImpl implements ISysStorageService { + + + /** + * 查询存储方式 + * @param sysStorage 存储方式 + * @param pageDomain + * @return 存储方式 分页集合 + * */ + @Override + public PageInfo selectSysStoragePage(SysStorage sysStorage, PageDomain pageDomain) { + PageHelper.startPage(pageDomain.getPage(), pageDomain.getLimit()); + List data = baseMapper.selectSysStorageList(sysStorage); + return new PageInfo<>(data); + } + +} diff --git a/src/main/java/com/pearadmin/modules/sys/storage/base/Bucket.java b/src/main/java/com/pearadmin/modules/sys/storage/base/Bucket.java new file mode 100644 index 00000000..4395f156 --- /dev/null +++ b/src/main/java/com/pearadmin/modules/sys/storage/base/Bucket.java @@ -0,0 +1,50 @@ +// +---------------------------------------------------------------------- +// | HJHCOS [ Laziness is creativity ] +// +---------------------------------------------------------------------- +// | Copyright (c) https://hjhcos.cn All rights reserved. +// +---------------------------------------------------------------------- +// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 ) +// +---------------------------------------------------------------------- +// | Author: hjhcos +// +---------------------------------------------------------------------- +package com.pearadmin.modules.sys.storage.base; + +import java.util.List; + +/** + * @author hjhcos + * @date 2022/05/22 + */ +public interface Bucket { + + /** + * 查询存储桶 + * @return 所有存储桶 Buckets + * @throws Exception 服务器或客户端异常 + */ + List listBuckets() throws Exception; + + /** + * 创建存储桶 + * @param bucketName 存储桶名称 + * @return 存储桶对象 Bucket + * @throws Exception 服务器或客户端异常 + */ + Bucket createBucket(String bucketName) throws Exception; + + /** + * 检索存储桶是否存在且是否有权限访问 + * @param bucketName 存储桶名称 + * @return 是否删除成功 存在 true + * @throws Exception 服务器或客户端异常 + */ + boolean doesBucketExist(String bucketName) throws Exception; + + /** + * 删除指定账号下的空存储桶 + * @param bucketName 存储桶名称 + * @return 是否删除成功 + * @throws Exception 服务器或客户端异常 + */ + boolean deleteBucket(String bucketName) throws Exception; +} diff --git a/src/main/java/com/pearadmin/modules/sys/storage/base/CloudStorage.java b/src/main/java/com/pearadmin/modules/sys/storage/base/CloudStorage.java new file mode 100644 index 00000000..f26827cc --- /dev/null +++ b/src/main/java/com/pearadmin/modules/sys/storage/base/CloudStorage.java @@ -0,0 +1,64 @@ +// +---------------------------------------------------------------------- +// | HJHCOS [ Laziness is creativity ] +// +---------------------------------------------------------------------- +// | Copyright (c) https://hjhcos.cn All rights reserved. +// +---------------------------------------------------------------------- +// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 ) +// +---------------------------------------------------------------------- +// | Author: hjhcos +// +---------------------------------------------------------------------- +package com.pearadmin.modules.sys.storage.base; + +import java.io.FileInputStream; + +/** + * @author hjhcos + * @date 2022/05/22 + * 云存储 + */ +public interface CloudStorage { + + /** + * 上传文件 + * @param fileInputStream 文件 + * @return 文件路径 + * @throws Exception 服务器或客户端异常 + */ + String uploadFile(FileInputStream fileInputStream) throws Exception; + + /** + * 下载文件 + * @param filename 文件地址 + * @return 文件 + * @throws Exception 服务器或客户端异常 + */ + FileInputStream downloadFile(String filename) throws Exception; + + /** + * 复制文件 + * @param srcKey 复制的源文件路径 + * @param destKey 复制的目的地文件路径 + * @return 文件路径 + * @throws Exception 服务器或客户端异常 + */ + String copyFile(String srcKey, String destKey) throws Exception; + + /** + * 移动文件 + * @param srcKey 移动的源文件路径 + * @param destKey 移动的目的地文件路径 + * @return 文件路径 + * @throws Exception 服务器或客户端异常 + */ + String moveFile(String srcKey, String destKey) throws Exception; + + /** + * 移动文件 + * @param bucketName 存储桶名称 + * @param key 对象在存储桶中的唯一标识 文件路径 + * @return 文件是否存在 + * @throws Exception 服务器或客户端异常 + */ + boolean doesFileExist(String bucketName, String key) throws Exception; + +} diff --git a/src/main/java/com/pearadmin/modules/sys/storage/base/MediaProcess.java b/src/main/java/com/pearadmin/modules/sys/storage/base/MediaProcess.java new file mode 100644 index 00000000..dc4a084d --- /dev/null +++ b/src/main/java/com/pearadmin/modules/sys/storage/base/MediaProcess.java @@ -0,0 +1,57 @@ +// +---------------------------------------------------------------------- +// | HJHCOS [ Laziness is creativity ] +// +---------------------------------------------------------------------- +// | Copyright (c) https://hjhcos.cn All rights reserved. +// +---------------------------------------------------------------------- +// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 ) +// +---------------------------------------------------------------------- +// | Author: hjhcos +// +---------------------------------------------------------------------- +package com.pearadmin.modules.sys.storage.base; + +import java.io.FileInputStream; + +/** + * @author hjhcos + * @date 2022/05/22 + * 媒体处理 包括图片压缩、设别、水印、视频截帧 等等 + */ +public interface MediaProcess { + + /** + * 压缩处理 + * @param type 压缩类型 图片、视频 + * @param bucketName 存储桶名称 + * @param key 对象在存储桶中的唯一标识 + * @return 文件路径 + */ + String compress(String type, String bucketName, String key); + + /** + * 添加水印 + * @param url 文件的访问链接 + * @param text 水印内容 + * @param dissolve 文字透明度 + * @param batch 平铺水印 + * @return 文件路径 + */ + String watermark(String url, String text, String dissolve, boolean batch); + + /** + * 限制大小 + * @param url 文件的访问链接 + * @param size 限制图片转换后的大小,支持以兆字节和千字节为单位的图片 + * @return 文件路径 + */ + String sizeLimit(String url, String size); + + /** + * 获取媒体文件某个时间的截图 + * @param srcKey 复制的源文件路径 + * @param bucketName 存储桶名称 + * @param region 所属地域 + * @param destKey 复制的目的地文件路径 + * @return 截图路径 + */ + String generateSnapshot(String srcKey, String bucketName, String region, String destKey); +} diff --git a/src/main/resources/templates/sys/storage/add.html b/src/main/resources/templates/sys/storage/add.html new file mode 100644 index 00000000..1a054ba2 --- /dev/null +++ b/src/main/resources/templates/sys/storage/add.html @@ -0,0 +1,129 @@ + + + + + + +
+
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+
+
+
+ + +
+
+
+ + + + \ No newline at end of file diff --git a/src/main/resources/templates/sys/storage/edit.html b/src/main/resources/templates/sys/storage/edit.html new file mode 100644 index 00000000..82f1b43a --- /dev/null +++ b/src/main/resources/templates/sys/storage/edit.html @@ -0,0 +1,109 @@ + + + + + + +
+
+
+ +
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+
+
+
+ + +
+
+
+ + + + \ No newline at end of file diff --git a/src/main/resources/templates/sys/storage/main.html b/src/main/resources/templates/sys/storage/main.html new file mode 100644 index 00000000..8b0c67a4 --- /dev/null +++ b/src/main/resources/templates/sys/storage/main.html @@ -0,0 +1,244 @@ + + + + + + +
+
+
+
+
+ +
+ +
+ +
+ +
+ +
+ +
+ + +
+
+
+
+
+
+
+
+ + +
+
+ + + + + \ No newline at end of file -- Gitee From c6869dbd2dd1516735113b80804dd37576d76535 Mon Sep 17 00:00:00 2001 From: hjhcos <3140546263@qq.com> Date: Mon, 23 May 2022 01:33:26 +0800 Subject: [PATCH 16/74] =?UTF-8?q?=F0=9F=92=BE=E5=AD=98=E5=82=A8=E7=AE=A1?= =?UTF-8?q?=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/pearadmin/modules/sys/storage/base/MediaProcess.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/main/java/com/pearadmin/modules/sys/storage/base/MediaProcess.java b/src/main/java/com/pearadmin/modules/sys/storage/base/MediaProcess.java index dc4a084d..a1ad11f0 100644 --- a/src/main/java/com/pearadmin/modules/sys/storage/base/MediaProcess.java +++ b/src/main/java/com/pearadmin/modules/sys/storage/base/MediaProcess.java @@ -9,8 +9,6 @@ // +---------------------------------------------------------------------- package com.pearadmin.modules.sys.storage.base; -import java.io.FileInputStream; - /** * @author hjhcos * @date 2022/05/22 -- Gitee From 46a4c998d419279d060de821d472b96461756a33 Mon Sep 17 00:00:00 2001 From: hjhcos <3140546263@qq.com> Date: Mon, 23 May 2022 01:49:53 +0800 Subject: [PATCH 17/74] =?UTF-8?q?=F0=9F=92=BE=E5=AD=98=E5=82=A8=E7=AE=A1?= =?UTF-8?q?=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../resources/templates/sys/storage/add.html | 22 +++++++++---------- .../resources/templates/sys/storage/edit.html | 16 +++++++------- .../resources/templates/sys/storage/main.html | 20 +++++++---------- 3 files changed, 27 insertions(+), 31 deletions(-) diff --git a/src/main/resources/templates/sys/storage/add.html b/src/main/resources/templates/sys/storage/add.html index 1a054ba2..84c9c439 100644 --- a/src/main/resources/templates/sys/storage/add.html +++ b/src/main/resources/templates/sys/storage/add.html @@ -8,56 +8,56 @@
- +
- +
- +
- +
-
- +
-
- +
-
- +
- +
diff --git a/src/main/resources/templates/sys/storage/edit.html b/src/main/resources/templates/sys/storage/edit.html index 82f1b43a..f24948cc 100644 --- a/src/main/resources/templates/sys/storage/edit.html +++ b/src/main/resources/templates/sys/storage/edit.html @@ -9,35 +9,35 @@
- +
+ placeholder="请输入所属地域" class="layui-input" />
- +
+ placeholder="请输入存储桶名称" class="layui-input" />
- +
+ placeholder="请输入访问域名" class="layui-input" />
- +
- +
diff --git a/src/main/resources/templates/sys/storage/main.html b/src/main/resources/templates/sys/storage/main.html index 8b0c67a4..02a695ef 100644 --- a/src/main/resources/templates/sys/storage/main.html +++ b/src/main/resources/templates/sys/storage/main.html @@ -9,19 +9,19 @@
- +
- +
-
- +
-
-
- -
- -
-
diff --git a/src/main/resources/templates/cra/video/edit.html b/src/main/resources/templates/cra/video/edit.html index a02fc09a..bec76707 100644 --- a/src/main/resources/templates/cra/video/edit.html +++ b/src/main/resources/templates/cra/video/edit.html @@ -52,13 +52,6 @@ placeholder="请输入数据地址" class="layui-input" lay-verify="required"/>
-
- -
- -
-
diff --git a/src/main/resources/templates/cra/video/main.html b/src/main/resources/templates/cra/video/main.html index 8a22e5ac..339d5f05 100644 --- a/src/main/resources/templates/cra/video/main.html +++ b/src/main/resources/templates/cra/video/main.html @@ -9,17 +9,17 @@
- +
- +
- +
diff --git a/src/main/resources/vm/html/add.html.vm b/src/main/resources/vm/html/add.html.vm index 41a40d4d..507472a0 100644 --- a/src/main/resources/vm/html/add.html.vm +++ b/src/main/resources/vm/html/add.html.vm @@ -20,7 +20,7 @@ #set($dictType=$column.dictType) #if($column.htmlType == "input")
- +
@@ -28,7 +28,7 @@
#elseif($column.htmlType == "select")
- +
#elseif($column.htmlType == "textarea")
- +
diff --git a/src/main/resources/vm/html/edit.html.vm b/src/main/resources/vm/html/edit.html.vm index 2cc976c7..ee0ef1b7 100644 --- a/src/main/resources/vm/html/edit.html.vm +++ b/src/main/resources/vm/html/edit.html.vm @@ -21,7 +21,7 @@ #set($dictType=$column.dictType) #if($column.htmlType == "input")
- +
@@ -29,7 +29,7 @@
#elseif($column.htmlType == "select")
- +
#elseif($column.htmlType == "textarea")
- +
diff --git a/src/main/resources/vm/html/list.html.vm b/src/main/resources/vm/html/list.html.vm index 670fe2e1..069b2ef4 100644 --- a/src/main/resources/vm/html/list.html.vm +++ b/src/main/resources/vm/html/list.html.vm @@ -14,13 +14,13 @@ #set($javaField=$column.javaField) #set($comment=$column.columnComment) #if($column.htmlType == "input") - +
#elseif(($column.htmlType == "select" || $column.htmlType == "radio") && "" !=$column.dictType) - +
-- Gitee From 6bf06740ce5e56f288f183cea8033e8131b9420a Mon Sep 17 00:00:00 2001 From: hjhcos <3140546263@qq.com> Date: Fri, 27 May 2022 08:19:15 +0800 Subject: [PATCH 64/74] Crawler update --- src/main/java/com/pearadmin/modules/cra/base/CrawlerVideo.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/pearadmin/modules/cra/base/CrawlerVideo.java b/src/main/java/com/pearadmin/modules/cra/base/CrawlerVideo.java index 804401ae..0c15469a 100644 --- a/src/main/java/com/pearadmin/modules/cra/base/CrawlerVideo.java +++ b/src/main/java/com/pearadmin/modules/cra/base/CrawlerVideo.java @@ -16,7 +16,7 @@ import com.pearadmin.modules.cra.mapper.CraVideoMapper; /** * @author hjhcos * @date 2022/05/19 - * 爬取视频 + * 获取视频 */ public abstract class CrawlerVideo extends ServiceImpl implements Crawler { } -- Gitee From f5dfa4b7e0c71fbe663937995d4a053f5582e726 Mon Sep 17 00:00:00 2001 From: hjhcos <3140546263@qq.com> Date: Fri, 27 May 2022 08:35:50 +0800 Subject: [PATCH 65/74] preview for video and article --- .../resources/templates/cra/article/main.html | 18 +++++++++++++++++- .../resources/templates/cra/video/main.html | 18 +++++++++++++++++- 2 files changed, 34 insertions(+), 2 deletions(-) diff --git a/src/main/resources/templates/cra/article/main.html b/src/main/resources/templates/cra/article/main.html index 9f14f55f..5963e0c8 100644 --- a/src/main/resources/templates/cra/article/main.html +++ b/src/main/resources/templates/cra/article/main.html @@ -53,6 +53,10 @@