BUG修复

This commit is contained in:
pengjie 2025-02-28 14:50:27 +08:00
parent b95256f82c
commit 1598527dd6
2 changed files with 63 additions and 55 deletions

View File

@ -15,7 +15,7 @@
select count(*) count,
IFNULL(sum(online),0) onlineCount
from safety_hat_dev
where 1 = 1
where type = 1
<if test="devSn != null and devSn != ''">
and dev_sn = #{devSn}
</if>

View File

@ -110,7 +110,7 @@ public class SafetyHatTask {
}
// 设置每秒最大请求数
private static final double MAX_REQUESTS_PER_SECOND = 10.0;
private static final double MAX_REQUESTS_PER_SECOND = 20.0;
// 创建一个RateLimiter实例
private static final RateLimiter rateLimiter = RateLimiter.create(MAX_REQUESTS_PER_SECOND);
@ -131,64 +131,72 @@ public class SafetyHatTask {
for (SafetyHatDev dev : devList) {
// 等待从RateLimiter获取权限
rateLimiter.acquire();
if (StrUtil.isBlank(dev.getExtUserId())) {
log.info("定时2分钟获取安全帽数据任务安全帽外部user_id没有设置,devSn:{}", dev.getDevSn());
continue;
}
SafetyHatData lastData = safetyHatDataMapper.selectOne(new LambdaQueryWrapper<SafetyHatData>()
.eq(SafetyHatData::getDevSn, dev.getDevSn()).orderByDesc(SafetyHatData::getUploadTime).last("limit 1"));
String start;
if (lastData != null) {
start = lastData.getUploadTime().getTime() / 1000L + "";
} else {
start = DateUtil.offsetHour(new Date(), -12).getTime() / 1000L + "";
}
//轨迹回放
String url = "https://caps.runde.pro/api/index.php?ctl=location&act=get_user_path_web";
JSONObject pJo = new JSONObject();
pJo.put("admin_id", project.getHelmetUser());
pJo.put("user_id", dev.getExtUserId());
String end = System.currentTimeMillis() / 1000L + "";
pJo.put("start", start);
pJo.put("end", end);
String json = pJo.toJSONString();
log.info("定时2分钟获取安全帽数据任务开始devSn{},url:{},json:{}", dev.getDevSn(), url, json);
String rs = HttpRequest.post(url)
.body(json)
.timeout(20000)//超时毫秒
.execute().body();
log.info("定时2分钟获取安全帽数据任务开始rs,devSn{},rs:{}", dev.getDevSn(), rs);
JSONObject rsJo = JSON.parseObject(rs);
if (rsJo.getBoolean("status")) {
JSONArray dataJa = rsJo.getJSONArray("data");
if (CollUtil.isEmpty(dataJa)) {
continue;
}
for (int i = 0; i < dataJa.size(); i++) {
JSONObject dataJo = dataJa.getJSONObject(i);
Double xPoint = dataJo.getDouble("x_point");
Double yPoint = dataJo.getDouble("y_point");
Long time = dataJo.getLong("time");
SafetyHatData data = new SafetyHatData();
data.setWorkerInfoId(dev.getWorkerInfoId());
data.setDevSn(dev.getDevSn());
data.setLatitude(xPoint);
data.setLongitude(yPoint);
data.setUploadTime(new Date(time * 1000L));
data.setProjectSn(dev.getProjectSn());
data.setIsPlatformData(1);
data.setType(dev.getType());
safetyHatDataService.add(data);
}
} else {
log.error("定时2分钟获取安全帽数据任务失败devSn{}", dev.getDevSn());
}
CompletableFuture.runAsync(() -> {
doGet(dev, project);
}).exceptionally(throwable -> {
log.error("err", throwable);
return null;
});
}
}
}
}
private void doGet(SafetyHatDev dev, Project project) {
if (StrUtil.isBlank(dev.getExtUserId())) {
log.info("定时2分钟获取安全帽数据任务安全帽外部user_id没有设置,devSn:{}", dev.getDevSn());
return;
}
SafetyHatData lastData = safetyHatDataMapper.selectOne(new LambdaQueryWrapper<SafetyHatData>()
.eq(SafetyHatData::getDevSn, dev.getDevSn()).orderByDesc(SafetyHatData::getUploadTime).last("limit 1"));
String start;
if (lastData != null) {
start = lastData.getUploadTime().getTime() / 1000L + "";
} else {
start = DateUtil.offsetHour(new Date(), -12).getTime() / 1000L + "";
}
//轨迹回放
String url = "https://caps.runde.pro/api/index.php?ctl=location&act=get_user_path_web";
JSONObject pJo = new JSONObject();
pJo.put("admin_id", project.getHelmetUser());
pJo.put("user_id", dev.getExtUserId());
String end = System.currentTimeMillis() / 1000L + "";
pJo.put("start", start);
pJo.put("end", end);
String json = pJo.toJSONString();
log.info("定时2分钟获取安全帽数据任务开始devSn{},url:{},json:{}", dev.getDevSn(), url, json);
String rs = HttpRequest.post(url)
.body(json)
.timeout(20000)//超时毫秒
.execute().body();
log.info("定时2分钟获取安全帽数据任务开始rs,devSn{},rs:{}", dev.getDevSn(), rs);
JSONObject rsJo = JSON.parseObject(rs);
if (rsJo.getBoolean("status")) {
JSONArray dataJa = rsJo.getJSONArray("data");
if (CollUtil.isEmpty(dataJa)) {
return;
}
for (int i = 0; i < dataJa.size(); i++) {
JSONObject dataJo = dataJa.getJSONObject(i);
Double xPoint = dataJo.getDouble("x_point");
Double yPoint = dataJo.getDouble("y_point");
Long time = dataJo.getLong("time");
SafetyHatData data = new SafetyHatData();
data.setWorkerInfoId(dev.getWorkerInfoId());
data.setDevSn(dev.getDevSn());
data.setLatitude(xPoint);
data.setLongitude(yPoint);
data.setUploadTime(new Date(time * 1000L));
data.setProjectSn(dev.getProjectSn());
data.setIsPlatformData(1);
data.setType(dev.getType());
safetyHatDataService.add(data);
}
} else {
log.error("定时2分钟获取安全帽数据任务失败devSn{}", dev.getDevSn());
}
}
// /**
// * 定时设置昨天的轨迹到数据库
// */