Browse Source

Merge branch 'master' of http://112.124.40.88:5510/root/NanJingLamanRadarProject

# Conflicts:
#	04.系统编码/Frontend/src/uilts/axios.ts
master
xuhuihui 3 years ago
parent
commit
8322fdff7c
  1. 8
      04.系统编码/Backend/pom.xml
  2. 10
      04.系统编码/Backend/src/main/java/com/userinformation/backend/config/CorsConfig.java
  3. 22
      04.系统编码/Backend/src/main/java/com/userinformation/backend/config/WebMvcConfig.java
  4. 6
      04.系统编码/Backend/src/main/java/com/userinformation/backend/controller/ImageController.java
  5. 18
      04.系统编码/Backend/src/main/java/com/userinformation/backend/handler/GlobalDefaultExceptionHandler.java
  6. 20
      04.系统编码/Backend/src/main/java/com/userinformation/backend/model/vo/ImageVO.java
  7. 67
      04.系统编码/Backend/src/main/java/com/userinformation/backend/service/ImageService.java
  8. 19
      04.系统编码/Backend/src/main/java/com/userinformation/backend/util/FileUtil.java
  9. 19
      04.系统编码/Backend/src/main/resources/application.yml
  10. 2
      04.系统编码/Backend/src/test/java/com/userinformation/backend/UserInformationApplicationTests.java
  11. 18
      04.系统编码/Frontend/.idea/workspace.xml
  12. 48
      04.系统编码/Frontend/src/components/MicrowaveRadiation.vue
  13. 4
      04.系统编码/Frontend/src/uilts/Config.ts
  14. 4
      04.系统编码/Frontend/src/uilts/axios.ts

8
04.系统编码/Backend/pom.xml

@ -74,6 +74,14 @@
</excludes>
</configuration>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<groupId>org.apache.maven.plugins</groupId>
<configuration>
<source>15</source>
<target>15</target>
</configuration>
</plugin>
</plugins>
</build>

10
04.系统编码/Backend/src/main/java/com/userinformation/backend/config/CorsConfig.java

