pom.xml
@@ -34,78 +34,11 @@ <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <!--aop--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> </dependency> <!--mybatis-plus <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.5.7</version> </dependency>--> <!--redis--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <!--postgresql <dependency> <groupId>org.postgresql</groupId> <artifactId>postgresql</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-pool2</artifactId> </dependency>--> <!--æ´ådruidæ°æ®æº <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.22</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.1.22</version> </dependency>--> <!--test--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <version>3.3.1</version> <scope>test</scope> </dependency> <!--text--> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-text</artifactId> <version>1.12.0</version> </dependency> <!--hutool--> <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>5.8.29</version> </dependency> <!--httpclient--> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> </dependency> <!--knife4j--> <dependency> <groupId>com.github.xiaoymin</groupId> <artifactId>knife4j-spring-boot-starter</artifactId> <version>3.0.3</version> </dependency> <!--fast-md5--> <dependency> <groupId>com.joyent.util</groupId> <artifactId>fast-md5</artifactId> <version>2.7.1</version> </dependency> <!--fastjson2--> <dependency> @@ -113,32 +46,7 @@ <artifactId>fastjson2</artifactId> <version>2.0.52</version> </dependency> <!--gdal--> <dependency> <groupId>org.gdal</groupId> <artifactId>gdal</artifactId> <!--<version>3.9.0</version>--> <version>3.2.0</version> </dependency> </dependencies> <profiles> <profile> <id>dev</id> <properties> <activatedProperties>dev</activatedProperties> </properties> <activation> <activeByDefault>true</activeByDefault> </activation> </profile> <profile> <id>prod</id> <properties> <activatedProperties>prod</activatedProperties> </properties> </profile> </profiles> <build> <finalName>SimuServer</finalName> src/main/java/com/se/simu/SimuApplication.java
@@ -3,8 +3,6 @@ import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; /** * å¯å¨ç¨åºç±» @@ -13,13 +11,8 @@ * @date 2024-07-16 */ @SpringBootApplication(exclude = {DataSourceAutoConfiguration.class}, scanBasePackages = {"com.se.simu"}) public class SimuApplication extends SpringBootServletInitializer { public class SimuApplication { public static void main(String[] args) { SpringApplication.run(SimuApplication.class, args); } @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder springApplicationBuilder) { return springApplicationBuilder.sources(SimuApplication.class); } } src/main/java/com/se/simu/config/InitConfig.java
ÎļþÒÑɾ³ý src/main/java/com/se/simu/config/Knife4jConfig.java
ÎļþÒÑɾ³ý src/main/java/com/se/simu/controller/WaterController.java
@@ -1,11 +1,8 @@ package com.se.simu.controller; import com.se.simu.domain.LayerVo; import com.se.simu.helper.StringHelper; import com.se.simu.helper.WebHelper; import com.se.simu.service.WaterService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.GetMapping; @@ -23,7 +20,6 @@ * @author WWW * @date 2024-07-16 */ @Api(tags = "å æ¶ç®¡ç") @Slf4j @RestController @RequestMapping("/waterlogging") @@ -37,13 +33,11 @@ private final static long Y2000 = 949334400000L; @ApiOperation(value = "è·åå½åæ¶é´") @GetMapping("/getTime") public Object getTime() { return System.currentTimeMillis(); } @ApiOperation(value = "è·åå æ°æ®ä¿¡æ¯") @GetMapping("/{serviceName}/layer.json") public void getLayer(@PathVariable String serviceName, HttpServletResponse res) { try { @@ -60,7 +54,6 @@ } } @ApiOperation(value = "è·åå°å½¢é«åº¦å¾") @GetMapping("/{serviceName}/terrain") public void getTerraMap(@PathVariable String serviceName, Integer width, Integer height, HttpServletResponse res) { try { @@ -76,7 +69,6 @@ } } @ApiOperation(value = "è·åæ°´é¢é«åº¦å¾") @GetMapping("/{serviceName}/waterMap") public void getWaterMap(@PathVariable String serviceName, Integer width, Integer height, Long timestamp, HttpServletResponse res) { try { @@ -92,7 +84,6 @@ } } @ApiOperation(value = "è·åæ°´æµåæµéå¾") @GetMapping("/{serviceName}/flowMap") public void getFlowMap(@PathVariable String serviceName, Integer width, Integer height, Long timestamp, HttpServletResponse res) { try { @@ -109,7 +100,7 @@ } private boolean validate(String serviceName, HttpServletResponse res) { if (StringHelper.isEmpty(serviceName)) { if (WebHelper.isEmpty(serviceName)) { return WebHelper.writeJson2Page(res, HttpStatus.BAD_REQUEST, "æå¡åä¸è½ä¸ºç©º"); } @@ -124,7 +115,7 @@ * éªè¯ */ private boolean validate(String serviceName, Integer width, Integer height, Long timestamp, HttpServletResponse res) { if (StringHelper.isEmpty(serviceName)) { if (WebHelper.isEmpty(serviceName)) { return WebHelper.writeJson2Page(res, HttpStatus.BAD_REQUEST, "æå¡åä¸è½ä¸ºç©º"); } if (null == width || width < MIN_SIZE || width > MAX_SIZE) { @@ -144,7 +135,7 @@ * åæä»¶ */ private boolean writeFile(String path, HttpServletResponse res) throws Exception { if (StringHelper.isEmpty(path)) { if (WebHelper.isEmpty(path)) { return WebHelper.writeJson2Page(res, HttpStatus.INTERNAL_SERVER_ERROR, "çæPNG失败"); } File file = new File(path); src/main/java/com/se/simu/helper/FileHelper.java
ÎļþÒÑɾ³ý src/main/java/com/se/simu/helper/GdalHelper.java
ÎļþÒÑɾ³ý src/main/java/com/se/simu/helper/StringHelper.java
ÎļþÒÑɾ³ý src/main/java/com/se/simu/helper/WebHelper.java
@@ -6,20 +6,16 @@ import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; import javax.servlet.ServletContext; import javax.servlet.ServletOutputStream; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import java.io.BufferedReader; import java.io.FileInputStream; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.InetAddress; import java.net.URLEncoder; import java.net.UnknownHostException; import java.sql.Timestamp; import java.text.SimpleDateFormat; import java.util.*; /** @@ -30,15 +26,23 @@ */ @Slf4j public class WebHelper { public final static String POINT = "."; private final static String COMMA = ","; private final static String UNKNOWN = "unknown"; public final static String TOKEN_KEY = "token"; /** * æ ¼å¼åå½åç³»ç»æ¥æ 4 */ public static final SimpleDateFormat YMDHMS = new SimpleDateFormat("yyyyMMddHHmmss"); public final static String TOKEN_COOKIE_KEY = "token"; public final static int COOKIE_MAX_AGE = 4 * 60 * 60; /** * å符串,æ¯å¦ä¸ºç©ºnullåç©ºæ ¼ */ public static boolean isEmpty(String str) { return null == str || "".equals(str.trim()); } /** * è·åGUID @@ -114,131 +118,6 @@ } /** * è·åå½åæ¶é´æå®åéæ°åçTimestamp */ public static Timestamp getTimestamp(int min) { Calendar now = Calendar.getInstance(); now.add(Calendar.MINUTE, min); return new Timestamp(now.getTimeInMillis()); } /** * ä»Cookieä¸è·åtoken */ public static String getTokenFromCookie(HttpServletRequest request) { Cookie[] cookies = request.getCookies(); if (cookies == null || cookies.length == 0) { return null; } for (Cookie cookie : cookies) { switch (cookie.getName()) { case TOKEN_COOKIE_KEY: return cookie.getValue(); default: break; } } return null; } /** * åCookie䏿·»å token */ public static void saveToken2Cookie(String token, HttpServletRequest request, HttpServletResponse response) { // å å é¤ deleteCookies(request, response); // åä¿å saveCookie(TOKEN_COOKIE_KEY, token, response); } /** * ä¿åCookie */ public static void saveCookie(String key, String value, HttpServletResponse response) { Cookie cookie = new Cookie(key, value); // 设置cookieå¤±ææ¶é´ï¼åä½ä¸ºç§ cookie.setMaxAge(COOKIE_MAX_AGE); cookie.setHttpOnly(false); cookie.setPath("/"); //cookie.setDomain("*") response.setHeader("P3P", "CP=CAO PSA OUR"); response.addCookie(cookie); } /** * å é¤cookieä¸çå¼ */ public static void deleteCookie(String cookieKey, HttpServletRequest request, HttpServletResponse response) { Cookie[] cookies = request.getCookies(); if (cookies != null && cookies.length > 0) { for (Cookie c : cookies) { if (cookieKey.equalsIgnoreCase(c.getName())) { c.setMaxAge(0); c.setPath("/"); response.addCookie(c); } } } } /** * å 餿æCookie */ public static void deleteCookies(HttpServletRequest request, HttpServletResponse response) { Cookie[] cookies = request.getCookies(); if (cookies != null && cookies.length > 0) { for (Cookie c : cookies) { c.setMaxAge(0); c.setPath("/"); response.addCookie(c); } } } /** * æ ¹æ®é®è·åCookieå¼ */ public static String getCookieByKey(String key, HttpServletRequest request) { Cookie[] cookies = request.getCookies(); if (cookies == null || cookies.length == 0) { return null; } for (Cookie c : cookies) { if (key.equals(c.getName())) { return c.getValue(); } } return null; } /** * è·åToken */ public static String getToken(HttpServletRequest request) { // 1.ä»urlåæ°ä¸ï¼è·åtoken String token = request.getParameter(TOKEN_KEY); // 2.为空ï¼åä»headeréè·å if (token == null) { token = request.getHeader(TOKEN_KEY); } // 3.è¿ä¸ºç©ºï¼åä»cookieéè·å if (token == null) { token = getTokenFromCookie(request); } return token; } /** * è·åRequest */ public static HttpServletRequest getRequest() { @@ -254,23 +133,6 @@ ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); return servletRequestAttributes.getResponse(); } /** * è·åSession */ public static HttpSession getSession() { return getRequest().getSession(); } /** * è·åçå®è·¯å¾ */ public static String getRealPath(String path) { HttpServletRequest req = getRequest(); ServletContext ctx = req.getSession().getServletContext(); return ctx.getRealPath("/" + path); } /** @@ -349,8 +211,8 @@ * @throws Exception å¼å¸¸ */ public static void download(String file, String fileName, boolean inline, HttpServletResponse res) throws Exception { if (StringHelper.isEmpty(fileName)) { fileName = StringHelper.YMDHMS2_FORMAT.format(new Date()); if (isEmpty(fileName)) { fileName = YMDHMS.format(new Date()); } fileName = URLEncoder.encode(fileName, "UTF-8").replace("+", "%20"); String dispose = inline ? "inline" : "attachment"; @@ -361,8 +223,8 @@ res.setCharacterEncoding("UTF-8"); // éè¿response对象设置ååºæ°æ®æ ¼å¼(å¦ï¼"text/plain; charset=utf-8") String ext = FileHelper.getExtension(file); String mime = FileHelper.getMime(ext); String ext = getExtension(file); String mime = getMime(ext); res.setContentType(mime); // éè¿response对象ï¼è·åå°è¾åºæµ @@ -384,75 +246,105 @@ } /** * æ§è¡å½ä»¤ * * @param cmd å½ä»¤ * è·åæä»¶æ©å±å */ public static void exec(String cmd) { try { Runtime.getRuntime().exec(cmd); } catch (Exception ex) { log.error(ex.getMessage(), ex); public static String getExtension(String fileName) { if (isEmpty(fileName)) { return ""; } int idx = fileName.lastIndexOf(POINT); if (idx == -1) { return ""; } return fileName.substring(idx).toLowerCase(); } /** * æ§è¡å½ä»¤ * * @param cmd å½ä»¤ * è·åå¤ç¨éäºèç½é®ä»¶æ©å±ç±»å */ public static String exec2(String cmd) { try { StringBuilder sb = new StringBuilder(); Process process = Runtime.getRuntime().exec(cmd); BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream())); String line; while ((line = reader.readLine()) != null) { sb.append(line).append("\n"); } reader.close(); return sb.toString(); } catch (Exception ex) { log.error(ex.getMessage(), ex); return null; public static String getMime(String ext) { switch (ext) { // å¾ç case ".tif": case ".tiff": return "image/tiff"; case ".img": return "application/x-img"; case ".gif": return "image/gif"; case ".jpg": case ".jpeg": return "image/jpeg"; case ".png": return "image/png"; // é³/è§é¢ case ".mp3": return "audio/mp3"; case ".mp4": return "video/mpeg4"; case ".avi": return "video/avi"; case ".mpg": case ".mpeg": return "video/mpg"; case ".wav": return "audio/wav"; case ".wma": return "audio/x-ms-wma"; case ".swf": return "application/x-shockwave-flash"; case ".wmv": return "video/x-ms-wmv"; case ".rm": return "application/vnd.rn-realmedia"; case ".rmvb": return "application/vnd.rn-realmedia-vbr"; // ç½é¡µ case ".js": return "application/x-javascript"; case ".css": return "text/css"; case ".asp": return "text/asp"; case ".mht": return "message/rfc822"; case ".jsp": case ".htm": case ".html": case ".xhtml": return "text/html"; case ".xml": case ".svg": return "text/xml"; // æä»¶ case ".txt": return "text/plain"; case ".dbf": return "application/x-dbf"; case ".mdb": return "application/msaccess"; case ".pdf": return "application/pdf"; case ".ppt": case ".pptx": return "application/x-ppt"; case ".doc": case ".docx": return "application/msword"; case ".xls": case ".xlsx": return "application/vnd.ms-excel"; case ".dgn": return "application/x-dgn"; case ".dwg": return "application/x-dwg"; case ".ext": return "application/x-msdownload"; // é»è®¤ default: return "application/octet-stream"; } } /** * è·å请æ±çåæ°å¼ * * @param req è¯·æ± * @param key åæ°å * @return åæ°å¼ */ public static String getReqParamVal(HttpServletRequest req, String key) { Map<String, String[]> maps = req.getParameterMap(); for (Map.Entry<String, String[]> entry : maps.entrySet()) { if (entry.getKey().equalsIgnoreCase(key)) { return null == entry.getValue() || 0 == entry.getValue().length ? null : entry.getValue()[0]; } } return null; } /** * è·å请æ±çåæ°å¼ * * @param req è¯·æ± * @param key åæ°å * @return åæ°å¼ */ public static String[] getReqParamVals(HttpServletRequest req, String key) { Map<String, String[]> maps = req.getParameterMap(); for (Map.Entry<String, String[]> entry : maps.entrySet()) { if (entry.getKey().equalsIgnoreCase(key)) { return entry.getValue(); } } return null; } } src/main/java/com/se/simu/service/WaterService.java
@@ -1,7 +1,6 @@ package com.se.simu.service; import com.se.simu.domain.LayerVo; import com.se.simu.helper.GdalHelper; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @@ -29,23 +28,14 @@ String dataPath; public LayerVo getLayer(String serviceName) { String file = "D:/simu/test/DEM_M.tif"; GdalHelper.createPyramid(file); String file2 = "D:/simu/test/DOM_M.tif"; GdalHelper.createPyramid(file2); LayerVo layer = GdalHelper.readDemExtent(file); if (null == layer) { return null; } LayerVo layer = new LayerVo(); layer.setVer(ver); //layer.setDuration(new LayerVo.Duration(1719812810225L, 1719812810225L)); //layer.setExtension(new LayerVo.Extension(2.11062743358, 0.53812160220, 2.11070827834, 0.53819799453, 1.151, 38.83)); //layer.setTerrain(new LayerVo.Terrain(10000, 10000)); layer.setDuration(new LayerVo.Duration(1719812810225L, 1719812810225L)); layer.setExtension(new LayerVo.Extension(2.11062743358, 0.53812160220, 2.11070827834, 0.53819799453, 1.151, 38.83)); layer.setTerrain(new LayerVo.Terrain(10000, 10000)); //List<Long> data = new ArrayList<>(Arrays.asList(1719812812225L, 1719812812225L, 1719812812225L, 1719812812225L, 1719812812225L, 1719812812225L)); //layer.setWater(new LayerVo.Water(10000, 10000, data)); List<Long> data = new ArrayList<>(Arrays.asList(1719812812225L, 1719812812225L, 1719812812225L, 1719812812225L, 1719812812225L, 1719812812225L)); layer.setWater(new LayerVo.Water(10000, 10000, data)); return layer; } src/main/resources/application-dev.yml
ÎļþÒÑɾ³ý src/main/resources/application-prod.yml
ÎļþÒÑɾ³ý src/main/resources/application.yml
@@ -1,26 +1,16 @@ server: tomcat: uri-encoding: UTF-8 max-connections: 5000 max-http-form-post-size: 50MB threads: max: 2000 port: 8079 servlet: context-path: /simuserver context-path: / spring: mvc: pathmatch: # è§£å³Knife4jè¿è¡æ¥é matching-strategy: ant_path_matcher application: name: simuserver name: SimuServer knife4j: # æ¯å¦å¼å¯ enabled: true # 请æ±åç¼ pathMapping: # æ¯å¦å¼å¯å¢å¼ºæ¨¡å¼ enable: true sys: ver: 0.1 path: data: D:/simu/ src/test/java/com/se/simu/SimuApplicationTests.java
ÎļþÒÑɾ³ý