From 2db1aa88e8ab53096a936163d686b90d8e056a99 Mon Sep 17 00:00:00 2001
From: rain <167982779@qq.com>
Date: Wed, 21 Aug 2024 23:18:33 +0800
Subject: [PATCH] 国土对接返回信息加密

---
 src/main/java/com/dji/sample/droneairport/service/impl/RegistServiceImpl.java |   58 ++++++++++++++++------------
 src/main/java/com/dji/sample/droneairport/controller/RegistController.java    |   13 ++++--
 src/main/java/com/dji/sample/droneairport/service/RegistService.java          |    2 
 3 files changed, 42 insertions(+), 31 deletions(-)

diff --git a/src/main/java/com/dji/sample/droneairport/controller/RegistController.java b/src/main/java/com/dji/sample/droneairport/controller/RegistController.java
index 7bec1ad..8d4c472 100644
--- a/src/main/java/com/dji/sample/droneairport/controller/RegistController.java
+++ b/src/main/java/com/dji/sample/droneairport/controller/RegistController.java
@@ -18,6 +18,7 @@
 import java.io.IOException;
 import java.io.UnsupportedEncodingException;
 import java.util.Map;
+import java.util.UUID;
 
 import static com.dji.sample.component.AuthInterceptor.TOKEN_CLAIM;
 
@@ -52,7 +53,7 @@
     public ResponseResult droneStatus(@RequestParam String deviceid, HttpServletResponse response) throws Exception {
         Map<String, String> info=registService.getDroneState(deviceid);
         response.setHeader("x-lc-secret", info.get("serect"));
-        return ResponseResult.success(info.get("text"));
+        return ResponseResult.success(200,"获取无人机机场状态成功!",info.get("text"),UUID.randomUUID().toString());
     }
 
     @PostMapping("/AddTask")
@@ -62,7 +63,7 @@
         String creator = customClaim.getUsername();
         Map<String, String> info = registService.AddTask(body, headerValue, creator);
         response.setHeader("x-lc-secret", info.get("serect"));
-        return ResponseResult.success(200, "无人机机场任务添加成功", info.get("traceId"), info.get("jobId"));
+        return ResponseResult.success(200, "无人机机场任务添加成功", info.get("taskid"),info.get("traceId"));
     }
 
     @PostMapping("/updateTask")
@@ -72,12 +73,14 @@
         String creator = customClaim.getUsername();
         Map<String, String>  info = registService.updateTask(body, headerValue, creator);
         response.setHeader("x-lc-secret", info.get("serect"));
-        return ResponseResult.success(200, "无人机机场任务更新成功", info.get("traceId"), info.get("jobId"));
+        return ResponseResult.success(200, "无人机机场任务更新成功",info.get("taskid"), info.get("traceId"));
     }
 
     @GetMapping("/cancelTask")