@ -1,7 +1,9 @@
package com.userinformation.backend.config;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
@ -14,4 +16,12 @@ public class CorsConfig implements WebMvcConfigurer {
.allowedOrigins("*")
.allowedMethods("POST", "GET", "OPTIONS");
}
@Value("${custom.image.path}")
private String path;
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/product/**").addResourceLocations("file:" + path + "/");
}
}

22
04.系统编码/Backend/src/main/java/com/userinformation/backend/config/WebMvcConfig.java

@ -11,14 +11,14 @@ import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter
* @author: xiaowuler
* @createTime: 2021-12-03 09:33
*/
@Configuration
public class WebMvcConfig extends WebMvcConfigurerAdapter {
@Value("${custom.image.path}")
private String path;
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/product/**").addResourceLocations("file:" + path + "/");
}
}
//@Configuration
//public class WebMvcConfig extends WebMvcConfigurerAdapter {
//
// @Value("${custom.image.path}")
// private String path;
//
// @Override
// public void addResourceHandlers(ResourceHandlerRegistry registry) {
// registry.addResourceHandler("/product/**").addResourceLocations("file:" + path + "/");
// }
//}

6
04.系统编码/Backend/src/main/java/com/userinformation/backend/controller/ImageController.java

@ -4,8 +4,10 @@ import java.io.IOException;
import java.util.List;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.userinformation.backend.model.vo.ImageVO;
import com.userinformation.backend.service.ImageService;
import com.userinformation.backend.util.RequestResult;
@ -29,7 +31,7 @@ public class ImageController {
}
@PostMapping("createGif")
public RequestResult createGif(List<String> files) throws IOException {
return RequestResult.success(imageService.createGif(files));
public RequestResult createGif(@RequestBody ImageVO image) throws IOException {
return RequestResult.success(imageService.createGif(image));
}
}

18
04.系统编码/Backend/src/main/java/com/userinformation/backend/handler/GlobalDefaultExceptionHandler.java

@ -0,0 +1,18 @@
package com.userinformation.backend.handler;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import com.userinformation.backend.util.RequestResult;
@ControllerAdvice
@Slf4j
public class GlobalDefaultExceptionHandler {
@ExceptionHandler(Exception.class)
@ResponseBody
public RequestResult defaultExceptionHandler(Exception e) {
log.error("An error has occurred", e);
return RequestResult.fail(e.getMessage());
}
}

20
04.系统编码/Backend/src/main/java/com/userinformation/backend/model/vo/ImageVO.java

@ -0,0 +1,20 @@
package com.userinformation.backend.model.vo;
import java.util.List;
import lombok.Data;
/**
* @describe: 图片接收类
* @author: xiaowuler
* @createTime: 2021-12-05 19:23
*/
@Data
public class ImageVO {
private String model;
private String station;
private String elementCode;
private String type;
private String time;
private List<String> urls;
}

67
04.系统编码/Backend/src/main/java/com/userinformation/backend/service/ImageService.java

@ -4,13 +4,19 @@ import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
import java.util.Objects;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.util.Assert;
import com.madgag.gif.fmsware.AnimatedGifEncoder;
import com.userinformation.backend.model.vo.ImageVO;
import com.userinformation.backend.util.FileUtil;
/**
* @describe: 图片处理 逻辑层
@ -26,6 +32,9 @@ public class ImageService {
@Value("${custom.image.url}")
private String imageUrl;
@Value("${custom.image.gifPath}")
private String gifPath;
private final static String TIF_FILE_SUFFIX = ".tif";
private final static String PNG_FILE_SUFFIX = ".png";
@ -43,31 +52,53 @@ public class ImageService {
return targetFilePath.replace(imagePath, imageUrl);
}
public String createGif(List<String> files) {
public String createGif(ImageVO image) {
String targetPath = toTargetPath(image);
FileUtil.createFolder(targetPath);
if (Files.exists(Paths.get(targetPath))){
return targetPath.replace(imagePath, imageUrl);
}
List<File> files = prepareImages(image.getUrls());
Assert.isTrue(!files.isEmpty(), "没有有效数据,无法生成动图");
try {
AnimatedGifEncoder e = new AnimatedGifEncoder();
e.setRepeat(0);
e.start("C:/Users/xiaowuler/Desktop/test1.gif");
String pic[] = new String[] {
"d:\\Pictures\\1.jpg",
"d:\\Pictures\\2.jpg",
"d:\\Pictures\\6.jpg",
"d:\\Pictures\\8.jpg"};
// BufferedImage src[] = new BufferedImage[pic.length];
for(String filepath : files){
e.setDelay(200); //设置播放的延迟时间
BufferedImage bufferedImage = ImageIO.read(new File(filepath)); // 读入需要播放的jpg文件
e.addFrame(bufferedImage); //添加到帧中
e.start(targetPath);
for(File file : files){
e.setDelay(500);
BufferedImage bufferedImage = ImageIO.read(file);
e.addFrame(bufferedImage);
}
// for (int i = 0; i < src.length; i++) {
// e.setDelay(200); //设置播放的延迟时间
// src[i] = ImageIO.read(new File(pic[i])); // 读入需要播放的jpg文件
// e.addFrame(src[i]); //添加到帧中
// }
e.finish();
} catch (IOException e) {
e.printStackTrace();
}
return null;
return targetPath.replace(imagePath, imageUrl);
}
private List<File> prepareImages(List<String> urls){
List<File> files = new ArrayList<>();
for(String url : urls){
String filepath = url.replace(imageUrl, imagePath);
File file = new File(filepath);
if (file.exists()){
files.add(file);
}
}
return files;
}
private String toTargetPath(ImageVO image){
String targetFilePath = "%s/%s/%s/".formatted(gifPath, image.getModel(), image.getStation());
if (Objects.nonNull(image.getElementCode())){
targetFilePath += image.getElementCode() + '/';
}
if (Objects.nonNull(image.getType())){
targetFilePath += image.getType() + '/';
}
return "%s%s.gif".formatted(targetFilePath, image.getTime());
}
}

19
04.系统编码/Backend/src/main/java/com/userinformation/backend/util/FileUtil.java

@ -0,0 +1,19 @@
package com.userinformation.backend.util;
import java.io.File;
/**
* @describe: 文件工具类
* @author: xiaowuler
* @createTime: 2021-12-05 19:36
*/
public class FileUtil {
public static void createFolder(String saveFilepath){
File file = new File(saveFilepath);
File parentFile = file.getParentFile();
if (parentFile.exists()){
return;
}
parentFile.mkdirs();
}
}

19
04.系统编码/Backend/src/main/resources/application.yml

@ -2,17 +2,18 @@ server:
port: 8002
spring:
datasource:
# url: jdbc:mysql://${custom.parent-url}:33306/user_information?useUnicode=true&characteEncoding=utf-8
# username: root
# password: 3cqscbr@only1
url: jdbc:mysql://10.124.102.10:3306/user_information?useUnicode=true&characteEncoding=utf-8
url: jdbc:mysql://112.124.40.88:33306/user_information?useUnicode=true&characteEncoding=utf-8
username: root
password: Njsqxj_sthj@2021
password: 3cqscbr@only1
# url: jdbc:mysql://10.124.102.10:3306/user_information?useUnicode=true&characteEncoding=utf-8
# username: root
# password: Njsqxj_sthj@2021
driver-class-name: com.mysql.cj.jdbc.Driver
custom:
image:
url: ${custom.parent-url}:8002/product
# path: D:/Deployments/LamanRadar/product
path: /home/project/NJEnvironmentPlatform/html/product
# parent-url: http://112.124.40.88
parent-url: http://10.124.102.10
path: D:/Deployments/LamanRadar/product
gifPath: ${custom.image.path}/gif
parent-url: http://112.124.40.88
# path: /home/project/NJEnvironmentPlatform/html/product
# parent-url: http://10.124.102.10

2
04.系统编码/Backend/src/test/java/com/userinformation/backend/UserInformationApplicationTests.java

@ -30,7 +30,7 @@ class UserInformationApplicationTests {
add("C:\\Users\\xiaowuler\\Desktop\\images (2)\\TFLD_TX.png");
}};
imageController.createGif(files);
// imageController.createGif(files);
// File inputFile = new File("C:\\Users\\xiaowuler\\Desktop\\images\\decision-support\\plan-advice\\control-experiment\\TFLD_Q2.tif");
// File outputFile = new File("C:\\Users\\xiaowuler\\Desktop\\output.png");
// BufferedImage image = ImageIO.read(inputFile);

