大屏接口修改

This commit is contained in:
2025-10-12 20:56:08 +08:00
parent f825b9f968
commit 09cbb6a8c5
13 changed files with 128 additions and 25 deletions

View File

@ -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<Map<String, Map<String, Object>>> getInfoData(TanchuangInfoReq req){
return R.ok(projectBigScreenService.getInfoData(req));
}
}

View File

@ -8,8 +8,4 @@ import java.io.Serializable;
public class TanchuangInfoReq implements Serializable {
private Long id;
private String sn;
private Integer type;
}

View File

@ -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<DroProjectDrone>().eq(DroProjectDrone::getDroneSn, gateway));
setWs(message, gateway, droProjectDrone);
}else{
key = "wrj:osd4:"+gateway;
DroProjectDrone droProjectDrone = droProjectDroneService.getBaseMapper().selectOne(new LambdaQueryWrapper<DroProjectDrone>().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<DroProjectDrone>().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");

View File

@ -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");

View File

@ -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<String, Map<String, Object>> getInfoData(TanchuangInfoReq req);
}

View File

@ -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<GpsEquipmentSonVo> voList = gpsEquipmentService.getClientList(projectId, startOfDay, now);
List<GpsEquipmentSonVo> appList = gpsEquipmentService.getUserListByProjectId(projectId, startOfDay, now);
List<DeviceVo> anqmList = deviceService.getUserListByProjectId(projectId, startOfDay, now);
List<OthYs7Device> 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<String, Object> 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<String, Object> 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<String, Object> 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<String, Object> 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<String, Map<String, Object>> getInfoData(TanchuangInfoReq req) {
return projectService.getInfoData(req);
}
}

View File

@ -25,7 +25,7 @@ public interface GpsEquipmentSonMapper extends BaseMapperPlus<GpsEquipmentSon, G
" gps_equipment_son \n" +
"WHERE \n" +
"project_id = #{projectId} \n " +
"AND create_time BETWEEN #{startTime} AND #{endTime}\n" +
// "AND create_time BETWEEN #{startTime} AND #{endTime}\n" +
")\n" +
"SELECT\n" +
" *\n" +
@ -67,7 +67,7 @@ public interface GpsEquipmentSonMapper extends BaseMapperPlus<GpsEquipmentSon, G
"WHERE \n" +
"project_id = #{projectId}\n " +
"AND client_id IS NULL \n" +
"AND create_time BETWEEN #{startTime} AND #{endTime} \n" +
// "AND create_time BETWEEN #{startTime} AND #{endTime} \n" +
")\n" +
"SELECT\n" +
" *\n" +

View File

@ -3,9 +3,11 @@ package org.dromara.gps.mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.dromara.gps.domain.Location;
import org.dromara.gps.domain.vo.DeviceVo;
import org.dromara.gps.domain.vo.LocationVo;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
import java.time.LocalDateTime;
import java.util.List;
/**
@ -28,4 +30,23 @@ public interface LocationMapper extends BaseMapperPlus<Location, LocationVo> {
"FROM ges " +
"WHERE rn=1;")
List<LocationVo> 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<DeviceVo> getUserListByProjectId(Long projectId, LocalDateTime startOfDay, LocalDateTime now);
}

View File

@ -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<Device>{
Boolean bindManmachine(DeviceBo bo);
Boolean unbindManmachine(DeviceBo bo);
List<DeviceVo> getUserListByProjectId(Long projectId, LocalDateTime startOfDay, LocalDateTime now);
}

View File

@ -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<Location>{
Boolean deleteWithValidByIds(Collection<String> ids, Boolean isValid);
List<LocationVo> getLargerScreenList(LocationBo bo);
List<DeviceVo> getUserListByProjectId(Long projectId, LocalDateTime startOfDay, LocalDateTime now);
}

View File

@ -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<DeviceMapper, Device> impleme
@Autowired
private AnqmManmachineMapper anqmManmachineMapper;
@Autowired
private ILocationService locationService;
/**
* 查询安全帽设备
*
@ -212,4 +217,9 @@ public class DeviceServiceImpl extends ServiceImpl<DeviceMapper, Device> impleme
return anqmManmachineMapper.delete(new LambdaQueryWrapper<AnqmManmachine>()
.eq(AnqmManmachine::getClientId, gpsManmachine.getClientId()))> 0;
}
@Override
public List<DeviceVo> getUserListByProjectId(Long projectId, LocalDateTime startOfDay, LocalDateTime now) {
return locationService.getUserListByProjectId(projectId,startOfDay,now);
}
}

View File

@ -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<LocationMapper, Location> i
}
return gpsEquipmentSonVoList;
}
@Override
public List<DeviceVo> getUserListByProjectId(Long projectId, LocalDateTime startOfDay, LocalDateTime now) {
return baseMapper.getUserListByProjectId(projectId,startOfDay,now);
}
}

View File

@ -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<BusProjectMapper, BusProj
@Resource
private ISysDictDataService dictDataService;
@Resource
@Lazy
private ISubConstructionUserService constructionUserService;
private final Cache<String, String> WEATHER_CACHE =
Caffeine.newBuilder().initialCapacity(1024)
.maximumSize(10000L)
@ -1180,21 +1189,17 @@ public class BusProjectServiceImpl extends ServiceImpl<BusProjectMapper, BusProj
@Override
public Map<String, Map<String, Object>> 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<String, Map<String, Object>> map = new HashMap<>();
SubConstructionUser byUserId = constructionUserService.getByUserId(req.getId());
SubContractor contractor = contractorService.getById(byUserId.getContractorId());
Map<String, Object> 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;
}
/**