pom.xml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/se/simu/config/InitConfig.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/se/simu/config/Knife4jConfig.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/se/simu/config/MybatisPlusConfig.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/se/simu/config/RestTemplateConfig.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/se/simu/controller/WaterController.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/se/simu/helper/FileHelper.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/se/simu/helper/GdalHelper.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/se/simu/helper/StringHelper.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/se/simu/helper/WebHelper.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/se/simu/service/SedbService.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/resources/application.yml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
pom.xml
@@ -35,11 +35,50 @@ <version>1.18.34</version> <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> <!--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> <!--fastjson--> <dependency> @@ -52,6 +91,14 @@ <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.5.0</version> <!--version>3.2.0</version--> </dependency> </dependencies> <build> src/main/java/com/se/simu/config/InitConfig.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,48 @@ package com.se.simu.config; import com.se.simu.helper.GdalHelper; import com.se.simu.helper.WebHelper; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.ApplicationArguments; import org.springframework.boot.ApplicationRunner; import org.springframework.core.env.Environment; import org.springframework.stereotype.Component; import javax.annotation.Resource; /** * åå§åé 置类 * * @author WWW * @date 2024-09-12 */ @Slf4j @Component public class InitConfig implements ApplicationRunner { @Resource Environment env; @Value("${server.port}") String serverPort; @Value("${server.servlet.context-path}") String contextPath; @Override public void run(ApplicationArguments args) { // noinspection AlibabaRemoveCommentedCode try { log.info("***************** åå§å GDAL *****************" + "\n"); GdalHelper.init(env.getProperty("sys.path.gdalPath")); String path = null != contextPath && contextPath.length() > 1 ? contextPath : ""; log.info("APIææ¡£:http://localhost:" + serverPort + path + "/doc.html"); log.info("APIææ¡£:http://{}:{}{}/doc.html", WebHelper.getHostIp(), serverPort, path); log.info("***************** ç³»ç»å¯å¨å®æ¯ *****************" + "\n"); } catch (Exception ex) { log.error(ex.getMessage(), ex); } } } src/main/java/com/se/simu/config/Knife4jConfig.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,69 @@ package com.se.simu.config; import com.github.xiaoymin.knife4j.spring.annotations.EnableKnife4j; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import springfox.documentation.builders.ApiInfoBuilder; import springfox.documentation.builders.PathSelectors; import springfox.documentation.builders.RequestHandlerSelectors; import springfox.documentation.service.ApiInfo; import springfox.documentation.service.Contact; import springfox.documentation.spi.DocumentationType; import springfox.documentation.spring.web.plugins.Docket; /** * Knife4jé 置类 * * @author WWW * @date 2024-09-12 */ @Configuration @EnableKnife4j public class Knife4jConfig { @Value("${server.port}") String serverPort; @Value("${knife4j.enabled}") private boolean enabled; @Value("${knife4j.pathMapping}") private String pathMapping; @Value("${server.servlet.context-path}") String contextPath; @Bean public Docket createRestApi() { return new Docket(new DocumentationType("openApi", "3.0")) // æ¯å¦å¯ç¨Swagger .enable(enabled) // ç¨æ¥å建该APIçåºæ¬ä¿¡æ¯ï¼å±ç¤ºå¨ææ¡£ç页é¢ä¸ï¼èªå®ä¹å±ç¤ºçä¿¡æ¯ï¼ .apiInfo(apiInfo()) // åç»åç§° .groupName("æå¡") // 设置åªäºæ¥å£æ´é²ç»Swaggerå±ç¤º .select() // æ«æææææ³¨è§£çapiï¼ç¨è¿ç§æ¹å¼æ´çµæ´» .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class)) // æ«ææå®å ä¸çswagger注解 // .apis(RequestHandlerSelectors.basePackage("com.cn.project.tool.swagger")) // æ«æææ .apis(RequestHandlerSelectors.any()) .paths(PathSelectors.any()) .build() /* 设置å®å ¨æ¨¡å¼ï¼swaggerå¯ä»¥è®¾ç½®è®¿é®token */ // .securitySchemes(securitySchemes()) .pathMapping(pathMapping); } private ApiInfo apiInfo() { return new ApiInfoBuilder() //æè¿°åæ®µæ¯æMarkdownè¯æ³ .description("æ¥å£ææ¡£") .contact(new Contact("WuWeiwei", "http://127.0.0.1:" + serverPort + contextPath + "/doc.html", "252740454@qq.com")) .version("0.2") .title("AIå尿塿¥å£ææ¡£") .build(); } } src/main/java/com/se/simu/config/MybatisPlusConfig.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,48 @@ package com.se.simu.config; import com.baomidou.mybatisplus.annotation.DbType; import com.baomidou.mybatisplus.autoconfigure.ConfigurationCustomizer; import com.baomidou.mybatisplus.core.MybatisConfiguration; import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; import org.apache.ibatis.type.JdbcType; import org.mybatis.spring.annotation.MapperScan; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.transaction.annotation.EnableTransactionManagement; /** * Mybatis-Pluså页é ç½® * * @author WWW * @date 2024-09-12 */ @EnableTransactionManagement @Configuration @MapperScan("com.se.ai.mapper") public class MybatisPlusConfig { /** * æ°çå页æä»¶,ä¸ç¼åäºç¼éµå¾ªmybatisçè§å,éè¦è®¾ç½® * MybatisConfiguration#useDeprecatedExecutor = false * é¿å ç¼ååºç°é®é¢(è¯¥å±æ§ä¼å¨æ§æä»¶ç§»é¤åä¸åç§»é¤) */ @Bean public MybatisPlusInterceptor mybatisPlusInterceptor() { MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.POSTGRE_SQL)); return interceptor; } @Bean public ConfigurationCustomizer configurationCustomizer() { return new ConfigurationCustomizer() { @Override public void customize(MybatisConfiguration configuration) { configuration.setCacheEnabled(true); configuration.setMapUnderscoreToCamelCase(true); configuration.setCallSettersOnNulls(true); configuration.setJdbcTypeForNull(JdbcType.NULL); } }; } } src/main/java/com/se/simu/config/RestTemplateConfig.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,100 @@ package com.se.simu.config; import org.apache.http.client.HttpClient; import org.apache.http.impl.client.HttpClientBuilder; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.http.client.ClientHttpRequestFactory; import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; import org.springframework.http.client.SimpleClientHttpRequestFactory; import org.springframework.http.converter.HttpMessageConverter; import org.springframework.http.converter.StringHttpMessageConverter; import org.springframework.web.client.RestTemplate; import java.nio.charset.StandardCharsets; import java.util.List; /** * RestTemplateé 置类 * * @author WWW * @date 2024-09-12 */ @Configuration public class RestTemplateConfig { /** * è¿æ¥æ± çæå¤§è¿æ¥æ°é»è®¤ä¸º0ï¼ä¸éå¶ */ @Value("${remote.maxTotalConnect:0}") private int maxTotalConnect; /** * å个主æºçæå¤§è¿æ¥æ° */ @Value("${remote.maxConnectPerRoute:1000}") private int maxConnectPerRoute; /** * è¿æ¥è¶ æ¶é»è®¤5sï¼-1为ä¸éå¶ */ @Value("${remote.connectTimeout:5000}") private int connectTimeout; /** * 读åè¶ æ¶é»è®¤30sï¼-1为ä¸éå¶ */ @Value("${remote.readTimeout:30000}") private int readTimeout; /** * å建HTTP客æ·ç«¯å·¥å * * @return 客æ·ç«¯å·¥å */ private ClientHttpRequestFactory createFactory() { if (this.maxTotalConnect <= 0) { SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory(); factory.setConnectTimeout(this.connectTimeout); factory.setReadTimeout(this.readTimeout); return factory; } HttpClient httpClient = HttpClientBuilder.create().setMaxConnTotal(this.maxTotalConnect).setMaxConnPerRoute(this.maxConnectPerRoute).build(); HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory(httpClient); factory.setConnectTimeout(this.connectTimeout); factory.setReadTimeout(this.readTimeout); return factory; } /** * åå§åRestTemplate,å¹¶å å ¥springçBeanå·¥åï¼ç±springç»ä¸ç®¡ç * å¿ é¡»å æ³¨è§£@LoadBalanced * * @return */ @Bean @ConditionalOnMissingBean(RestTemplate.class) public RestTemplate getRestTemplate() { RestTemplate restTemplate = new RestTemplate(this.createFactory()); List<HttpMessageConverter<?>> converterList = restTemplate.getMessageConverters(); // éæ°è®¾ç½®StringHttpMessageConverterå符é为UTF-8ï¼è§£å³ä¸æä¹±ç é®é¢ HttpMessageConverter<?> converterTarget = null; for (HttpMessageConverter<?> item : converterList) { if (StringHttpMessageConverter.class == item.getClass()) { converterTarget = item; break; } } if (null != converterTarget) { converterList.remove(converterTarget); } converterList.add(1, new StringHttpMessageConverter(StandardCharsets.UTF_8)); return restTemplate; } } src/main/java/com/se/simu/controller/WaterController.java
@@ -1,6 +1,7 @@ package com.se.simu.controller; import com.se.simu.helper.WebHelper; import com.se.simu.service.SedbService; import com.se.simu.service.WaterService; import lombok.extern.slf4j.Slf4j; import org.springframework.http.HttpStatus; @@ -22,6 +23,9 @@ @RestController @RequestMapping("/waterlogging") public class WaterController { @Resource SedbService sedbService; @Resource WaterService waterService; @@ -146,4 +150,9 @@ return true; } @GetMapping("/test") public Object test() { return sedbService.getToken(); } } src/main/java/com/se/simu/helper/FileHelper.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,444 @@ package com.se.simu.helper; import com.twmacinta.util.MD5; import lombok.extern.slf4j.Slf4j; import org.apache.commons.codec.digest.DigestUtils; import java.io.*; import java.nio.ByteBuffer; import java.nio.channels.FileChannel; import java.nio.charset.StandardCharsets; import java.security.MessageDigest; import java.text.DecimalFormat; import java.util.List; /** * æä»¶å¸®å©ç±» * * @author WWW * @date 2024-09-12 */ @Slf4j public class FileHelper { public final static String POINT = "."; public final static int I16 = 16; public static final double D1024 = 1024.0; public static final double D1050 = 1050.0; public final static int I1000000 = 1000000; public static final char[] HEX_DIGITS = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'}; /** * è·åæä»¶å */ public static String getFileName(String file) { int idx = file.lastIndexOf(File.separator); if (idx > -1) { return file.substring(idx + 1); } return ""; } /** * è·åæä»¶åç§° */ public static String getName(String file) { String fileName = getFileName(file); int idx = fileName.lastIndexOf("."); if (idx > -1) { return fileName.substring(0, idx); } return fileName; } /** * è·åæä»¶æ©å±å */ public static String getExtension(File file) { if (file == null) { return null; } String fileName = file.getName().toLowerCase(); int idx = fileName.indexOf(POINT); if (idx == -1) { return ""; } return fileName.substring(idx); } /** * è·åæä»¶æ©å±å */ public static String getExtension(String fileName) { if (StringHelper.isEmpty(fileName)) { return ""; } int idx = fileName.lastIndexOf(POINT); if (idx == -1) { return ""; } return fileName.substring(idx).toLowerCase(); } /** * è·åå¤ç¨éäºèç½é®ä»¶æ©å±ç±»å */ 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"; } } /** * åèå使¢ç® */ public static String formatByte(long byteNumber) { double kbNumber = byteNumber / D1024; if (kbNumber < D1024) { return new DecimalFormat("#.##KB").format(kbNumber); } double mbNumber = kbNumber / D1024; if (mbNumber < D1024) { return new DecimalFormat("#.##MB").format(mbNumber); } double gbNumber = mbNumber / D1024; if (gbNumber < D1024) { return new DecimalFormat("#.##GB").format(gbNumber); } double tbNumber = gbNumber / D1024; return new DecimalFormat("#.##TB").format(tbNumber); } /** * è·åå¹³æ¹ç±³ */ public static String getSquareMeter(double num) { if (num < I1000000) { return new DecimalFormat("#.##å¹³æ¹ç±³").format(num); } double knum = num / I1000000; return new DecimalFormat("#.##å¹³æ¹åç±³").format(knum); } /** * byte转MB */ public static double sizeToMb(long size) { if (size < D1050) { return 0.001; } String str = String.format("%.3f", size / D1024 / D1024); return Double.parseDouble(str); } /** * 3.è·åæä»¶MD5ç ï¼JDKï¼ */ public static String getMd5ByJdk(String filePath) throws IOException { FileInputStream fileStream = new FileInputStream(filePath); String md5 = DigestUtils.md5Hex(fileStream); fileStream.close(); return md5; } /** * 2.è·åå¿«é MD5 ç */ public static String getFastMd5(String filePath) throws IOException { String hash = MD5.asHex(MD5.getHash(new File(filePath))); MD5 md5 = new MD5(); md5.Update(hash, null); return md5.asHex(); } /** * å 餿件夹 * * @param dir æä»¶å¤¹ */ public static void deleteDir(String dir) { File file = new File(dir); deleteFiles(file); } /** * 级èå 餿件 * * @param file æä»¶ */ public static void deleteFiles(File file) { if (null == file || !file.exists()) { return; } if (file.isDirectory()) { File[] files = file.listFiles(); if (null != files && files.length > 0) { for (File f : files) { if (f.isDirectory()) { deleteFiles(f); } else { f.delete(); } } } } file.delete(); } /** * è·åç¸å¯¹è·¯å¾ * * @param file æä»¶ * @return ç¸å¯¹è·¯å¾ */ public static String getRelativePath(String file) { if (StringHelper.isEmpty(file)) { return null; } int idx = file.lastIndexOf(File.separator); int start = file.lastIndexOf(File.separator, idx - 1); return file.substring(start + 1); } /** * è·åè·¯å¾ * * @param file æä»¶ * @return æä»¶è·¯å¾ */ public static String getPath(String file) { if (StringHelper.isEmpty(file)) { return null; } int end = file.lastIndexOf(File.separator); return file.substring(0, end); } /** * 1.è·åæä»¶çMD5 */ @SuppressWarnings("unused") public static String getFileMd5(String filePath) { FileInputStream fis = null; try { MessageDigest md = MessageDigest.getInstance("MD5"); fis = new FileInputStream(new File(filePath)); FileChannel fChannel = fis.getChannel(); ByteBuffer buffer = ByteBuffer.allocateDirect(1024 * 1024); while (fChannel.read(buffer) != -1) { buffer.flip(); md.update(buffer); buffer.compact(); } byte[] b = md.digest(); return byteToHexString(b); } catch (Exception ex) { ex.printStackTrace(); return null; } finally { try { if (null != fis) { fis.close(); } } catch (IOException ex) { ex.printStackTrace(); } } } /** * åèç 转16è¿å¶ */ public static String byteToHexString(byte[] tmp) { // æ¯ä¸ªåèç¨ 16 è¿å¶è¡¨ç¤ºçè¯ï¼ä½¿ç¨ä¸¤ä¸ªåç¬¦ï¼ char[] str = new char[16 * 2]; // æä»¥è¡¨ç¤ºæ 16 è¿å¶éè¦ 32 个å符ï¼è¡¨ç¤ºè½¬æ¢ç»æä¸å¯¹åºçå符ä½ç½® int k = 0; // ä»ç¬¬ä¸ä¸ªåèå¼å§ï¼å¯¹ MD5 çæ¯ä¸ä¸ªåè for (int i = 0; i < I16; i++) { // è½¬æ¢æ 16 è¿å¶å符çè½¬æ¢ byte byte0 = tmp[i]; // ååèä¸é« 4 ä½çæ°åè½¬æ¢ str[k++] = HEX_DIGITS[byte0 >>> 4 & 0xf]; // >>> 为é»è¾å³ç§»ï¼å°ç¬¦å·ä½ä¸èµ·å³ç§»ï¼ ååèä¸ä½ 4 ä½çæ°åè½¬æ¢ str[k++] = HEX_DIGITS[byte0 & 0xf]; } // æ¢åçç»æè½¬æ¢ä¸ºå符串 return new String(str); } /** * è·åå符串çMD5ç */ public static String getStringMd5(String text) { StringBuilder builder = new StringBuilder(); try { MessageDigest md5 = MessageDigest.getInstance("MD5"); byte[] bytes = md5.digest(text.getBytes(StandardCharsets.UTF_8)); for (byte aByte : bytes) { builder.append(Integer.toHexString((0x000000FF & aByte) | 0xFFFFFF00).substring(6)); } } catch (Exception ex) { log.error(ex.getMessage(), ex); } return builder.toString(); } /** * æ ¹æ®è·¯å¾è·åæä»¶ */ public static void getFilesByPath(List<String> list, String path) { File file = new File(path); if (file.isDirectory()) { File[] files = file.listFiles(); if (null == files) { return; } for (File f : files) { if (f.isDirectory()) { getFilesByPath(list, f.getPath()); } else { list.add(f.getPath()); } } } else { list.add(file.getPath()); } } /** * å¤å¶æä»¶ * * @param src æºæä»¶ * @param dest ç®å½æä»¶ */ public static void copyFile(File src, File dest) throws IOException { InputStream is = null; OutputStream os = null; try { is = new FileInputStream(src); os = new FileOutputStream(dest); byte[] buffer = new byte[1024]; int length; while ((length = is.read(buffer)) > 0) { os.write(buffer, 0, length); } } finally { os.close(); is.close(); } } } src/main/java/com/se/simu/helper/GdalHelper.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,116 @@ package com.se.simu.helper; import lombok.extern.slf4j.Slf4j; import org.gdal.gdal.Band; import org.gdal.gdal.Dataset; import org.gdal.gdal.gdal; import org.gdal.gdalconst.gdalconst; import org.gdal.ogr.ogr; import org.gdal.osr.SpatialReference; import org.gdal.osr.osr; import java.io.File; /** * GDAL帮å©ç±» * * @author WWW * @date 2024-09-12 */ @Slf4j @SuppressWarnings("ALL") public class GdalHelper { public final static int I4326 = 4326; public final static int I4490 = 4490; public static SpatialReference SR4326; public static SpatialReference SR4490; public final static String CGCS2000 = "CGCS2000"; /** * åå§å */ public static void init(String gdalPath) { // é ç½®ç¯å¢åé if (!StringHelper.isEmpty(gdalPath)) { if (WebHelper.isWin()) { gdal.SetConfigOption("GDAL_DATA", gdalPath + "/gdal-data"); gdal.SetConfigOption("PROJ_LIB", gdalPath + "/proj7/share"); //System.setProperty("PROJ_LIB", gdalPath + "/proj7/share") gdal.SetConfigOption("GDAL_DRIVER_PATH", gdalPath + "/gdalplugins"); String path = System.getenv("PATH"); if (!path.contains(gdalPath)) { System.setProperty("PATH", path + ";" + gdalPath); } } else { //System.setProperty("java.library.path", gdalPath); } } // æ¯æä¸æè·¯å¾ gdal.SetConfigOption("GDAL_FILENAME_IS_UTF8", "YES"); // 屿§è¡¨æ¯æä¸æï¼CP936 gdal.SetConfigOption("SHAPE_ENCODING", ""); gdal.SetConfigOption("PGEO_DRIVER_TEMPLATE", "DRIVER=Microsoft Access Driver (*.mdb, *.accdb);DBQ=%s"); gdal.SetConfigOption("MDB_DRIVER_TEMPLATE", "DRIVER=Microsoft Access Driver (*.mdb, *.accdb);DBQ=%s"); // æ³¨åææçé©±å¨ gdal.AllRegister(); ogr.RegisterAll(); initSr(); } /** * åå§ååæ ç³» * * https://blog.csdn.net/CallmeAdo/article/details/127558139 */ public static void initSr() { try { SR4326 = new SpatialReference(); SR4326.ImportFromEPSG(I4326); // 对äºlat/long顺åºçå°çCRSï¼æ°æ®ä»ç¶æ¯long/lat顺åºç SR4326.SetAxisMappingStrategy(osr.OAMS_TRADITIONAL_GIS_ORDER); SR4490 = new SpatialReference(); SR4490.ImportFromEPSG(I4490); SR4490.SetAxisMappingStrategy(osr.OAMS_TRADITIONAL_GIS_ORDER); } catch (Exception ex) { log.error(ex.getMessage(), ex); } } /** * å建éåå¡ */ public static void createPyramid(String file) { Dataset ds = null; try { File f = new File(file); if (!f.exists() || f.isDirectory()) { return; } ds = gdal.Open(file, gdalconst.GA_ReadOnly); if (null == ds || ds.getRasterCount() < 1 || null == ds.GetSpatialRef()) { return; } // å建éåå¡ Band band = ds.GetRasterBand(1); if (0 == band.GetOverviewCount()) { ds.BuildOverviews("nearest", new int[]{2, 4, 6, 8, 16}, null); } } catch (Exception ex) { log.error(ex.getMessage(), ex); } finally { if (null != ds) { ds.delete(); } } } } src/main/java/com/se/simu/helper/StringHelper.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,253 @@ package com.se.simu.helper; import java.sql.Timestamp; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.UUID; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * å符串帮å©ç±» * * @author WWW * @date 2024-09-12 */ public class StringHelper { public final static String COMMA = ","; public final static String PWD_REG = "^(?![a-zA-Z]+$)(?![A-Z0-9]+$)(?![A-Z\\W!@#$%^&*`~()\\-_+=,.?;<>]+$)(?![a-z0-9]+$)(?![a-z\\W!@#$%^&*`~()\\-_+=,.?;<>]+$)(?![0-9\\W!@#$%^&*`~()\\-_+=,.?;<>]+$)[a-zA-Z0-9\\W!@#$%^&*`~()\\-_+=,.?;<>]{12,20}$"; /** * æ°åæ£å */ public static final Pattern NUMBER_PATTERN = Pattern.compile("-?\\d+(\\.\\d+)?"); /** * æ ¼å¼åå½åç³»ç»æ¥æ 1 */ public static final SimpleDateFormat YMD_FORMAT = new SimpleDateFormat("yyyy-MM-dd"); /** * æ ¼å¼åå½åç³»ç»æ¥æ 2 */ public static final SimpleDateFormat YMDHMS_FORMAT = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); /** * æ ¼å¼åå½åç³»ç»æ¥æ 3 */ public static final SimpleDateFormat YMD2_FORMAT = new SimpleDateFormat("yyyyMMdd"); /** * æ ¼å¼åå½åç³»ç»æ¥æ 4 */ public static final SimpleDateFormat YMDHMS2_FORMAT = new SimpleDateFormat("yyyyMMddHHmmss"); /** * 夿å符串,æ¯å¦ä¸ºæ´æ° */ public static boolean isInteger(String str) { return str != null && str.matches("[0-9]+"); } /** * 夿å符串,æ¯å¦ä¸ºæµ®ç¹æ° */ public static boolean isNumeric(String str) { return str != null && str.matches("-?\\d+(\\.\\d+)?"); } /** * 夿å符串,æ¯å¦ä¸ºæµ®ç¹æ° */ public static boolean isNumeric2(String str) { return str != null && NUMBER_PATTERN.matcher(str).matches(); } /** * æ¥ææ£å */ public static Pattern datePattern = Pattern.compile("^((\\d{2}(([02468][048])|([13579][26]))[\\-\\/]((((0?[13578])|(1[02]))[\\-\\/]((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\\-\\/]((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\\-\\/]((0?[1-9])|([1-2][0-9])))))|(\\d{2}(([02468][1235679])|([13579][01345789]))[\\-\\/]((((0?[13578])|(1[02]))[\\-\\/]((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\\-\\/]((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\\-\\/]((0?[1-9])|(1[0-9])|(2[0-8]))))))(\\s(((0?[0-9])|([1-2][0-3]))\\:([0-5]?[0-9])((\\s)|(\\:([0-5]?[0-9])))))?$"); /** * SQLæ£å */ public static Pattern sqlPattern = Pattern.compile("|and|exec|execute|insert|select|delete|update|count|drop|\\*|%|chr|mid|master|truncate|char|declare|sitename|net user|xp_cmdshell|;|or|-|\\+|,|like"); /** * åç¬¦ä¸²è½¬ä¸ºæ¥æ */ public static Date parseDate(String str) { try { return YMD_FORMAT.parse(str); } catch (Exception ex) { return null; } } /** * åç¬¦ä¸²è½¬ä¸ºæ¥ææ¶é´ */ public static Date parseTime(String str) { try { return YMDHMS_FORMAT.parse(str); } catch (Exception e) { return null; } } /** * 夿弿¯å¦ä¸ºæ¥ææ ¼å¼ */ public static boolean isDate(String strDate) { Matcher m = datePattern.matcher(strDate); return m.matches(); } /** * åç¬¦ä¸²ï¼æ¯å¦ä¸ºnull æ "" */ public static boolean isNull(String str) { return null == str || str.length() == 0; } /** * å符串,æ¯å¦ä¸ºç©ºnullåç©ºæ ¼ */ public static boolean isEmpty(String str) { return null == str || "".equals(str.trim()); } /** * è·å like å符串 */ public static String getLikeStr(String str) { return isEmpty(str) ? null : "%" + str.trim() + "%"; } /** * è·å like å符串 */ public static String getLikeUpperStr(String str) { return isEmpty(str) ? null : "%" + str.trim().toUpperCase() + "%"; } /** * è·å å³like å符串 */ public static String getRightLike(String str) { return isEmpty(str) ? null : str.trim() + "%"; } /** * è·åå¾å½¢çWKTå符串 */ public static String getGeomWkt(String wkt) { if (isEmpty(wkt)) { return "null"; } return String.format("ST_GeomFromText('%s')", wkt); } /** * é¦åæ¯å¤§å */ public static String firstCharToUpperCase(String str) { return str.substring(0, 1).toUpperCase() + str.substring(1); } /** * é¦åæ¯å°å */ public static String firstCharToLowerCase(String str) { return str.substring(0, 1).toLowerCase() + str.substring(1); } /** * 夿弿¯å¦åå¨SQLæ³¨å ¥ * * @param str å符串 * @return æ¯/å¦ */ public static boolean isSqlInjection(String str) { if (null == str) { return false; } Matcher m = sqlPattern.matcher(str); return m.matches(); } /** * æ ¡éªå¯ç æ¯/å¦åæ³ * * @param pwd å¯ç * @return æ¯/å¦ä¸ºæ æç */ public static boolean isPwdInvalid(String pwd) { return !Pattern.matches(PWD_REG, pwd); } /** * è·åGUID */ public static String getGuid() { return UUID.randomUUID().toString(); } /** * è·ååéå·®æ° */ public static long getMinuteDifference(Timestamp ts) { return (ts.getTime() - System.currentTimeMillis()) / 1000 / 60; } /** * è¿æ¥Listéå * * @param list list æ´æ°éå * @param join join è¿æ¥å符 * @param <T> æ³åç±» * @return å符串 */ public static <T> String join(List<T> list, String join) { if (null == list || list.isEmpty()) { return ""; } StringBuilder sb = new StringBuilder(); for (T t : list) { if (null != t) { sb.append(t.toString()).append(join); } } if (sb.length() > 0 && sb.lastIndexOf(join) == sb.length() - join.length()) { // å é¤ä»ç´¢å¼ start å¼å§å° end ä¹é´çå符ï¼å³ åå æ¬ åä¸å æ¬ã sb.delete(sb.length() - join.length(), sb.length()); } return sb.toString(); } /** * åç¬¦ä¸²è½¬æ´æ°éå */ public static List<Integer> strToIntegers(String str) { if (isEmpty(str)) { return null; } List<Integer> list = new ArrayList<>(); for (String s : str.split(COMMA)) { list.add(Integer.parseInt(s)); } return list; } } src/main/java/com/se/simu/helper/WebHelper.java
@@ -31,6 +31,12 @@ private final static String UNKNOWN = "unknown"; public static boolean isWin() { String osName = System.getProperty("os.name"); return osName.startsWith("Windows"); } /** * æ ¼å¼åæ¥æ */ src/main/java/com/se/simu/service/SedbService.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,48 @@ package com.se.simu.service; import cn.hutool.json.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.web.client.RestTemplate; import javax.annotation.Resource; /** * SDDBæå¡ç±» * * @author WWW * @date 2024-09-12 */ @Slf4j @Service public class SedbService { @Value("${sedb.url}") String url; @Value("${sedb.user}") String user; @Value("${sedb.pwd}") String pwd; @Resource RestTemplate restTemplate; public String getToken() { //http://106.120.22.26:8013/account-service/security/publickey String key = getPublicKey(); return key; } public String getPublicKey() { String uri = url + "account-service/security/publickey"; //{"datetime":"2024-09-12 17:24:38","code":200,"data":"MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCtFwJCh2taVTEi05C8qT2oG7Y+rDmJhlO4zicpSeRtiro9LsytePeWI7BXM6sfDU0WeKun1izawcfgGkZgnoJuMBluAOKI1tL0uCrR+DreNLqMVtnXHwoWEIk/hGJedDWaf3q22aGDyEB5h9qCq0JklSShP1Ih4ppap4LmgxdTPQIDAQAB"} JSONObject obj = restTemplate.getForObject(uri, JSONObject.class); return obj.getStr("data"); } } src/main/resources/application.yml
@@ -10,7 +10,30 @@ application: name: SimuServer mybatis-plus: type-aliases-package: com.se.ai.domain config-location: classpath:mybatis.xml mapper-locations: classpath:mapper/**/*.xml pagehelper: autoDialect: true autoRuntimeDialect: true reasonable: true supportMethodsArguments: true params: count=countSql remote: maxTotalConnect: 0 maxConnectPerRoute: 1000 connectTimeout: -1 readTimeout: -1 sys: ver: 0.1 path: data: D:\simu data: D:\simu sedb: url: http://106.120.22.26:8013/ user: WUWEIWEI pwd: WUWEIWEI