18
04.系统编码/Frontend/.idea/workspace.xml

@ -2,11 +2,19 @@
<project version="4">
<component name="ChangeListManager">
<list default="true" id="4b7d7b72-f5b8-41e4-85d5-6267bdc12fc5" name="默认变更列表" comment="">
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/App.vue" beforeDir="false" afterPath="$PROJECT_DIR$/src/App.vue" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/components/Login.vue" beforeDir="false" afterPath="$PROJECT_DIR$/src/components/Login.vue" afterDir="false" />
<change afterPath="$PROJECT_DIR$/../Backend/src/main/java/com/userinformation/backend/handler/GlobalDefaultExceptionHandler.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/../Backend/src/main/java/com/userinformation/backend/model/vo/ImageVO.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/../Backend/src/main/java/com/userinformation/backend/util/FileUtil.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/../Backend/pom.xml" beforeDir="false" afterPath="$PROJECT_DIR$/../Backend/pom.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/../Backend/src/main/java/com/userinformation/backend/config/CorsConfig.java" beforeDir="false" afterPath="$PROJECT_DIR$/../Backend/src/main/java/com/userinformation/backend/config/CorsConfig.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/../Backend/src/main/java/com/userinformation/backend/config/WebMvcConfig.java" beforeDir="false" afterPath="$PROJECT_DIR$/../Backend/src/main/java/com/userinformation/backend/config/WebMvcConfig.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/../Backend/src/main/java/com/userinformation/backend/controller/ImageController.java" beforeDir="false" afterPath="$PROJECT_DIR$/../Backend/src/main/java/com/userinformation/backend/controller/ImageController.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/../Backend/src/main/java/com/userinformation/backend/service/ImageService.java" beforeDir="false" afterPath="$PROJECT_DIR$/../Backend/src/main/java/com/userinformation/backend/service/ImageService.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/../Backend/src/main/resources/application.yml" beforeDir="false" afterPath="$PROJECT_DIR$/../Backend/src/main/resources/application.yml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/../Backend/src/test/java/com/userinformation/backend/UserInformationApplicationTests.java" beforeDir="false" afterPath="$PROJECT_DIR$/../Backend/src/test/java/com/userinformation/backend/UserInformationApplicationTests.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/components/MicrowaveRadiation.vue" beforeDir="false" afterPath="$PROJECT_DIR$/src/components/MicrowaveRadiation.vue" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/uilts/Config.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/uilts/Config.ts" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/uilts/axios.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/uilts/axios.ts" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/uilts/storage.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/uilts/storage.ts" afterDir="false" />
</list>
<option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" />
@ -88,7 +96,7 @@
<workItem from="1638497917929" duration="12367000" />
<workItem from="1638515445129" duration="7072000" />
<workItem from="1638524838907" duration="8000" />
<workItem from="1638752962691" duration="4827000" />
<workItem from="1638752962691" duration="4924000" />
</task>
<task id="LOCAL-00001" summary="2021 12 01">
<created>1638357539757</created>

