diff --git a/src/main/java/com/zhgd/xmgl/modules/safetyhat/mapper/xml/SafetyHatDevMapper.xml b/src/main/java/com/zhgd/xmgl/modules/safetyhat/mapper/xml/SafetyHatDevMapper.xml index 32d56356b..898ddaac3 100644 --- a/src/main/java/com/zhgd/xmgl/modules/safetyhat/mapper/xml/SafetyHatDevMapper.xml +++ b/src/main/java/com/zhgd/xmgl/modules/safetyhat/mapper/xml/SafetyHatDevMapper.xml @@ -15,7 +15,7 @@ select count(*) count, IFNULL(sum(online),0) onlineCount from safety_hat_dev - where 1 = 1 + where type = 1 and dev_sn = #{devSn} diff --git a/src/main/java/com/zhgd/xmgl/task/SafetyHatTask.java b/src/main/java/com/zhgd/xmgl/task/SafetyHatTask.java index d3535adc9..d1e50db8d 100644 --- a/src/main/java/com/zhgd/xmgl/task/SafetyHatTask.java +++ b/src/main/java/com/zhgd/xmgl/task/SafetyHatTask.java @@ -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() - .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() + .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()); + } + } + // /** // * 定时设置昨天的轨迹到数据库 // */