mcu8的token失败重试

This commit is contained in:
guoshengxiong 2025-09-17 11:38:29 +08:00
parent 46317684a3
commit 1c5e568e5b
2 changed files with 91 additions and 37 deletions

View File

@ -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<Mcs8FileBo> 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);

View File

@ -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<PoliceCameraItem> 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("调用外部接口失败");