48
04.系统编码/Frontend/src/components/MicrowaveRadiation.vue

@ -69,6 +69,7 @@
<div class="btns-group">
<span @click="onPlayClick">{{isPlay ? '暂停动画' : '播放动画'}}</span>
<a @click="onDownloadClick">下载动画</a> <!-- :href=""-->
<a id="weboDownload" download :href='downloadSrc' style="display: none;">下载隐藏层</a>
</div>
</div>
<div class="picture-view">
@ -106,6 +107,7 @@
import { onMounted, reactive, toRefs } from 'vue';
import moment from "moment";
import { MicrowaveRadiationConfig } from '../uilts/Config';
import { post } from '../uilts/axios';
export default {
name: 'MicrowaveRadiation',
@ -127,7 +129,8 @@
srcList: [],
isPlay: false,
title: null,
index: 0
index: 0,
downloadSrc: null
})
onMounted(() => {
@ -200,14 +203,49 @@
}
const onDownloadClick = () => {
let params = {
post("/image/createGif", prepareParams(), 'application/json').then((response: any) => {
if (response.error != 0){
console.log(response.message);
return;
}
fetch(response.data).then(res => {
return res.blob();
}).then(blob => {
let reader = new FileReader();
reader.onloadend = function(){
options.downloadSrc = reader.result;
setTimeout(() => {
document.getElementById("weboDownload").click();
options.downloadSrc = null;
}, 500);
};
reader.readAsDataURL(blob);
}).catch(console.error);
})
}
const prepareParams = () => {
return {
model: 'weibo',
station: options.currentRegion,
element: options.currentElement,
elementCode: options.currentElement,
type: options.currentTab,
time: [options.times[0].date, options.times[options.times.length - 1].date],
urls: []
time: moment(options.times[0].date).format("YYYYMMDDHHmmss") + '-' + moment(options.times[options.times.length - 1].date).format("YYYYMMDDHHmmss"),
urls: prepareUrls()
}
}
const prepareUrls = () => {
let urls = [];
for(let index = 0, len = options.hours.length; index < len; index++){
let date = moment(options.times[options.index].date);
let time = moment(options.date).hour(date.hour()).minute(date.minute());
let type = (options.currentTab === 'T-logP' || options.currentTab === 'BPFY') ? options.currentTab : (options.currentTab + '_' + options.currentType);
urls.push(MicrowaveRadiationConfig.getUrl(options.currentRegion, type, time));
}
return urls;
}
const converToBase64 = (path) => {

4
04.系统编码/Frontend/src/uilts/Config.ts

@ -2,8 +2,8 @@ import { Moment } from "moment";
import { format } from "./String";
export class Config {
// public static parentUrl: string = "http://112.124.40.88:8002/product/picture";
public static parentUrl: string = "http://10.124.102.10:8002/product/picture";
public static parentUrl: string = "http://112.124.40.88:8002/product/picture";
// public static parentUrl: string = "http://10.124.102.10:8002/product/picture";
}
export class MicrowaveRadiationConfig {

4
04.系统编码/Frontend/src/uilts/axios.ts

@ -5,8 +5,8 @@ import { ElLoading } from 'element-plus'
let loading = null;
const service = axios.create({
baseURL:"http://112.124.40.88:8002",
// baseURL:"",
// baseURL:"http://112.124.40.88:8002",
baseURL:"",
timeout: 500000
})

Loading…
Cancel
Save