src/main/java/com/dji/sample/patches/controller/PatchesController.java
@@ -76,9 +76,13 @@ } @GetMapping("/useMyTask") public ResponseResult useMyTask() throws Exception { timerUtil.myTask(); try { // timerUtil.myTask(); timerUtil.myTask2(); return ResponseResult.success(); }catch (Exception e){ throw new RuntimeException("db存储发送出现异常"); } } /** * 根据图斑的地块编号获取相对应音视频 src/main/java/com/dji/sample/patches/utils/TimerUtil.java
@@ -109,6 +109,7 @@ backWayline(multipartFile, waylineName, workspaceId, backclaim().getUsername()); //将为规划的图斑状态更新为已规划 updatePatchesStatu(list); // waylineJobService.publishFlightTask(JobParam("656c62f4-cb86-4911-930d-b38089829348"),backclaim()); } } @@ -145,11 +146,10 @@ //更新媒体文件的是否添加状态 updateMediaStatu(mediaFile); } //存储db到服务器 dbSave(territoryConfigPojo.getResult(), territoryConfigPojo.getResultsave(), taskId); //发送请求给第三方接口 sendPostWithFileAndParameter(territoryConfigPojo.getResult(), taskId); //存储db到服务器 dbSave(territoryConfigPojo.getResult(), territoryConfigPojo.getResultsave(), taskId); } } @@ -243,12 +243,13 @@ long timestamp = System.currentTimeMillis(); List<List<Long>> listOfLists = new ArrayList<>(); List<Long> sublist = new ArrayList<>(); sublist.add(1715852375L); // 添加整数值 sublist.add(1715941980L); // 添加整数值 listOfLists.add(sublist); List<Long> list = new ArrayList<>(); list.add(1715852375L); list.add(1715941980L); CreateJobParam param = new CreateJobParam(); param.setName("云飞行调查"+timestamp); param.setExecuteStartTimeArr(listOfLists); param.setTaskType(TIMED); param.setOutOfControlAction(0); param.setRepFreType(3); @@ -328,12 +329,16 @@ HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<>(body, headers); // 发送请求 restTemplate.exchange( ResponseEntity<String> response =restTemplate.exchange( "https://jxlandcloud.org.cn/landCloudWork/artifact/media/upload.action", // "http://localhost:6789/territory/tbdkjbxx/upload", HttpMethod.POST, requestEntity, String.class); System.out.println(response); System.out.println(response); System.out.println(response); System.out.println(response); } catch (Exception e) { throw new IllegalArgumentException("db推送失败" + e.getMessage()); } @@ -411,4 +416,5 @@ } return folder; } } src/main/java/com/dji/sample/territory/service/impl/TbFjServiceImpl.java
@@ -21,6 +21,8 @@ import javax.xml.crypto.Data; import java.awt.image.BufferedImage; import java.io.*; import java.math.BigDecimal; import java.math.RoundingMode; import java.net.HttpURLConnection; import java.net.URL; import java.text.SimpleDateFormat; @@ -70,7 +72,9 @@ public void insertOneData(MediaFileEntity mediaFile, LotInfo lotInfo) throws Exception { TbFjEntity tbFj = dbConvertToEntity(mediaFile, lotInfo); if (tbFj.getFjysgd()==3000){ tbFjMapper.insert(tbFj); } } @Override @@ -142,10 +146,10 @@ .dkbsm(lotInfo.getBsm()) .xzqdm(lotInfo.getXzqdm()) .dklx(dklx) .xdgd(relativeAltitude) .jdgd(absoluteAltitude) .Latitude(lat) .longitude(lng) .xdgd(truncateToTwoDecimalPlaces(relativeAltitude)) .jdgd(truncateToTwoDecimalPlaces(absoluteAltitude)) .Latitude(truncateToSevenDecimalPlaces(lat)) .longitude(truncateToSevenDecimalPlaces(lng)) .fj(FJ) .fjmc(fjmc) .fjlx(fjlx) @@ -211,6 +215,7 @@ fis.close(); return data; } public static String convertTimestampToDateTime(long timestamp) { // 将时间戳转换为 Instant 对象 Instant instant = Instant.ofEpochMilli(timestamp); @@ -222,4 +227,25 @@ DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); return dateTime.format(formatter); } public static Double truncateToTwoDecimalPlaces(Double value) { if (value == null) { return null; // 处理null值情况 } BigDecimal bd = new BigDecimal(value).setScale(2, RoundingMode.DOWN); return bd.doubleValue(); } public static Double truncateToSevenDecimalPlaces(Double value) { if (value == null) { return null; // 处理null值情况 } BigDecimal bd = new BigDecimal(value).setScale(7, RoundingMode.DOWN); return bd.doubleValue(); } public static void main(String[] args) { System.out.println(truncateToSevenDecimalPlaces(152.00666565)); System.out.println(truncateToTwoDecimalPlaces(12.006)); } } src/main/java/com/dji/sample/territory/utils/WaterMarkUtil.java
@@ -23,8 +23,8 @@ * @return 添加水印并压缩后的图片文件。 * @throws IOException 如果读取或保存图片失败。 */ public static File addWatermark(File file, String path, Long pssj, Double lat, Double lng, Double angles) throws IOException { String author="中图智绘无人机"; public static File addWatermark(File file, String path, Long pssj, Double lat, Double lng, Double angles) throws IOException, FontFormatException { String angel=angle(angles); Long timestamp = pssj; // 例如:Unix 时间戳(以秒为单位) SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); @@ -42,7 +42,7 @@ // 设置水印文字 "江西调查云" String watermarkText = "江西调查云"; float alpha = 0.7f; // 设置透明度为 0.7 float alpha = 0.8f; // 设置透明度为 0.7 AlphaComposite alphaComposite = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, alpha); g2d.setComposite(alphaComposite); g2d.setFont(new Font("宋体", Font.BOLD, 150)); // 使用宋体字体 @@ -58,11 +58,17 @@ g2d.setTransform(at); // 绘制左上角旋转水印文字 g2d.drawString(watermarkText, x1, y1); alphaComposite = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 1.0f); alphaComposite = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.7f); g2d.setComposite(alphaComposite); String extraInfo = String.format("%s\nlon:%.9f lat:%.6f\n%s 时间:%s", author,lng, lat,angel,sd); g2d.setFont(new Font("宋体", Font.BOLD, 50)); // 使用宋体字体,更小的字号 g2d.setBackground(Color.black); String extraInfo = String.format("Lon:%.9f Lat:%.6f\n%s 时间:%s", lng, lat,angel,sd); File fontFile = new File("src/main/java/com/dji/sample/territory/utils/MiSans-Normal.ttf"); // 替换为你的字体文件路径 Font customFont = Font.createFont(Font.TRUETYPE_FONT, fontFile).deriveFont(36.00F); // 注册字体 GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); ge.registerFont(customFont); g2d.setFont(customFont); // 计算文本宽度和高度 FontMetrics fm = g2d.getFontMetrics(); int textWidth = fm.stringWidth(extraInfo); @@ -71,10 +77,32 @@ g2d.setTransform(new AffineTransform()); // 设置文本位置(右下角) int x2 = originalImage.getWidth() - textWidth - 30; // 右对齐的 x 坐标 int y2 = originalImage.getHeight() - textHeight - 68; // 最底部位置 y 坐标 int y2 = originalImage.getHeight() - textHeight - 30; // 最底部位置 y 坐标 int rectX = originalImage.getWidth() - textWidth +530; int rectY = originalImage.getHeight() - textHeight -15; // 绘制半透明黑色背景矩形 Color semiTransparentColor = new Color(0, 0, 0, 156); // 0-255 的 alpha 值,0 表示完全透明,255 表示完全不透明 g2d.setColor(semiTransparentColor); g2d.fillRect(rectX, rectY, textWidth, textHeight-6); int rectXs = originalImage.getWidth() - textWidth +450 ; int rectYs = originalImage.getHeight() - textHeight -62; // 绘制半透明黑色背景矩形 g2d.setColor(semiTransparentColor); g2d.fillRect(rectXs, rectYs, textWidth, textHeight-10); // int rectXw = originalImage.getWidth() - textWidth +1510 ; // int rectYw = originalImage.getHeight() - textHeight -124; // // // 绘制半透明黑色背景矩形 // g2d.setColor(semiTransparentColor); // g2d.fillRect(rectXw, rectYw, textWidth, textHeight-6); // 绘制文本信息 String[] lines = extraInfo.split("\n"); for (String line : lines) { g2d.setColor(Color.WHITE); // 计算每行文本的宽度 int lineWidth = fm.stringWidth(line); // 将文本的起始位置设置为图像宽度减去文本的宽度 @@ -84,15 +112,14 @@ // 释放 Graphics2D 对象 g2d.dispose(); // 保存添加水印后的图片 File outputFile = File.createTempFile("mark", ".jpg"); File originalImageFiles = new File(outputFile.toURI()); File outputFile = new File("src/main/copy.jpeg"); try { ImageIO.write(originalImage, "jpg", outputFile); ImageIO.write(originalImage, "jpg", outputFile); // 将图像写入临时文件 } catch (IOException e) { throw new IllegalArgumentException("水印图片保存失败"); } float compressionQuality = 0.5f; // 0.0 - 1.0, higher value means better quality return compressImageAndGetFile(originalImageFiles, compressionQuality); return outputFile; // 返回保存的文件对象 } public static String angle(double angle) {