diff --git a/src/main/java/com/zhgd/xmgl/modules/safetyhat/controller/SafetyHatDataController.java b/src/main/java/com/zhgd/xmgl/modules/safetyhat/controller/SafetyHatDataController.java index c6e503994..707b7a70a 100644 --- a/src/main/java/com/zhgd/xmgl/modules/safetyhat/controller/SafetyHatDataController.java +++ b/src/main/java/com/zhgd/xmgl/modules/safetyhat/controller/SafetyHatDataController.java @@ -149,4 +149,11 @@ public class SafetyHatDataController { return Result.success(safetyHatDataService.getNewestList(paramMap)); } + + @ApiOperation(value = "列表查询智能安全帽-实时数据信息(查询今日会调接口查询)", notes = "列表查询智能安全帽-实时数据信息(查询今日会调接口查询)", httpMethod = "GET") + @GetMapping(value = "/newestList") + public Result> newestList(@ApiIgnore @RequestParam HashMap paramMap) { + return Result.success(safetyHatDataService.newestList(paramMap)); + } + } 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 997b977da..93187fe87 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 @@ -31,4 +31,5 @@ public interface ISafetyHatDataService extends IService { void updateStatus(SafetyHatDev safetyHatDev); + List newestList(HashMap paramMap); } 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 dd47b876f..8551474f6 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 @@ -1,7 +1,12 @@ package com.zhgd.xmgl.modules.safetyhat.service.impl; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.StrUtil; +import cn.hutool.http.HttpRequest; +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.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; @@ -9,6 +14,8 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.zhgd.jeecg.common.execption.OpenAlertException; import com.zhgd.jeecg.common.system.query.QueryGenerator; +import com.zhgd.xmgl.modules.project.entity.Project; +import com.zhgd.xmgl.modules.project.mapper.ProjectMapper; import com.zhgd.xmgl.modules.safetyhat.entity.SafetyHatAlarm; import com.zhgd.xmgl.modules.safetyhat.entity.SafetyHatData; import com.zhgd.xmgl.modules.safetyhat.entity.SafetyHatDev; @@ -19,7 +26,6 @@ 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.worker.entity.WorkerInfo; import com.zhgd.xmgl.util.PageUtil; import com.zhgd.xmgl.util.RefUtil; import com.zhgd.xmgl.util.RegionUtil; @@ -30,10 +36,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.util.Date; -import java.util.HashMap; -import java.util.List; -import java.util.Objects; +import java.util.*; /** * @Description: 智能安全帽-实时数据 @@ -55,6 +58,8 @@ public class SafetyHatDataServiceImpl extends ServiceImpl queryPageList(HashMap paramMap) { @@ -178,5 +183,72 @@ public class SafetyHatDataServiceImpl extends ServiceImpl newestList(HashMap paramMap) { + String uploadTime_begin = MapUtils.getString(paramMap, "uploadTime_begin"); + String uploadTime_end = MapUtils.getString(paramMap, "uploadTime_end"); + String devSn = MapUtils.getString(paramMap, "devSn"); + String today = DateUtil.today(); + if (Objects.equals(uploadTime_begin, today) && Objects.equals(uploadTime_end, today) && StringUtils.isNotBlank(devSn)) { + SafetyHatDev dev = safetyHatDevMapper.selectOne(new LambdaQueryWrapper() + .eq(SafetyHatDev::getDevSn, devSn)); + if (dev == null) { + log.error("devSn不存在:devSn:{}", devSn); + return null; + } + Project project = projectMapper.selectOne(new LambdaQueryWrapper() + .eq(Project::getProjectSn, dev.getProjectSn())); + if (project == null) { + log.error("projectSn不存在:devSn:{},projectSn:{}", devSn, project.getProjectSn()); + return null; + } + //远程查询最新轨迹 + 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 start = DateUtil.beginOfDay(new Date()).getTime() / 1000L + ""; + String end = new Date().getTime() / 1000L + ""; + pJo.put("start", start); + pJo.put("end", end); + String json = pJo.toJSONString(); + log.info("远程查询最新轨迹,devSn:{},url:{},json:{}", dev.getDevSn(), url, json); + String rs = HttpRequest.post(url) + .body(json) + .timeout(20000)//超时,毫秒 + .execute().body(); + log.info("远程查询最新轨迹rs,devSn:{},rs:{}", dev.getDevSn(), rs); + JSONObject rsJo = JSON.parseObject(rs); + if (rsJo.getBoolean("status")) { + JSONArray dataJa = rsJo.getJSONArray("data"); + ArrayList hatDataArrayList = new ArrayList<>(); + if (CollUtil.isEmpty(dataJa)) { + return null; + } + 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()); + hatDataArrayList.add(data); + } + return CollUtil.reverse(hatDataArrayList); + } else { + log.error("远程查询最新轨迹rs失败:devSn:{}", dev.getDevSn()); + } + return null; + } else { + QueryWrapper queryWrapper = getQueryWrapper(paramMap); + return dealList(baseMapper.queryList(queryWrapper)); + } + } + } diff --git a/src/main/java/com/zhgd/xmgl/task/SafetyHatTask.java b/src/main/java/com/zhgd/xmgl/task/SafetyHatTask.java index 051c2dee3..4f0555c6f 100644 --- a/src/main/java/com/zhgd/xmgl/task/SafetyHatTask.java +++ b/src/main/java/com/zhgd/xmgl/task/SafetyHatTask.java @@ -1,6 +1,7 @@ package com.zhgd.xmgl.task; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateUtil; import cn.hutool.core.text.CharSequenceUtil; import cn.hutool.core.util.StrUtil; @@ -22,6 +23,7 @@ import lombok.extern.slf4j.Slf4j; import net.javacrumbs.shedlock.core.SchedulerLock; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -40,6 +42,7 @@ import java.util.concurrent.CompletableFuture; @Slf4j @RestController @RequestMapping("xmgl/task") +@Transactional(rollbackFor = Exception.class) public class SafetyHatTask { @Autowired IProjectService projectService; @@ -161,6 +164,77 @@ public class SafetyHatTask { } } + /** + * 定时设置昨天的轨迹到数据库 + */ + @Scheduled(cron = "0 0 3 * * ?") + @SchedulerLock(name = "setYesterdayHelmetData", lockAtMostFor = 1000 * 60 * 2, lockAtLeastFor = 1000 * 10) + @RequestMapping("setYesterdayHelmetData") + public void setYesterdayHelmetData() { + log.info("定时设置昨天的轨迹到数据库任务开始"); + List projectList = projectService.list(Wrappers.lambdaQuery().ne(Project::getHelmetUser, "").ne(Project::getHelmetPassword, "")); + if (CollUtil.isNotEmpty(projectList)) { + for (Project project : projectList) { + List devList = safetyHatDevMapper.selectList(new LambdaQueryWrapper() + .eq(SafetyHatDev::getProjectSn, project.getProjectSn())); + for (SafetyHatDev dev : devList) { + if (StrUtil.isBlank(dev.getExtUserId())) { + log.info("定时设置昨天的轨迹到数据库任务,安全帽外部user_id没有设置,devSn:{}", dev.getDevSn()); + continue; + } + DateTime yB = DateUtil.beginOfDay(DateUtil.offsetDay(new Date(), -1)); + DateTime yE = DateUtil.endOfDay(DateUtil.offsetDay(new Date(), -1)); + String start = yB.getTime() / 1000L + ""; + String end = yE.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()); + pJo.put("start", start); + pJo.put("end", end); + String json = pJo.toJSONString(); + log.info("定时设置昨天的轨迹到数据库任务开始,devSn:{},url:{},json:{}", dev.getDevSn(), url, json); + String rs = HttpRequest.post(url) + .body(json) + .timeout(20000)//超时,毫秒 + .execute().body(); + log.info("定时设置昨天的轨迹到数据库任务开始rs,devSn:{},rs:{}", dev.getDevSn(), rs); + JSONObject rsJo = JSON.parseObject(rs); + if (rsJo.getBoolean("status")) { + JSONArray dataJa = rsJo.getJSONArray("data"); + //删除昨日的数据 + safetyHatDataMapper.delete(new LambdaQueryWrapper() + .eq(SafetyHatData::getDevSn, dev.getDevSn()) + .ge(SafetyHatData::getUploadTime, yB) + .le(SafetyHatData::getUploadTime, yE) + ); + 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()); + safetyHatDataMapper.insert(data); + } + } else { + log.error("定时设置昨天的轨迹到数据库任务失败:devSn:{}", dev.getDevSn()); + } + } + + } + } + } + + /** * 测试发生安全帽数据 */