diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/controller/ProjectBigScreenController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/controller/ProjectBigScreenController.java index 6bf1773d..ba59a87a 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/controller/ProjectBigScreenController.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/controller/ProjectBigScreenController.java @@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers; import jakarta.annotation.Resource; import jakarta.validation.constraints.NotNull; import lombok.RequiredArgsConstructor; +import org.dromara.bigscreen.domain.dto.TanchuangInfoReq; import org.dromara.bigscreen.domain.dto.Ys7DeviceUpdateReq; import org.dromara.bigscreen.domain.vo.ProjectImageProgressVo; import org.dromara.bigscreen.domain.vo.ProjectLandVo; @@ -418,4 +419,12 @@ public class ProjectBigScreenController extends BaseController { projectBigScreenService.setWrjHc(); } + /** + * 更新无人机缓存 + */ + @GetMapping("/getInfoData") + public R>> getInfoData(TanchuangInfoReq req){ + return R.ok(projectBigScreenService.getInfoData(req)); + } + } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/domain/dto/TanchuangInfoReq.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/domain/dto/TanchuangInfoReq.java index c9603eae..26630ee7 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/domain/dto/TanchuangInfoReq.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/domain/dto/TanchuangInfoReq.java @@ -8,8 +8,4 @@ import java.io.Serializable; public class TanchuangInfoReq implements Serializable { private Long id; - - private String sn; - - private Integer type; } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/listener/RedisMessageListener.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/listener/RedisMessageListener.java index 8a14764a..e91a41f7 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/listener/RedisMessageListener.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/listener/RedisMessageListener.java @@ -53,22 +53,30 @@ public class RedisMessageListener implements MessageListener { key = "wrj:osd2:"+gateway; }else if (JSONUtil.parseObj(stringRedisTemplate.getStringSerializer().deserialize(message.getBody())).getJSONObject("data").get("network_state") != null) { key = "wrj:osd3:"+gateway; + DroProjectDrone droProjectDrone = droProjectDroneService.getBaseMapper().selectOne(new LambdaQueryWrapper().eq(DroProjectDrone::getDroneSn, gateway)); + setWs(message, gateway, droProjectDrone); }else{ key = "wrj:osd4:"+gateway; + DroProjectDrone droProjectDrone = droProjectDroneService.getBaseMapper().selectOne(new LambdaQueryWrapper().eq(DroProjectDrone::getDroneSn, gateway)); + setWs(message, gateway, droProjectDrone); + } stringRedisTemplate .opsForValue() .set(key , Objects.requireNonNull(stringRedisTemplate.getStringSerializer().deserialize(message.getBody()))); - DroProjectDrone droProjectDrone = droProjectDroneService.getBaseMapper().selectOne(new LambdaQueryWrapper().eq(DroProjectDrone::getDroneSn, gateway)); - String pushContent = buildPushMessage(gateway,stringRedisTemplate.getStringSerializer().deserialize(message.getBody()),droProjectDrone.getProjectId()); + + } + + private void setWs(Message message, String gateway, DroProjectDrone droProjectDrone) { + String pushContent = buildPushMessage(gateway,stringRedisTemplate.getStringSerializer().deserialize(message.getBody()), droProjectDrone.getProjectId()); // 发送给指定用户(equipment.getUserId()) WebSocketMessageDto messageDto = new WebSocketMessageDto(); messageDto.setMessage(pushContent); messageDto.setSessionKeys(Collections.singletonList(droProjectDrone.getProjectId())); WebSocketUtils.publishMessage(messageDto); - } + private String buildPushMessage(String key, String message, Long projectId) { JSONObject messageObj = new JSONObject(); messageObj.put("type", "wrj_DATA_UPDATE"); diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/manager/RedisSubscribeManager.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/manager/RedisSubscribeManager.java index 62bafbd4..f8e2a86f 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/manager/RedisSubscribeManager.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/manager/RedisSubscribeManager.java @@ -77,7 +77,7 @@ public class RedisSubscribeManager { * 4. 定时任务:定期更新订阅(每5分钟执行一次,可调整cron表达式) * cron格式:秒 分 时 日 月 周 年(示例:0 0/5 * * * ? 表示每5分钟) */ - @Scheduled(cron = "0 0/5 * * * ?") + @Scheduled(cron = "0 0/6 * * * ?") public void dynamicUpdateSubscribe() { try { Object object = RedisUtils.getCacheObject("xmjdap:ws"); diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/service/ProjectBigScreenService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/service/ProjectBigScreenService.java index 90e12df8..a8b4e9f9 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/service/ProjectBigScreenService.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/service/ProjectBigScreenService.java @@ -1,5 +1,6 @@ package org.dromara.bigscreen.service; +import org.dromara.bigscreen.domain.dto.TanchuangInfoReq; import org.dromara.bigscreen.domain.vo.ProjectImageProgressVo; import org.dromara.bigscreen.domain.vo.ProjectPeopleVo; import org.dromara.bigscreen.domain.vo.ProjectSafetyInspectionVo; @@ -84,4 +85,5 @@ public interface ProjectBigScreenService { */ void setWrjHc(); + Map> getInfoData(TanchuangInfoReq req); } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/service/impl/ProjectBigScreenServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/service/impl/ProjectBigScreenServiceImpl.java index 680ebd55..c3305554 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/service/impl/ProjectBigScreenServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/service/impl/ProjectBigScreenServiceImpl.java @@ -5,6 +5,7 @@ import cn.hutool.json.JSONArray; import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; import jakarta.annotation.Resource; +import org.dromara.bigscreen.domain.dto.TanchuangInfoReq; import org.dromara.bigscreen.domain.vo.ProjectImageProgressVo; import org.dromara.bigscreen.domain.vo.ProjectPeopleVo; import org.dromara.bigscreen.domain.vo.ProjectSafetyInspectionVo; @@ -18,7 +19,9 @@ import org.dromara.contractor.domain.SubConstructionUser; import org.dromara.contractor.service.ISubConstructionUserService; import org.dromara.drone.service.IDroProjectDroneService; import org.dromara.gps.domain.bo.GpsEquipmentBo; +import org.dromara.gps.domain.vo.DeviceVo; import org.dromara.gps.domain.vo.GpsEquipmentSonVo; +import org.dromara.gps.service.IDeviceService; import org.dromara.gps.service.IGpsEquipmentService; import org.dromara.manager.weathermanager.vo.WeatherVo; import org.dromara.other.domain.OthYs7Device; @@ -88,6 +91,9 @@ public class ProjectBigScreenServiceImpl implements ProjectBigScreenService { @Lazy private StringRedisTemplate stringRedisTemplate; + @Resource + private IDeviceService deviceService; + /** * 获取项目天气 * @@ -473,6 +479,7 @@ public class ProjectBigScreenServiceImpl implements ProjectBigScreenService { LocalDateTime now = LocalDateTime.now(); List voList = gpsEquipmentService.getClientList(projectId, startOfDay, now); List appList = gpsEquipmentService.getUserListByProjectId(projectId, startOfDay, now); + List anqmList = deviceService.getUserListByProjectId(projectId, startOfDay, now); List othYs7DeviceList = othYs7DeviceService.lambdaQuery() .eq(OthYs7Device::getProjectId, projectId) .between(OthYs7Device::getUpdateTime, startOfDay, now) @@ -515,6 +522,7 @@ public class ProjectBigScreenServiceImpl implements ProjectBigScreenService { for (GpsEquipmentSonVo item : voList) { Map gps = new HashMap<>(); gps.put("id", item.getClientId()); + gps.put("userId", item.getUserId()); gps.put("label", item.getClientId()); gps.put("name", item.getDeviceName()); gps.put("type", "gps"); @@ -528,6 +536,7 @@ public class ProjectBigScreenServiceImpl implements ProjectBigScreenService { for (GpsEquipmentSonVo item : appList) { Map app = new HashMap<>(); app.put("id", item.getClientId()); + app.put("userId", item.getUserId()); app.put("label", item.getClientId()); app.put("name", item.getDeviceName()); app.put("type", "app"); @@ -554,6 +563,12 @@ public class ProjectBigScreenServiceImpl implements ProjectBigScreenService { if (wrjKeys != null && !wrjKeys.isEmpty()) { for (String key : wrjKeys) { Object object = stringRedisTemplate.opsForValue().get("wrj:osd4:" + key); + Object object6 = stringRedisTemplate.opsForValue().get("wrj:osd2:" + key); + String status = ""; + if (object6 != null) { + JSONObject object1 = JSONUtil.parseObj(object6); + status = object1.getJSONObject("data").get("flighttask_step_code").toString(); + } if (object != null) { JSONObject object1 = JSONUtil.parseObj(object); Map wrj = new HashMap<>(); @@ -561,9 +576,26 @@ public class ProjectBigScreenServiceImpl implements ProjectBigScreenService { wrj.put("label", key); wrj.put("name", key); wrj.put("type", "wurenji"); + wrj.put("status", status); wrj.put("lat", object1.getJSONObject("data").get("latitude")); wrj.put("lng", object1.getJSONObject("data").get("longitude")); + wrj.put("alt", object1.getJSONObject("data").get("height")); wrjChildrenMap.add(wrj); + }else { + Object object2 = stringRedisTemplate.opsForValue().get("wrj:osd3:" + key); + if (object2 != null) { + JSONObject object3 = JSONUtil.parseObj(object2); + Map wrj = new HashMap<>(); + wrj.put("id", key); + wrj.put("label", key); + wrj.put("name", key); + wrj.put("type", "wurenji"); + wrj.put("status", status); + wrj.put("lat", object3.getJSONObject("data").get("latitude")); + wrj.put("lng", object3.getJSONObject("data").get("longitude")); + wrj.put("alt", object3.getJSONObject("data").get("height")); + wrjChildrenMap.add(wrj); + } } } } @@ -601,4 +633,9 @@ public class ProjectBigScreenServiceImpl implements ProjectBigScreenService { public void setWrjHc() { RedisUtils.setCacheObject("xmjdap:ws",System.currentTimeMillis() ); } + + @Override + public Map> getInfoData(TanchuangInfoReq req) { + return projectService.getInfoData(req); + } } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/mapper/GpsEquipmentSonMapper.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/mapper/GpsEquipmentSonMapper.java index 53df4c27..171503fd 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/mapper/GpsEquipmentSonMapper.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/mapper/GpsEquipmentSonMapper.java @@ -25,7 +25,7 @@ public interface GpsEquipmentSonMapper extends BaseMapperPlus { "FROM ges " + "WHERE rn=1;") List selectVoFristList(@Param("projectId") Long projectId); + + + @Select("WITH RankedData AS (\n" + + " SELECT\n" + + " *,\n" + + " ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY create_time DESC) AS rn\n" + + " FROM\n" + + " location \n " + + "WHERE \n" + + "project_id = #{projectId}\n " + +// "AND create_time BETWEEN #{startTime} AND #{endTime} \n" + + ")\n" + + "SELECT\n" + + " *\n" + + "FROM\n" + + " RankedData\n" + + "WHERE\n" + + " rn = 1;") + List getUserListByProjectId(Long projectId, LocalDateTime startOfDay, LocalDateTime now); } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/service/IDeviceService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/service/IDeviceService.java index d985df31..0239d9f7 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/service/IDeviceService.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/service/IDeviceService.java @@ -10,6 +10,7 @@ import org.dromara.common.mybatis.core.page.PageQuery; import com.baomidou.mybatisplus.extension.service.IService; import org.dromara.gps.domain.vo.GpsProjectVo; +import java.time.LocalDateTime; import java.util.Collection; import java.util.List; @@ -76,4 +77,6 @@ public interface IDeviceService extends IService{ Boolean bindManmachine(DeviceBo bo); Boolean unbindManmachine(DeviceBo bo); + + List getUserListByProjectId(Long projectId, LocalDateTime startOfDay, LocalDateTime now); } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/service/ILocationService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/service/ILocationService.java index 80e794c6..ed06d6f6 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/service/ILocationService.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/service/ILocationService.java @@ -1,5 +1,6 @@ package org.dromara.gps.service; +import org.dromara.gps.domain.vo.DeviceVo; import org.dromara.gps.domain.vo.LocationVo; import org.dromara.gps.domain.bo.LocationBo; import org.dromara.gps.domain.Location; @@ -7,6 +8,8 @@ import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.mybatis.core.page.PageQuery; import com.baomidou.mybatisplus.extension.service.IService; + +import java.time.LocalDateTime; import java.util.Collection; import java.util.List; @@ -69,4 +72,6 @@ public interface ILocationService extends IService{ Boolean deleteWithValidByIds(Collection ids, Boolean isValid); List getLargerScreenList(LocationBo bo); + + List getUserListByProjectId(Long projectId, LocalDateTime startOfDay, LocalDateTime now); } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/service/impl/DeviceServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/service/impl/DeviceServiceImpl.java index 8ceb62eb..e2b994b6 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/service/impl/DeviceServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/service/impl/DeviceServiceImpl.java @@ -17,6 +17,7 @@ import org.dromara.gps.domain.GpsEquipment; import org.dromara.gps.domain.GpsManmachine; import org.dromara.gps.domain.vo.GpsProjectVo; import org.dromara.gps.mapper.AnqmManmachineMapper; +import org.dromara.gps.service.ILocationService; import org.dromara.project.domain.vo.project.BusProjectVo; import org.dromara.project.service.IBusProjectService; import org.springframework.beans.factory.annotation.Autowired; @@ -28,6 +29,7 @@ import org.dromara.gps.mapper.DeviceMapper; import org.dromara.gps.service.IDeviceService; import org.springframework.transaction.annotation.Transactional; +import java.time.LocalDateTime; import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -51,6 +53,9 @@ public class DeviceServiceImpl extends ServiceImpl impleme @Autowired private AnqmManmachineMapper anqmManmachineMapper; + @Autowired + private ILocationService locationService; + /** * 查询安全帽设备 * @@ -212,4 +217,9 @@ public class DeviceServiceImpl extends ServiceImpl impleme return anqmManmachineMapper.delete(new LambdaQueryWrapper() .eq(AnqmManmachine::getClientId, gpsManmachine.getClientId()))> 0; } + + @Override + public List getUserListByProjectId(Long projectId, LocalDateTime startOfDay, LocalDateTime now) { + return locationService.getUserListByProjectId(projectId,startOfDay,now); + } } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/service/impl/LocationServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/service/impl/LocationServiceImpl.java index 03ef1184..79dfd8e1 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/service/impl/LocationServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/service/impl/LocationServiceImpl.java @@ -11,6 +11,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import lombok.RequiredArgsConstructor; import org.dromara.gps.domain.GpsEquipmentSon; +import org.dromara.gps.domain.vo.DeviceVo; import org.dromara.gps.domain.vo.GpsEquipmentSonVo; import org.dromara.system.domain.vo.SysUserVo; import org.dromara.system.service.ISysUserService; @@ -22,6 +23,7 @@ import org.dromara.gps.domain.Location; import org.dromara.gps.mapper.LocationMapper; import org.dromara.gps.service.ILocationService; +import java.time.LocalDateTime; import java.util.List; import java.util.Map; import java.util.Collection; @@ -152,4 +154,9 @@ public class LocationServiceImpl extends ServiceImpl i } return gpsEquipmentSonVoList; } + + @Override + public List getUserListByProjectId(Long projectId, LocalDateTime startOfDay, LocalDateTime now) { + return baseMapper.getUserListByProjectId(projectId,startOfDay,now); + } } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/BusProjectServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/BusProjectServiceImpl.java index 6d91bd29..b9b6ed01 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/BusProjectServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/BusProjectServiceImpl.java @@ -5,6 +5,7 @@ import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.PhoneUtil; import cn.hutool.core.util.RandomUtil; +import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; @@ -28,7 +29,9 @@ import org.dromara.common.core.utils.StringUtils; import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.satoken.utils.LoginHelper; +import org.dromara.contractor.domain.SubConstructionUser; import org.dromara.contractor.domain.SubContractor; +import org.dromara.contractor.service.ISubConstructionUserService; import org.dromara.contractor.service.ISubContractorService; import org.dromara.design.service.IDesTechnicalStandardService; import org.dromara.facility.domain.FacMatrix; @@ -38,6 +41,8 @@ import org.dromara.facility.service.IFacMatrixService; import org.dromara.manager.weathermanager.WeatherConstant; import org.dromara.manager.weathermanager.WeatherManager; import org.dromara.manager.weathermanager.vo.WeatherVo; +import org.dromara.other.domain.OthYs7Device; +import org.dromara.other.service.IOthYs7DeviceService; import org.dromara.progress.domain.PgsProgressCategory; import org.dromara.progress.domain.enums.PgsRelevancyStructureEnum; import org.dromara.progress.domain.vo.progresscategory.PgsProgressCategoryStructureVo; @@ -142,6 +147,10 @@ public class BusProjectServiceImpl extends ServiceImpl WEATHER_CACHE = Caffeine.newBuilder().initialCapacity(1024) .maximumSize(10000L) @@ -1180,21 +1189,17 @@ public class BusProjectServiceImpl extends ServiceImpl> getInfoData(TanchuangInfoReq req) { - switch (req.getType()) { - case 1: - break; - case 2: - break; - case 3: - break; - case 4: - break; - case 5: - break; - case 6: - break; - } - return Map.of(); + Map> map = new HashMap<>(); + SubConstructionUser byUserId = constructionUserService.getByUserId(req.getId()); + SubContractor contractor = contractorService.getById(byUserId.getContractorId()); + Map renyuan = new HashMap<>(); + renyuan.put("name", byUserId.getUserName()); + renyuan.put("teamName", byUserId.getTeamName()); + renyuan.put("phone", byUserId.getPhone()); + renyuan.put("typeOfWork", dictDataService.selectDictLabel("type_of_work", byUserId.getTypeOfWork())); + renyuan.put("contractorNmae", contractor.getName()); + map.put("renyuan", renyuan); + return map; } /**