MQTT消费

This commit is contained in:
cbs 2025-06-12 15:21:27 +08:00
parent 0072a4e4d0
commit 2e03d0780c
4 changed files with 33 additions and 18 deletions

View File

@ -47,7 +47,7 @@ public class RobotStatusApiImpl implements RobotStatusApi {
@Resource @Resource
private RequestProcessor processor; private RequestProcessor processor;
private static final ExecutorService executorService = Executors.newFixedThreadPool(5); private static final ExecutorService executorService = Executors.newFixedThreadPool(20);
@Resource @Resource
private CommonApi commonApi; private CommonApi commonApi;
@ -109,11 +109,9 @@ public class RobotStatusApiImpl implements RobotStatusApi {
redisUtil.set(pose2dKey, JSON.toJSONString(robotStatusDataPoseDTO), robotPositionCacheTime); redisUtil.set(pose2dKey, JSON.toJSONString(robotStatusDataPoseDTO), robotPositionCacheTime);
//机器人身上是否有货 executorService.execute(() ->{
String taskStatusKey = RobotTaskChcheConstant.ROBOT_TASK_STATUS + robotStatusDataDTO.getMac(); sendToPP(robotStatusDataPoseDTO);
String cargoDetectedKey = RobotTaskChcheConstant.ROBOT_CARGO_DETECTED + robotStatusDataDTO.getMac(); });
redisUtil.set(taskStatusKey, robotStatusDataDTO.getTaskStatus(), robotPositionCacheTime);
redisUtil.set(cargoDetectedKey, robotStatusDataDTO.getCargoDetected(), robotPositionCacheTime);
// -- 通过mac 地址获取车辆信息 - (并且加入到缓存中) // -- 通过mac 地址获取车辆信息 - (并且加入到缓存中)
Map<String, RobotInformationVO> robotInformationVOS = robotInformationService.getAllRobotByRedis(); Map<String, RobotInformationVO> robotInformationVOS = robotInformationService.getAllRobotByRedis();
@ -123,15 +121,27 @@ public class RobotStatusApiImpl implements RobotStatusApi {
} }
robotInformationVO.setPose2d(robotStatusDataPoseDTO); robotInformationVO.setPose2d(robotStatusDataPoseDTO);
RobotInformationVO finalRobotInformationVO = robotInformationVO;
executorService.execute(() ->{
//机器人身上是否有货
String taskStatusKey = RobotTaskChcheConstant.ROBOT_TASK_STATUS + robotStatusDataDTO.getMac();
String cargoDetectedKey = RobotTaskChcheConstant.ROBOT_CARGO_DETECTED + robotStatusDataDTO.getMac();
redisUtil.set(taskStatusKey, robotStatusDataDTO.getTaskStatus(), robotPositionCacheTime);
redisUtil.set(cargoDetectedKey, robotStatusDataDTO.getCargoDetected(), robotPositionCacheTime);
Map<String, Object> map = new HashMap<>(); Map<String, Object> map = new HashMap<>();
String value = FloorAreaConstant.FLOOR_AREA_ROBOT + floorZoneDTO.getFloor() + CommonConstant.SYMBOL + floorZoneDTO.getArea(); String value = FloorAreaConstant.FLOOR_AREA_ROBOT + floorZoneDTO.getFloor() + CommonConstant.SYMBOL + floorZoneDTO.getArea();
map.put(robotStatusDataDTO.getMac(), JSON.toJSONString(robotInformationVO)); map.put(robotStatusDataDTO.getMac(), JSON.toJSONString(finalRobotInformationVO));
redisUtil.hmset(value, map, 20); redisUtil.hmset(value, map, 20);
});
executorService.execute(() ->{
// 合并请求 - 这里接受到的数据都丢给 RequestProcessor - 再整合数据通过WebSocket丢给前端 // 合并请求 - 这里接受到的数据都丢给 RequestProcessor - 再整合数据通过WebSocket丢给前端
processor.handleRequest(floorZoneDTO.getFloor() + CommonConstant.SYMBOL + floorZoneDTO.getArea(), processor.handleRequest(floorZoneDTO.getFloor() + CommonConstant.SYMBOL + floorZoneDTO.getArea(),
robotStatusDataDTO.getMac(), JSONUtil.toJsonStr(robotInformationVO)); robotStatusDataDTO.getMac(), JSONUtil.toJsonStr(finalRobotInformationVO));
sendToPP(robotStatusDataPoseDTO); });
} }
private void sendToPP(RobotStatusDataPoseDTO robotStatusDataPoseDTO) { private void sendToPP(RobotStatusDataPoseDTO robotStatusDataPoseDTO) {

View File

@ -95,6 +95,7 @@ public interface PositionMapItemMapper extends BaseMapperX<PositionMapItemDO> {
* @param ids * @param ids
* @return * @return
*/ */
@MapKey("id") /*@MapKey("id")
Map<Long, Long> selectSortNumByIds(@Param("ids") List<Long> ids); Map<Long, Long> selectSortNumByIds(@Param("ids") List<Long> ids);*/
List<PositionMapItemDO> selectSortNumByIds(@Param("ids") List<Long> ids);
} }

View File

@ -8,6 +8,7 @@ import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.system.controller.admin.positionmap.vo.PositionMapLinePageReqVO; import cn.iocoder.yudao.module.system.controller.admin.positionmap.vo.PositionMapLinePageReqVO;
import cn.iocoder.yudao.module.system.controller.admin.positionmap.vo.PositionMapLineSaveReqVO; import cn.iocoder.yudao.module.system.controller.admin.positionmap.vo.PositionMapLineSaveReqVO;
import cn.iocoder.yudao.module.system.dal.dataobject.positionmap.PositionMapItemDO;
import cn.iocoder.yudao.module.system.dal.dataobject.positionmap.PositionMapLineDO; import cn.iocoder.yudao.module.system.dal.dataobject.positionmap.PositionMapLineDO;
import cn.iocoder.yudao.module.system.dal.mysql.positionmap.PositionMapItemMapper; import cn.iocoder.yudao.module.system.dal.mysql.positionmap.PositionMapItemMapper;
import cn.iocoder.yudao.module.system.dal.mysql.positionmap.PositionMapLineMapper; import cn.iocoder.yudao.module.system.dal.mysql.positionmap.PositionMapLineMapper;
@ -65,7 +66,10 @@ public class PositionMapLineServiceImpl extends ServiceImpl<PositionMapLineMappe
List<Long> endPointIds = addList.stream().map(PositionMapLineDO::getEndPointId).collect(Collectors.toList()); List<Long> endPointIds = addList.stream().map(PositionMapLineDO::getEndPointId).collect(Collectors.toList());
//合并startPointIds endPointIds 并且去重 //合并startPointIds endPointIds 并且去重
Set<Long> pointIds = CollUtil.unionDistinct(startPointIds, endPointIds); Set<Long> pointIds = CollUtil.unionDistinct(startPointIds, endPointIds);
map = positionMapItemMapper.selectSortNumByIds(new ArrayList<>(pointIds)); List<PositionMapItemDO> positionMapItemDOS = positionMapItemMapper.selectSortNumByIds(new ArrayList<>(pointIds));
if (ObjectUtil.isNotEmpty(positionMapItemDOS)) {
map = positionMapItemDOS.stream().collect(Collectors.toMap(PositionMapItemDO::getId, PositionMapItemDO::getSortNum));
}
} }
for (PositionMapLineDO positionMapLineDO : newList) { for (PositionMapLineDO positionMapLineDO : newList) {
positionMapLineDO.setPositionMapId(positionMapId); positionMapLineDO.setPositionMapId(positionMapId);

View File

@ -86,7 +86,7 @@
(#{item.positionMapId}, #{item.actualLocationX}, #{item.actualLocationY}, #{item.type}) (#{item.positionMapId}, #{item.actualLocationX}, #{item.actualLocationY}, #{item.type})
</foreach> </foreach>
</select> </select>
<select id="selectSortNumByIds" resultType="map"> <select id="selectSortNumByIds" resultType="cn.iocoder.yudao.module.system.dal.dataobject.positionmap.PositionMapItemDO">
select select
id, id,
sort_num as sortNum sort_num as sortNum