| | |
| | | } |
| | | @GetMapping("/useMyTask") |
| | | public ResponseResult useMyTask() throws Exception { |
| | | timerUtil.myTask(); |
| | | timerUtil.myTask2(); |
| | | return ResponseResult.success(); |
| | | try { |
| | | // timerUtil.myTask(); |
| | | timerUtil.myTask2(); |
| | | return ResponseResult.success(); |
| | | }catch (Exception e){ |
| | | throw new RuntimeException("db存储发送出现异常"); |
| | | } |
| | | } |
| | | /** |
| | | * 根据图斑的地块编号获取相对应音视频 |
| | |
| | | */ |
| | | @Scheduled(cron = "0 0 0 * * ?") |
| | | public void myTask() throws Exception { |
| | | String taskId=""; |
| | | String taskId = ""; |
| | | String workspaceId = "4a574db8-4ad3-48f7-9f16-3edbcd8056e1"; |
| | | // 获取未规划的图斑集合 |
| | | List<List<LotInfo>> lists = getNoPlan(); |
| | |
| | | backWayline(multipartFile, waylineName, workspaceId, backclaim().getUsername()); |
| | | //将为规划的图斑状态更新为已规划 |
| | | updatePatchesStatu(list); |
| | | // waylineJobService.publishFlightTask(JobParam("656c62f4-cb86-4911-930d-b38089829348"),backclaim()); |
| | | } |
| | | |
| | | } |
| | |
| | | //更新媒体文件的是否添加状态 |
| | | updateMediaStatu(mediaFile); |
| | | } |
| | | //存储db到服务器 |
| | | dbSave(territoryConfigPojo.getResult(), territoryConfigPojo.getResultsave(), taskId); |
| | | //发送请求给第三方接口 |
| | | sendPostWithFileAndParameter(territoryConfigPojo.getResult(), taskId); |
| | | |
| | | //存储db到服务器 |
| | | dbSave(territoryConfigPojo.getResult(), territoryConfigPojo.getResultsave(), taskId); |
| | | } |
| | | } |
| | | |
| | |
| | | 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.setName("云飞行调查" + timestamp); |
| | | param.setExecuteStartTimeArr(listOfLists); |
| | | param.setTaskType(TIMED); |
| | | param.setOutOfControlAction(0); |
| | | param.setRepFreType(3); |
| | |
| | | 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()); |
| | | } |
| | |
| | | } |
| | | return folder; |
| | | } |
| | | |
| | | } |
| | |
| | | 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; |
| | |
| | | return count; |
| | | } |
| | | |
| | | public void insertOneData(MediaFileEntity mediaFile, LotInfo lotInfo) throws Exception { |
| | | public void insertOneData(MediaFileEntity mediaFile, LotInfo lotInfo) throws Exception { |
| | | TbFjEntity tbFj = dbConvertToEntity(mediaFile, lotInfo); |
| | | tbFjMapper.insert(tbFj); |
| | | if (tbFj.getFjysgd()==3000){ |
| | | tbFjMapper.insert(tbFj); |
| | | } |
| | | } |
| | | |
| | | @Override |
| | |
| | | Double absoluteAltitude = jsonObject.getDouble("absoluteAltitude"); |
| | | Double relativeAltitude = jsonObject.getDouble("relativeAltitude"); |
| | | Double gimbalYawDegree = jsonObject.getDouble("gimbalYawDegree"); |
| | | Long sj =jsonObject.getLong("createdTime"); |
| | | Long sj = jsonObject.getLong("createdTime"); |
| | | JSONObject shootPosition = jsonObject.getJSONObject("shootPosition"); |
| | | Double lat = shootPosition.getDouble("lat"); |
| | | Double lng = shootPosition.getDouble("lng"); |
| | |
| | | String zsdm = "23C8CCC61E3042FBA6A658F319337B1A"; |
| | | String dklx = "0"; |
| | | int fjlx = 1; |
| | | String pstz="Y"; |
| | | String pssj=convertTimestampToDateTime(sj); |
| | | String pstz = "Y"; |
| | | String pssj = convertTimestampToDateTime(sj); |
| | | String bsm = UUID.randomUUID().toString(); |
| | | String fjmc = mediaFile.getFileName(); |
| | | String key = mediaFile.getObjectKey(); |
| | |
| | | //对应图片和视频文件进行不同处理 |
| | | boolean endsWith = key.endsWith(".mp4"); |
| | | if (!endsWith) { |
| | | file1 = WaterMarkUtil.addWatermark(file, patchesConfigPojo.getUnzip(), sj, lat, lng,gimbalYawDegree); |
| | | file1 = WaterMarkUtil.addWatermark(file, patchesConfigPojo.getUnzip(), sj, lat, lng, gimbalYawDegree); |
| | | FJ = fileToByteArray(file1); |
| | | } else { |
| | | file1 = VideoZipUtil.compressVideo(file, 800000, 128000, 1280, 720); |
| | | FJ = fileToByteArray(file1); |
| | | } |
| | | String sm3 = Sm3Util.calculateSM3Hash(fjhxz+","+pssj+","+lng+","+lat+","+gimbalYawDegree+","+psjd+","+pshgj+","+psry+","+zsdm); |
| | | String sm3 = Sm3Util.calculateSM3Hash(fjhxz + "," + pssj + "," + lng + "," + lat + "," + gimbalYawDegree + "," + psjd + "," + pshgj + "," + psry + "," + zsdm); |
| | | |
| | | byte[] hash = sm3.getBytes(); // 注意:使用SM3或其他哈希算法来计算数据的哈希值 |
| | | // 加载私钥 |
| | |
| | | .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) |
| | |
| | | fis.close(); |
| | | return data; |
| | | } |
| | | |
| | | public static String convertTimestampToDateTime(long timestamp) { |
| | | // 将时间戳转换为 Instant 对象 |
| | | Instant instant = Instant.ofEpochMilli(timestamp); |
| | |
| | | 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)); |
| | | } |
| | | } |
| | |
| | | * @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"); |
| | |
| | | |
| | | // 设置水印文字 "江西调查云" |
| | | 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)); // 使用宋体字体 |
| | |
| | | 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); |
| | |
| | | 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); |
| | | // 将文本的起始位置设置为图像宽度减去文本的宽度 |
| | |
| | | // 释放 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) { |