-    public ResponseResult cancelTask(@RequestParam String taskid) {
-        return ResponseResult.success(registService.cancelTask(taskid));
+    public ResponseResult cancelTask(@RequestParam String taskid,HttpServletResponse response) throws InvalidCipherTextException, IOException {
+        Map<String, String> info=registService.cancelTask(taskid);
+        response.setHeader("x-lc-secret", info.get("serect"));
+        return ResponseResult.success(200,"无人机任务取消成功",info.get("taskid"), UUID.randomUUID().toString());
     }
     @PostMapping("/queryTaskStatus")
     public ResponseResult queryTaskStatus(HttpServletRequest request, @RequestParam String taskid) throws Exception {
diff --git a/src/main/java/com/dji/sample/droneairport/service/RegistService.java b/src/main/java/com/dji/sample/droneairport/service/RegistService.java
index b50d9d9..a4e7e29 100644
--- a/src/main/java/com/dji/sample/droneairport/service/RegistService.java
+++ b/src/main/java/com/dji/sample/droneairport/service/RegistService.java
@@ -72,7 +72,7 @@
      * @param taskId 任务ID,用于标识待取消的任务
      * @return 返回任务取消操作的结果,包含是否成功及可能的错误信息
      */
-    ResponseResult cancelTask(String taskId);
+    Map<String, String>  cancelTask(String taskId) throws InvalidCipherTextException, IOException;
 
     /**
      * 查询任务状态
diff --git a/src/main/java/com/dji/sample/droneairport/service/impl/RegistServiceImpl.java b/src/main/java/com/dji/sample/droneairport/service/impl/RegistServiceImpl.java
index 6b69cde..da980ff 100644
--- a/src/main/java/com/dji/sample/droneairport/service/impl/RegistServiceImpl.java
+++ b/src/main/java/com/dji/sample/droneairport/service/impl/RegistServiceImpl.java
@@ -88,7 +88,7 @@
             String secret = SM4Util.generateSM4Key();
             String jsonBody = buildRequestBody(registDto);
             String base64 = SM4Util.encrypt(secret, jsonBody);
-            String keys=Utils.encrypt(secret,"04CF7CAE31B5130D1D5D1AC1DC2778D94533868A8D57FC02BBD97B688E07145DAAA96462DC83D9F348261F738D51C049770C43BA53B584917C9E30C6221B737CDD");
+            String keys=Utils.encrypt(secret,"04225AACF606D800EA3C2C31FCF8FB161B15F7A8D0460DEB91013D4F228C455E76A2ED8D71BC6525B5DC5CC015C155479D8839950344AEE438A3A6305C90F8269F");
             String enSM2=Utils.hexToBase64(keys);
             // 设置请求头
             HttpHeaders headers = new HttpHeaders();
@@ -101,26 +101,29 @@
 
             headers.set("x-lc-secret", enSM2);
             // 构建请求实体
-            HttpEntity<String> requestEntity = new HttpEntity<>(base64, headers);
-            // 发送请求
-            ResponseEntity<String> response = restTemplate.exchange(
-                    "https://xcx.geoway.com.cn:8033/v1/droneAirport/RegistService",
-                    HttpMethod.POST,
-                    requestEntity,
-                    String.class);
-            HttpHeaders responseHeaders = response.getHeaders();
-            String responseSecret = responseHeaders.getFirst("x-lc-secret");
+//            HttpEntity<String> requestEntity = new HttpEntity<>(base64, headers);
+//            // 发送请求
+//            ResponseEntity<String> response = restTemplate.exchange(
+//                    "https://xcx.geoway.com.cn:8033/v1/droneAirport/RegistService",
+//                    HttpMethod.POST,
+//                    requestEntity,
+//                    String.class);
+//            HttpHeaders responseHeaders = response.getHeaders();
+//            String responseSecret = responseHeaders.getFirst("x-lc-secret");
 
-            String data=deSM2(responseSecret, "00D631FD5615416EAB63D33A9E66E801F95DE840567504210080006081DE877AE3");
+            String data=deSM2(enSM2, "00D631FD5615416EAB63D33A9E66E801F95DE840567504210080006081DE877AE3");
 
             // 使用 Hutool 的 JSONUtil 解析 JSON 字符串
-            JSONObject jsonObject = JSONUtil.parseObj(response.getBody());
+//            JSONObject jsonObject = JSONUtil.parseObj(response.getBody());
 
             // 提取 data 字段的值
-            String dataValue = jsonObject.getStr("data");
+//            String dataValue = jsonObject.getStr("data");
 
-            return SM4Util.decrypt(data,dataValue);
+//            return SM4Util.decrypt(data,dataValue);
+            String text=SM4Util.decrypt(data,base64);
+            return SM4Util.decrypt(data,base64);
         } catch (Exception e) {
+
             // 异常处理
             return(e.getMessage());
         }
@@ -271,7 +274,7 @@
         //获取SM4密钥
         String secret = SM4Util.generateSM4Key();
         //对SM4密钥进行SM2加密
-        String retse = Utils.encrypt(secret, "04225AACF606D800EA3C2C31FCF8FB161B15F7A8D0460DEB91013D4F228C455E76A2ED8D71BC6525B5DC5CC015C155479D8839950344AEE438A3A6305C90F8269F");
+        String retse = Utils.encrypt(secret, "04CF7CAE31B5130D1D5D1AC1DC2778D94533868A8D57FC02BBD97B688E07145DAAA96462DC83D9F348261F738D51C049770C43BA53B584917C9E30C6221B737CDD");
         String taskId = UUID.randomUUID().toString();
         String traceid = UUID.randomUUID().toString();
         //通过SM2私钥解密请求头里的secret获取SM4密钥
@@ -321,8 +324,8 @@
                 String waylineName = TimerUtil.getTimeName();
                 MultipartFile multipartFile = timerUtil.getFile(waylineName, lotInfosForAirport, airport.getLat(), airport.getLon());
                 WaylineFileEntity waylineFile = timerUtil.backWayline(multipartFile, waylineName, airport.getWorkspaceId(), username);
-//                Long time = getNextDayEightAMTimestamp(getDistinctTaskIdCount(airport.getWorkspaceId()));
-                Long time = getAdjustedTimestamp(50);
+                Long time = getNextDayEightAMTimestamp(getDistinctTaskIdCount(airport.getWorkspaceId()));
+//                Long time = getAdjustedTimestamp(50);
                 List<List<Long>> listOfLists = new ArrayList<>();
                 List<Long> sublist = new ArrayList<>();
                 sublist.add(time);
@@ -347,7 +350,7 @@
     public Map<String, String>  updateTask(String base64, String Secret, String username) throws Exception {
         ReturnTaskParam param = new ReturnTaskParam();
         String secret = SM4Util.generateSM4Key();
-        String retse = Utils.encrypt(secret, "04225AACF606D800EA3C2C31FCF8FB161B15F7A8D0460DEB91013D4F228C455E76A2ED8D71BC6525B5DC5CC015C155479D8839950344AEE438A3A6305C90F8269F");
+        String retse = Utils.encrypt(secret, "04CF7CAE31B5130D1D5D1AC1DC2778D94533868A8D57FC02BBD97B688E07145DAAA96462DC83D9F348261F738D51C049770C43BA53B584917C9E30C6221B737CDD");
         String traceid = UUID.randomUUID().toString();
         String sm4Secrect = deSM2(Secret, "00D631FD5615416EAB63D33A9E66E801F95DE840567504210080006081DE877AE3");
         String decryptedJson = SM4Util.decrypt(sm4Secrect, base64);
@@ -420,12 +423,17 @@
     }
 
     @Override
-    public ResponseResult cancelTask(String taskId) {
+    public Map<String, String>  cancelTask(String taskId) throws InvalidCipherTextException, IOException {
+        String secret = SM4Util.generateSM4Key();
+        String retse = Utils.encrypt(secret, "04CF7CAE31B5130D1D5D1AC1DC2778D94533868A8D57FC02BBD97B688E07145DAAA96462DC83D9F348261F738D51C049770C43BA53B584917C9E30C6221B737CDD");
         LambdaUpdateWrapper<WaylineJobEntity> updateWrapper = new LambdaUpdateWrapper<>();
         updateWrapper.like(WaylineJobEntity::getJobId, taskId)
                 .set(WaylineJobEntity::getStatus, 4);
         waylineJobMapper.update(null, updateWrapper);
-        return null;
+        Map<String, String> info = new HashMap<>();
+        info.put("serect", retse);
+        info.put("taskid", SM4Util.encrypt(secret,taskId));
+        return info;
     }
 
     public void processAndInsertTasks(List<AirportTasks> airportTasks) {
@@ -446,7 +454,7 @@
         List<WaylineJobEntity> jobEntity = waylineJobMapper.selectList(new LambdaQueryWrapper<WaylineJobEntity>().like(WaylineJobEntity::getJobId, taskid));
 
         if (jobEntity == null || jobEntity.isEmpty()) {
-            return ResponseResult.error(201, "查询无人机机场任务状态失败!");
+            return ResponseResult.success(201, "查询无人机机场任务状态失败!","",UUID.randomUUID().toString());
         }
 
         // 检查是否所有 status 都等于 4
@@ -458,11 +466,11 @@
                 .allMatch(job -> job.getStatus() == 3);
 
         if (allStatusAreFour) {
-            return ResponseResult.error(204, "查询无人机机场任务状态成功!");
+            return ResponseResult.success(204, "查询无人机机场任务状态成功!","",UUID.randomUUID().toString());
         } else if (allStatusAreThree) {
-            return ResponseResult.error(200, "查询无人机机场任务状态成功!");
+            return ResponseResult.success(200, "查询无人机机场任务状态成功!","",UUID.randomUUID().toString());
         } else {
-            return ResponseResult.error(202, "查询无人机机场任务状态成功!");
+            return ResponseResult.success(202, "查询无人机机场任务状态成功!","",UUID.randomUUID().toString());
         }
     }
 
@@ -478,7 +486,7 @@
         String secret = SM4Util.generateSM4Key();
         String traceId = UUID.randomUUID().toString();
         Map<String,String> info =new HashMap<>();
-        String retse = Utils.encrypt(secret, "04CF7CAE31B5130D1D5D1AC1DC2778D94533868A8D57FC02BBD97B688E07145DAAA96462DC83D9F348261F738D51C049770C43BA53B584917C9E30C6221B737CDD");
+        String retse = Utils.encrypt(secret, "04225AACF606D800EA3C2C31FCF8FB161B15F7A8D0460DEB91013D4F228C455E76A2ED8D71BC6525B5DC5CC015C155479D8839950344AEE438A3A6305C90F8269F");
         if (entity != null) {
             DbUploadDto dto = DbEntityToDto(entity);
             String data=buildRequestBody(dto);

--
Gitblit v1.9.3