From d774589549bc7bfda51068856227a62f6b7a41b1 Mon Sep 17 00:00:00 2001 From: guoshengxiong <1923636941@qq.com> Date: Wed, 17 Sep 2025 11:38:29 +0800 Subject: [PATCH] =?UTF-8?q?mcu8=E7=9A=84token=E5=A4=B1=E8=B4=A5=E9=87=8D?= =?UTF-8?q?=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/zhgd/xmgl/call/Mcs8Call.java | 14 +-- .../com/zhgd/xmgl/call/util/Mcs8Util.java | 114 +++++++++++++----- 2 files changed, 91 insertions(+), 37 deletions(-) diff --git a/src/main/java/com/zhgd/xmgl/call/Mcs8Call.java b/src/main/java/com/zhgd/xmgl/call/Mcs8Call.java index 2e17ec53c..1b873a4af 100644 --- a/src/main/java/com/zhgd/xmgl/call/Mcs8Call.java +++ b/src/main/java/com/zhgd/xmgl/call/Mcs8Call.java @@ -61,8 +61,8 @@ public class Mcs8Call implements PoliceCameraManufacturer { throw new OpenAlertException("请先绑定设备"); } try { - Mcs8Util.addTask(config, StrUtil.format("{}-{}-{}", ticket.getConstructionAreaNames(), ticket.getWorkTicketNumber(), "第" + no + "次作业"), workNo); - String taskId = Mcs8Util.getTaskIdByWorkNo(config, workNo); + Mcs8Util.addTask(config, StrUtil.format("{}-{}-{}", ticket.getConstructionAreaNames(), ticket.getWorkTicketNumber(), "第" + no + "次作业"), workNo, true); + String taskId = Mcs8Util.getTaskIdByWorkNo(config, workNo, true); Mcs8Util.updateTaskDest(config, ticket.getItemList(), taskId); // Mcs8Util.updateTaskStatus(config, 1, taskId); } catch (OpenAlertException e) { @@ -79,8 +79,8 @@ public class Mcs8Call implements PoliceCameraManufacturer { throw new OpenAlertException("请先绑定设备"); } try { - String taskId = Mcs8Util.getTaskIdByWorkNo(config, workNo); - Mcs8Util.updateTaskStatus(config, 2, taskId); + String taskId = Mcs8Util.getTaskIdByWorkNo(config, workNo, true); + Mcs8Util.updateTaskStatus(config, 2, taskId, true); } catch (OpenAlertException e) { throw e; } catch (Exception e) { @@ -97,7 +97,7 @@ public class Mcs8Call implements PoliceCameraManufacturer { int pageSize = 1000; List bos = new ArrayList<>(); do { - JSONObject jsonObject = Mcs8Util.getRecordFileList(config, page, pageSize, begin, end); + JSONObject jsonObject = Mcs8Util.getRecordFileList(config, page, pageSize, begin, end, true); bos = BeanUtil.copyToList(jsonObject.getJSONArray("data"), Mcs8FileBo.class); for (Mcs8FileBo bo : bos) { downloadFileAndSave(bo, cameraItemMap); @@ -112,7 +112,7 @@ public class Mcs8Call implements PoliceCameraManufacturer { if (count > 0) { return; } - Mcs8FileSignedUrlBo signedUrl = Mcs8Util.getSignedUrl(config, bo.getId()); + Mcs8FileSignedUrlBo signedUrl = Mcs8Util.getSignedUrl(config, bo.getId(), true); PoliceCameraItem item = cameraItemMap.get(bo.getDevId()); WorkTicketHistory history = workTicketHistoryService.getById(bo.getWorkNo()); if (item != null) { @@ -155,7 +155,7 @@ public class Mcs8Call implements PoliceCameraManufacturer { JSONArray devList = new JSONArray(); JSONArray tempList = new JSONArray(); do { - tempList = Mcs8Util.getDevList(config, page, pageSize); + tempList = Mcs8Util.getDevList(config, page, pageSize, true); devList.addAll(tempList); page++; } while (CollUtil.isNotEmpty(tempList) && tempList.size() == pageSize); diff --git a/src/main/java/com/zhgd/xmgl/call/util/Mcs8Util.java b/src/main/java/com/zhgd/xmgl/call/util/Mcs8Util.java index 673bd875a..7dc816241 100644 --- a/src/main/java/com/zhgd/xmgl/call/util/Mcs8Util.java +++ b/src/main/java/com/zhgd/xmgl/call/util/Mcs8Util.java @@ -15,6 +15,7 @@ import com.zhgd.xmgl.modules.policecamera.entity.PoliceCameraItem; import com.zhgd.xmgl.modules.policecamera.entity.ProjectPoliceCameraConfig; import com.zhgd.xmgl.modules.policecamera.entity.bo.Mcs8FileSignedUrlBo; import lombok.extern.slf4j.Slf4j; +import org.jetbrains.annotations.NotNull; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -37,7 +38,7 @@ public class Mcs8Util { * @return */ public static String getToken(String ip, String port, String account, String password) { - String token = redisRepository.getOrSet("mcs8_token_" + account, () -> { + String token = redisRepository.getOrSet(getTokenRedisKey(ip, account), () -> { String url = ip + ":" + port + "/api/v1/auth/Token"; JSONObject bodyJo = new JSONObject(); bodyJo.put("username", account); @@ -58,6 +59,11 @@ public class Mcs8Util { return token; } + @NotNull + private static String getTokenRedisKey(String ip, String account) { + return "mcs8_token_" + ip + "_" + account; + } + /** * 更新工单执行设置(派发) * @@ -67,21 +73,27 @@ public class Mcs8Util { */ public static void updateTaskDest(ProjectPoliceCameraConfig config, List itemList, String taskId) { for (PoliceCameraItem item : itemList) { - String url = getHost(config) + ":" + config.getPort() + "/api/v1/TaskUpdateDest"; - JSONObject jo = new JSONObject(); - jo.put("id", taskId); - jo.put("destDevId", item.getDevSn()); - url = HttpUtil.urlWithForm(url, jo, CharsetUtil.CHARSET_UTF_8, false); - log.info("mcs8 更新工单执行设置(派发) url:{}", url); - String result = HttpRequest.get(url).header("token", getToken(getHost(config), config.getPort(), config.getAccount(), config.getPassword())).execute().body(); + updateTaskDest(config, taskId, item, true); + } + } - log.info("mcs8 更新工单执行设置(派发) result:{}", result); - JSONObject jsonObject = JSONObject.parseObject(result); - if (Objects.equals(jsonObject.getInteger("result"), 200) || Objects.equals(jsonObject.getInteger("error"), 200)) { + private static void updateTaskDest(ProjectPoliceCameraConfig config, String taskId, PoliceCameraItem item, boolean retry) { + String url = getHost(config) + ":" + config.getPort() + "/api/v1/TaskUpdateDest"; + JSONObject jo = new JSONObject(); + jo.put("id", taskId); + jo.put("destDevId", item.getDevSn()); + url = HttpUtil.urlWithForm(url, jo, CharsetUtil.CHARSET_UTF_8, false); + log.info("mcs8 更新工单执行设置(派发) url:{}", url); + String result = HttpRequest.get(url).header("token", getToken(getHost(config), config.getPort(), config.getAccount(), config.getPassword())).execute().body(); - } else { - throw new OpenAlertException("调用外部接口失败"); - } + log.info("mcs8 更新工单执行设置(派发) result:{}", result); + JSONObject jsonObject = JSONObject.parseObject(result); + if (isTokenExpiredError(jsonObject) && retry) { + //删除token + redisRepository.del(getTokenRedisKey(getHost(config), config.getAccount())); + updateTaskDest(config, taskId, item, false); + } else if (!Objects.equals(jsonObject.getInteger("result"), 200) && !Objects.equals(jsonObject.getInteger("error"), 200)) { + throw new OpenAlertException("调用外部接口失败"); } } @@ -100,8 +112,9 @@ public class Mcs8Util { * * @param config * @param workNo + * @param retry */ - public static String getTaskIdByWorkNo(ProjectPoliceCameraConfig config, String workNo) { + public static String getTaskIdByWorkNo(ProjectPoliceCameraConfig config, String workNo, boolean retry) { String url = getHost(config) + ":" + config.getPort() + "/api/v1/TaskList"; JSONObject jo = new JSONObject(); jo.put("st", "2022-01-01"); @@ -113,7 +126,11 @@ public class Mcs8Util { log.info("mcs8 获取工单列表 result:{}", result); JSONObject jsonObject = JSONObject.parseObject(result); - if (Objects.equals(jsonObject.getInteger("result"), 200) || Objects.equals(jsonObject.getInteger("error"), 200)) { + if (isTokenExpiredError(jsonObject) && retry) { + //删除token + redisRepository.del(getTokenRedisKey(getHost(config), config.getAccount())); + return getTaskIdByWorkNo(config, workNo, false); + } else if (Objects.equals(jsonObject.getInteger("result"), 200) || Objects.equals(jsonObject.getInteger("error"), 200)) { JSONArray jsonArray = jsonObject.getJSONArray("data"); if (CollUtil.isEmpty(jsonArray)) { return null; @@ -130,8 +147,9 @@ public class Mcs8Util { * @param config * @param title * @param workNo + * @param retry true失败会重试 */ - public static void addTask(ProjectPoliceCameraConfig config, String title, String workNo) { + public static void addTask(ProjectPoliceCameraConfig config, String title, String workNo, boolean retry) { String url = getHost(config) + ":" + config.getPort() + "/api/v1/TaskAdd"; JSONObject bodyJo = new JSONObject(); bodyJo.put("workNo", workNo); @@ -144,9 +162,11 @@ public class Mcs8Util { String result = HttpRequest.post(url).header("token", getToken(getHost(config), config.getPort(), config.getAccount(), config.getPassword())).body(body).execute().body(); log.info("mcs8 添加工单 result:{}", result); JSONObject jsonObject = JSONObject.parseObject(result); - if (Objects.equals(jsonObject.getInteger("result"), 200) || Objects.equals(jsonObject.getInteger("error"), 200)) { - - } else { + if (isTokenExpiredError(jsonObject) && retry) { + //删除token + redisRepository.del(getTokenRedisKey(getHost(config), config.getAccount())); + addTask(config, title, workNo, false); + } else if (isRespError(jsonObject)) { throw new OpenAlertException("调用外部接口失败"); } } @@ -158,7 +178,7 @@ public class Mcs8Util { * @param status 0:待处理,1:正在执行,2:已完成 * @param taskId */ - public static void updateTaskStatus(ProjectPoliceCameraConfig config, int status, String taskId) { + public static void updateTaskStatus(ProjectPoliceCameraConfig config, int status, String taskId, boolean retry) { String url = getHost(config) + ":" + config.getPort() + "/api/v1/TaskUpdateStatus"; JSONObject jo = new JSONObject(); if (StrUtil.isBlank(taskId) && status == 2) { @@ -172,13 +192,35 @@ public class Mcs8Util { log.info("mcs8 更新工单执行状态 result:{}", result); JSONObject jsonObject = JSONObject.parseObject(result); - if (Objects.equals(jsonObject.getInteger("result"), 200) || Objects.equals(jsonObject.getInteger("error"), 200)) { - - } else { + if (isTokenExpiredError(jsonObject) && retry) { + //删除token + redisRepository.del(getTokenRedisKey(getHost(config), config.getAccount())); + updateTaskStatus(config, status, taskId, false); + } else if (isRespError(jsonObject)) { throw new OpenAlertException("调用外部接口失败"); } } + /** + * 响应返回token失效 + * + * @param jsonObject + * @return + */ + private static boolean isTokenExpiredError(JSONObject jsonObject) { + return Objects.equals(jsonObject.getInteger("result"), 333) || Objects.equals(jsonObject.getInteger("error"), 333); + } + + /** + * 响应返回错误 + * + * @param jsonObject + * @return + */ + private static boolean isRespError(JSONObject jsonObject) { + return !Objects.equals(jsonObject.getInteger("result"), 200) && !Objects.equals(jsonObject.getInteger("error"), 200); + } + /** * 查询文件列表 * @@ -189,7 +231,7 @@ public class Mcs8Util { * @param end * @return */ - public static JSONObject getRecordFileList(ProjectPoliceCameraConfig config, Integer page, Integer pageSize, Date begin, Date end) { + public static JSONObject getRecordFileList(ProjectPoliceCameraConfig config, Integer page, Integer pageSize, Date begin, Date end, boolean retry) { String url = getHost(config) + ":" + config.getPort() + "/api/v1/RecordFileList"; JSONObject jo = new JSONObject(); jo.put("st", DateUtil.formatDateTime(begin)); @@ -205,7 +247,11 @@ public class Mcs8Util { log.info("mcs8 查询文件列表 result:{}", result); JSONObject jsonObject = JSONObject.parseObject(result); - if (Objects.equals(jsonObject.getInteger("result"), 200) || Objects.equals(jsonObject.getInteger("error"), 200)) { + if (isTokenExpiredError(jsonObject) && retry) { + //删除token + redisRepository.del(getTokenRedisKey(getHost(config), config.getAccount())); + return getRecordFileList(config, page, pageSize, begin, end, false); + } else if (Objects.equals(jsonObject.getInteger("result"), 200) || Objects.equals(jsonObject.getInteger("error"), 200)) { return JSONObject.parseObject(result); } else { throw new OpenAlertException("调用外部接口失败"); @@ -219,7 +265,7 @@ public class Mcs8Util { * @param id 文件id * @return */ - public static Mcs8FileSignedUrlBo getSignedUrl(ProjectPoliceCameraConfig config, String id) { + public static Mcs8FileSignedUrlBo getSignedUrl(ProjectPoliceCameraConfig config, String id, boolean retry) { String url = getHost(config) + ":" + config.getPort() + "/api/v1/oss/SignedUrl"; JSONObject jo = new JSONObject(); jo.put("id", id); @@ -230,7 +276,11 @@ public class Mcs8Util { log.info("mcs8 获取文件网络访问地址 result:{}", result); JSONObject jsonObject = JSONObject.parseObject(result); - if (Objects.equals(jsonObject.getInteger("result"), 200) || Objects.equals(jsonObject.getInteger("error"), 200)) { + if (isTokenExpiredError(jsonObject) && retry) { + //删除token + redisRepository.del(getTokenRedisKey(getHost(config), config.getAccount())); + return getSignedUrl(config, id, false); + } else if (Objects.equals(jsonObject.getInteger("result"), 200) || Objects.equals(jsonObject.getInteger("error"), 200)) { return JSONObject.parseObject(jsonObject.getJSONObject("content").toJSONString(), Mcs8FileSignedUrlBo.class); } else { throw new OpenAlertException("调用外部接口失败"); @@ -245,7 +295,7 @@ public class Mcs8Util { * @param pageSize * @return */ - public static JSONArray getDevList(ProjectPoliceCameraConfig config, int page, int pageSize) { + public static JSONArray getDevList(ProjectPoliceCameraConfig config, int page, int pageSize, boolean retry) { String url = getHost(config) + ":" + config.getPort() + "/api/v1/DevList"; JSONObject jo = new JSONObject(); jo.put("page", page); @@ -256,7 +306,11 @@ public class Mcs8Util { log.info("mcs8 获取设备列表 result:{}", result); JSONObject jsonObject = JSONObject.parseObject(result); - if (Objects.equals(jsonObject.getInteger("result"), 200) || Objects.equals(jsonObject.getInteger("error"), 200)) { + if (isTokenExpiredError(jsonObject) && retry) { + //删除token + redisRepository.del(getTokenRedisKey(getHost(config), config.getAccount())); + return getDevList(config, page, pageSize, false); + } else if (Objects.equals(jsonObject.getInteger("result"), 200) || Objects.equals(jsonObject.getInteger("error"), 200)) { return jsonObject.getJSONArray("content"); } else { throw new OpenAlertException("调用外部接口失败");