From 2902ea6a45966c9ca238ad07bc4e6cb8c116c8d7 Mon Sep 17 00:00:00 2001 From: guoshengxiong <1923636941@qq.com> Date: Fri, 5 Dec 2025 15:44:49 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B6=A6=E5=BE=B7=E5=AE=89=E5=85=A8=E5=B8=BDbu?= =?UTF-8?q?g=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/ISafetyHatDataService.java | 11 +- .../impl/SafetyHatDataServiceImpl.java | 31 +++- .../com/zhgd/xmgl/task/SafetyHatTask.java | 137 ++++++++++-------- 3 files changed, 111 insertions(+), 68 deletions(-) diff --git a/src/main/java/com/zhgd/xmgl/modules/safetyhat/service/ISafetyHatDataService.java b/src/main/java/com/zhgd/xmgl/modules/safetyhat/service/ISafetyHatDataService.java index 083ee0b60..ad0f47a81 100644 --- a/src/main/java/com/zhgd/xmgl/modules/safetyhat/service/ISafetyHatDataService.java +++ b/src/main/java/com/zhgd/xmgl/modules/safetyhat/service/ISafetyHatDataService.java @@ -5,10 +5,10 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.zhgd.xmgl.modules.safetyhat.entity.SafetyHatData; import com.zhgd.xmgl.modules.safetyhat.entity.SafetyHatDev; -import com.zhgd.xmgl.modules.safetyhat.entity.SafetyHatFence; import com.zhgd.xmgl.modules.safetyhat.entity.vo.WorkerNumByRegionVo; import com.zhgd.xmgl.modules.worker.entity.WorkerInfo; +import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -105,4 +105,13 @@ public interface ISafetyHatDataService extends IService { Page getWorkerListByRegion(Map param); Page getWorkerListByRegion1(Map param); + + /** + * 保存替换某设备某天安全帽数据 + * + * @param date + * @param dev + * @param datas + */ + void saveReplaceSafetyHatDataByDate(Date date, SafetyHatDev dev, List datas); } diff --git a/src/main/java/com/zhgd/xmgl/modules/safetyhat/service/impl/SafetyHatDataServiceImpl.java b/src/main/java/com/zhgd/xmgl/modules/safetyhat/service/impl/SafetyHatDataServiceImpl.java index 591532d82..b9d4d2bce 100644 --- a/src/main/java/com/zhgd/xmgl/modules/safetyhat/service/impl/SafetyHatDataServiceImpl.java +++ b/src/main/java/com/zhgd/xmgl/modules/safetyhat/service/impl/SafetyHatDataServiceImpl.java @@ -9,6 +9,7 @@ import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -31,6 +32,7 @@ import com.zhgd.xmgl.modules.safetyhat.mapper.SafetyHatDevMapper; import com.zhgd.xmgl.modules.safetyhat.mapper.SafetyHatFenceMapper; import com.zhgd.xmgl.modules.safetyhat.service.ISafetyHatAlarmService; import com.zhgd.xmgl.modules.safetyhat.service.ISafetyHatDataService; +import com.zhgd.xmgl.modules.safetyhat.service.ISafetyHatDevService; import com.zhgd.xmgl.modules.worker.entity.WorkerInfo; import com.zhgd.xmgl.modules.worker.mapper.WorkerInfoMapper; import com.zhgd.xmgl.util.*; @@ -38,6 +40,7 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections.MapUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -58,6 +61,9 @@ public class SafetyHatDataServiceImpl extends ServiceImpl() @@ -312,7 +317,7 @@ public class SafetyHatDataServiceImpl extends ServiceImpl devList = safetyHatDevMapper.selectList(new LambdaQueryWrapper() - .eq(SafetyHatDev::getProjectSn, projectSn)); + .eq(SafetyHatDev::getProjectSn, projectSn)); List regions = safetyHatFenceService.queryList(new MapBuilder() .put("projectSn", projectSn) .build()); @@ -398,7 +403,7 @@ public class SafetyHatDataServiceImpl extends ServiceImpl a.getInserviceType().compareTo(b.getInserviceType())); + collect.sort((a, b) -> a.getInserviceType().compareTo(b.getInserviceType())); Page page = PageUtil.getPage(param); int fromIndex = (int) (page.getSize() * (page.getCurrent() - 1)); int toIndex = (int) (fromIndex + page.getSize()); @@ -437,6 +442,24 @@ public class SafetyHatDataServiceImpl extends ServiceImpl datas) { + this.remove(new LambdaQueryWrapper() + .eq(SafetyHatData::getDevSn, dev.getDevSn()) + .eq(SafetyHatData::getIsPlatformData, 1) + .ge(SafetyHatData::getUploadTime, DateUtil.formatDateTime(DateUtil.beginOfDay(date))) + .le(SafetyHatData::getUploadTime, DateUtil.formatDateTime(date)) + ); + safetyHatDevService.update(null, new LambdaUpdateWrapper() + .set(SafetyHatDev::getRdDataTime, DateUtil.now()) + .eq(SafetyHatDev::getId, dev.getId()) + ); + if (CollUtil.isNotEmpty(datas)) { + this.saveBatch(datas); + } + } + private Set getWorkerNumInFence(SafetyHatFence fence, List datas) { Set inWorkerSet = new HashSet<>(); for (SafetyHatData d : datas) { diff --git a/src/main/java/com/zhgd/xmgl/task/SafetyHatTask.java b/src/main/java/com/zhgd/xmgl/task/SafetyHatTask.java index b12f3cf52..aa4e9c8e5 100644 --- a/src/main/java/com/zhgd/xmgl/task/SafetyHatTask.java +++ b/src/main/java/com/zhgd/xmgl/task/SafetyHatTask.java @@ -1,5 +1,7 @@ package com.zhgd.xmgl.task; +import com.google.common.collect.Lists; + import cn.hutool.core.collection.CollUtil; import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateUnit; @@ -11,7 +13,6 @@ import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.zhgd.annotation.OperLog; import com.zhgd.jeecg.common.api.vo.Result; @@ -133,7 +134,8 @@ public class SafetyHatTask { @RequestMapping("getHelmetData") public void getHelmetData() { List projectList = projectService.list(Wrappers.lambdaQuery().ne(Project::getHelmetUser, "").ne(Project::getHelmetPassword, "")); - String before7Date = DateUtil.formatDateTime(DateUtil.offsetDay(new Date(), -7)); + Date now = new Date(); + String before7Date = DateUtil.formatDateTime(DateUtil.offsetDay(now, -7)); if (CollUtil.isNotEmpty(projectList)) { log.info("定时5分钟获取安全帽数据任务开始"); for (Project project : projectList) { @@ -145,70 +147,80 @@ public class SafetyHatTask { .last("limit 120") ); for (SafetyHatDev dev : devList) { - 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(); - try { - Thread.sleep(2000); - } catch (InterruptedException e) { - e.printStackTrace(); - } - 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); - safetyHatDevService.update(null, new LambdaUpdateWrapper() - .set(SafetyHatDev::getRdDataTime, DateUtil.now()) - .eq(SafetyHatDev::getId, dev.getId()) - ); - 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()); - data.setWorkerInfoName(dev.getWorkerInfoName()); - safetyHatDataService.add(data); - } - } else { - log.error("定时2分钟获取安全帽数据任务失败:devSn:{}", dev.getDevSn()); - } + JSONObject rsJo = getHttpSafeHatDatasByDate(now, dev.getDevSn(), project.getHelmetUser(), dev.getExtUserId()); + List datas = getSafeHatDatas(rsJo, dev); + safetyHatDataService.saveReplaceSafetyHatDataByDate(now, dev, datas); } - } } } + private List getSafeHatDatas(JSONObject rsJo, SafetyHatDev dev) { + List safetyHatDataList = Lists.newArrayList(); + if (rsJo.getBoolean("status")) { + JSONArray dataJa = rsJo.getJSONArray("data"); + if (CollUtil.isEmpty(dataJa)) { + return safetyHatDataList; + } + 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()); + data.setWorkerInfoName(dev.getWorkerInfoName()); + safetyHatDataList.add(data); + } + } else { + log.error("定时5分钟获取安全帽数据任务失败:devSn:{}", dev.getDevSn()); + } + return safetyHatDataList; + } + + /** + * 获取某天某设备的安全帽数据 + * + * @param date + * @param devSn + * @param helmetUser + * @param extUserId + * @return + */ + private JSONObject getHttpSafeHatDatasByDate(Date date, String devSn, String helmetUser, String extUserId) { + DateTime yB = DateUtil.beginOfDay(date); + String start = yB.getTime() / 1000L + ""; + String end = System.currentTimeMillis() / 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", helmetUser); + pJo.put("user_id", extUserId); + pJo.put("start", start); + pJo.put("end", end); + String json = pJo.toJSONString(); + try { + Thread.sleep(2000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + log.info("定时5分钟获取安全帽数据任务开始,devSn:{},url:{},json:{}", devSn, url, json); + String rs = HttpRequest.post(url) + .body(json) + .timeout(20000)//超时,毫秒 + .execute().body(); + log.info("定时5分钟获取安全帽数据任务结束rs,devSn:{},rs:{}", devSn, rs); + JSONObject rsJo = JSON.parseObject(rs); + return rsJo; + } + /** * 定时设置昨天的轨迹到数据库 */ @@ -226,7 +238,6 @@ public class SafetyHatTask { .isNotNull(SafetyHatDev::getExtUserId) .ge(SafetyHatDev::getHeartbeatTime, before7Date) .orderByAsc(SafetyHatDev::getRdDataTime) - .last("limit 120") ); for (SafetyHatDev dev : devList) { DateTime yB = DateUtil.beginOfDay(DateUtil.offsetDay(new Date(), -1)); @@ -234,7 +245,7 @@ public class SafetyHatTask { String start = yB.getTime() / 1000L + ""; String end = yE.getTime() / 1000L + ""; try { - Thread.sleep(3000); + Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); }