仿真同步数据
This commit is contained in:
parent
85439bb29b
commit
7a89732aa6
@ -153,6 +153,8 @@ public class MqttFactory {
|
||||
return BeanUtils.getBean(PathPlanningDistributionTaskServiceImpl.class);
|
||||
case PLANNING_DISTRIBUTION_FAIL:
|
||||
return BeanUtils.getBean(PathPlanningDistributionFailServiceImpl.class);
|
||||
case PLANNING_SIMULATION_ROBOT_POSE_REQUEST:
|
||||
return BeanUtils.getBean(PlanningSimulationRobotPoseRequestServiceImpl.class);
|
||||
case PLANNING_MOVE:
|
||||
return BeanUtils.getBean(PathPlanningMoveServiceImpl.class);
|
||||
case PLANNING_ROUTE_DISPLAY:
|
||||
|
@ -25,6 +25,7 @@ public enum DefineSubTopicEnum {
|
||||
PLANNING_INIT_DATA("SYNCHRONOUS_ALL_MAP_REQUEST", 2,"路径规划需要初始数据上报"),
|
||||
PLANNING_DISTRIBUTION_TASK("TASK_ASSIGNMENT_FEEDBACK", 2,"路径规划任务分配上报"),
|
||||
PLANNING_DISTRIBUTION_FAIL("TASK_ASSIGNMENT_FAIL", 2,"路径规划失败上报"),
|
||||
PLANNING_SIMULATION_ROBOT_POSE_REQUEST("SIMULATION_ROBOT_POSE_REQUEST", 2,"仿真初始化点位信息"),
|
||||
PLANNING_MOVE("UPDATE_ROUTE_DISPLAY_PLANNING", 2,"车辆即将走的点位"),
|
||||
PLANNING_ROUTE_DISPLAY("ROBOT_MOVE_POSE_PLANNING", 2,"路径规划上报实时路径");
|
||||
|
||||
|
@ -0,0 +1,22 @@
|
||||
package cn.iododer.yudao.module.mqtt.service;
|
||||
|
||||
import cn.iocoder.yudao.module.system.api.path.PathApi;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
||||
@Service
|
||||
@Slf4j
|
||||
public class PlanningSimulationRobotPoseRequestServiceImpl implements MqttService{
|
||||
|
||||
@Resource
|
||||
private PathApi pathApi;
|
||||
|
||||
@Override
|
||||
public void analysisMessage(String message) {
|
||||
log.info("收到仿真初始化点位的消息 :{}",message);
|
||||
pathApi.simulationRobotPoseRequest(message);
|
||||
}
|
||||
|
||||
}
|
@ -32,4 +32,8 @@ public interface PathApi {
|
||||
@PostMapping(PREFIX + "/pathPlanningMovePose")
|
||||
@Operation(summary = "路径规划要走的点位信息")
|
||||
void pathPlanningMovePose(@RequestParam("message") String message);
|
||||
|
||||
@PostMapping(PREFIX + "/simulationRobotPose")
|
||||
@Operation(summary = "仿真初始化点位信息")
|
||||
void simulationRobotPoseRequest(@RequestParam("message") String message);
|
||||
}
|
||||
|
@ -104,5 +104,15 @@ public class PathApiImpl implements PathApi {
|
||||
pathPlanningService.pathPlanningMovePose(message);
|
||||
}
|
||||
|
||||
/**
|
||||
* 仿真点位信息
|
||||
* @param message
|
||||
*/
|
||||
@Override
|
||||
public void simulationRobotPoseRequest(String message) {
|
||||
TenantContextHolder.setTenantId(1L);
|
||||
pathPlanningService.simulationRobotPoseRequest();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
@ -64,6 +64,10 @@ public class PathPlanningTopicConstant {
|
||||
* 发送车辆编号对应的车宽、中心与车头距离、中心与车尾距离给PP
|
||||
*/
|
||||
public static String SEND_ROBOT_DIMENSIONS = "SEND_ROBOT_DIMENSIONS";
|
||||
/**
|
||||
* 仿真车辆信息
|
||||
*/
|
||||
public static String INIT_ROBOT_POSE = "INIT_ROBOT_POSE";
|
||||
|
||||
/**
|
||||
* 车辆当前位置给给PP
|
||||
|
@ -107,4 +107,11 @@ public class PathPlanningController {
|
||||
pathPlanningService.robotDimensions();
|
||||
return success("同步完成");
|
||||
}
|
||||
|
||||
@PostMapping("/robot/simulationRobotPoseRequest")
|
||||
@Operation(summary = "发送车辆数据给--仿真")
|
||||
public CommonResult<String> simulationRobotPoseRequest() {
|
||||
pathPlanningService.simulationRobotPoseRequest();
|
||||
return success("同步完成");
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,32 @@
|
||||
package cn.iocoder.yudao.module.system.controller.admin.path.dto;
|
||||
|
||||
import com.alibaba.excel.annotation.ExcelProperty;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class SimulationRobotPoseDTO {
|
||||
private String mac;
|
||||
|
||||
@Schema(description = "坐标x轴")
|
||||
private String locationX;
|
||||
|
||||
@Schema(description = "坐标y轴")
|
||||
private String locationY;
|
||||
|
||||
@Schema(description = "实际坐标x轴")
|
||||
private String actualLocationX;
|
||||
|
||||
@Schema(description = "实际坐标y轴")
|
||||
private String actualLocationY;
|
||||
|
||||
@Schema(description = "地图所在楼")
|
||||
public String floor;
|
||||
|
||||
@Schema(description = "地图所在区")
|
||||
public String area;
|
||||
|
||||
@Schema(description = "弧度")
|
||||
private String locationYaw;
|
||||
}
|
@ -13,7 +13,8 @@ public enum CommandConfigTypeEnum {
|
||||
CHARG_CONFIG(1,"充电设置(页面)"),
|
||||
PP_CONFIG_PRIORITY(2,"优先级>时间>路径"),
|
||||
PP_CONFIG_TIME(3,"优先级=时间>路径"),
|
||||
PP_CONFIG_PATH(4,"优先级=时间=路径");
|
||||
PP_CONFIG_PATH(4,"优先级=时间=路径"),
|
||||
SIMULATION_CONFIG(13,"仿真初始化地图");
|
||||
/**
|
||||
* 类型
|
||||
*/
|
||||
|
@ -219,7 +219,10 @@ public class DeviceInformationServiceImpl extends ServiceImpl<DeviceInformationM
|
||||
editList.addAll(list.get(1));
|
||||
}
|
||||
if (isNotEmpty(list.get(2))) {
|
||||
list.get(2).forEach(a -> a.setPositionMapItemId(null));
|
||||
list.get(2).forEach( a -> {
|
||||
a.setPositionMapItemId(null);
|
||||
a.setPositionMapId(null);
|
||||
});
|
||||
editList.addAll(list.get(2));
|
||||
}
|
||||
if (isNotEmpty(editList)) {
|
||||
|
@ -44,4 +44,9 @@ public interface PathPlanningService {
|
||||
* @param message
|
||||
*/
|
||||
void pathPlanningMovePose(String message);
|
||||
|
||||
/**
|
||||
* 仿真点位信息
|
||||
*/
|
||||
void simulationRobotPoseRequest();
|
||||
}
|
||||
|
@ -18,19 +18,27 @@ import cn.iocoder.yudao.module.system.constant.path.PathPlanningTopicConstant;
|
||||
import cn.iocoder.yudao.module.system.constant.robot.RobotTaskChcheConstant;
|
||||
import cn.iocoder.yudao.module.system.constant.robot.RobotTopicConstant;
|
||||
import cn.iocoder.yudao.module.system.constant.webSocket.WebSocketConstant;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.path.dto.SimulationRobotPoseDTO;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.positionmap.vo.PositionMapItemSaveReqVO;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.positionmap.vo.PositionMapLineSaveReqVO;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.positionmap.vo.PositionMapSaveReqVO;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.robot.task.TaskAssignDTO;
|
||||
import cn.iocoder.yudao.module.system.dal.dataobject.config.CommonConfigDO;
|
||||
import cn.iocoder.yudao.module.system.dal.dataobject.positionmap.PositionMapDO;
|
||||
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.robot.RobotInformationDO;
|
||||
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.PositionMapMapper;
|
||||
import cn.iocoder.yudao.module.system.dal.mysql.robot.RobotInformationMapper;
|
||||
import cn.iocoder.yudao.module.system.enums.config.CommandConfigTypeEnum;
|
||||
import cn.iocoder.yudao.module.system.enums.item.PositionMapItemEnum;
|
||||
import cn.iocoder.yudao.module.system.enums.line.DirectionEnum;
|
||||
import cn.iocoder.yudao.module.system.enums.path.PathTypeEnum;
|
||||
import cn.iocoder.yudao.module.system.service.config.CommonConfigService;
|
||||
import cn.iocoder.yudao.module.system.service.positionmap.PositionMapItemService;
|
||||
import cn.iocoder.yudao.module.system.service.positionmap.PositionMapService;
|
||||
import cn.iocoder.yudao.module.system.service.robot.RobotInformationService;
|
||||
import cn.iocoder.yudao.module.system.util.redis.RedisUtil;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
@ -80,15 +88,21 @@ public class PathPlanningServiceImpl implements PathPlanningService {
|
||||
@Resource
|
||||
private CommonApi commonApi;
|
||||
|
||||
@Resource
|
||||
private RequestProcessor processor;
|
||||
|
||||
@Resource
|
||||
private RedisUtil redisUtil;
|
||||
|
||||
@Resource
|
||||
public WebSocketSenderApi webSocketSenderApi;
|
||||
|
||||
@Resource
|
||||
private CommonConfigService configService;
|
||||
|
||||
@Resource
|
||||
private PositionMapService positionMapService;
|
||||
|
||||
@Resource
|
||||
private PositionMapItemService positionMapItemService;
|
||||
|
||||
/**
|
||||
* 同步ware_position_map_line的点位信息
|
||||
*/
|
||||
@ -444,6 +458,64 @@ public class PathPlanningServiceImpl implements PathPlanningService {
|
||||
WebSocketConstant.PLANNING_MOVE_POSE, message);
|
||||
}
|
||||
|
||||
/**
|
||||
* 仿真点位信息
|
||||
*/
|
||||
@Override
|
||||
public void simulationRobotPoseRequest() {
|
||||
CommonConfigDO config = configService.getConfig(CommandConfigTypeEnum.SIMULATION_CONFIG.getType().longValue());
|
||||
PositionMapDO positionMap = null;
|
||||
if (ObjectUtil.isEmpty(config) || ObjectUtil.isEmpty(config.getConfigStr())) {
|
||||
List<PositionMapDO> maps = positionMapService.getAllMap();
|
||||
if (ObjectUtil.isEmpty(maps)) {
|
||||
return;
|
||||
}
|
||||
positionMap = maps.get(0);
|
||||
}else {
|
||||
positionMap = positionMapService.getPositionMap(Long.valueOf(config.getConfigStr()));
|
||||
}
|
||||
if (ObjectUtil.isEmpty(positionMap)) {
|
||||
log.info("仿真环境没有地图信息");
|
||||
return;
|
||||
}
|
||||
|
||||
List<RobotInformationDO> robots = robotInformationService.getAllRobot();
|
||||
|
||||
if (ObjectUtil.isEmpty(robots)) {
|
||||
log.info("仿真环境没有机器人信息");
|
||||
return;
|
||||
}
|
||||
|
||||
List<PositionMapItemDO> itemDOList = new ArrayList<>();
|
||||
List<PositionMapItemDO> items = positionMapItemService.getPositionMapItemByMapAndType(positionMap.getId(), PositionMapItemEnum.WAIT.getType());
|
||||
if (ObjectUtil.isEmpty(items) || items.size() < robots.size()) {
|
||||
List<PositionMapItemDO> itemPoses = positionMapItemService.getPositionMapItemByMapAndType(positionMap.getId(), PositionMapItemEnum.PATH.getType());
|
||||
itemDOList.addAll(itemPoses);
|
||||
} else {
|
||||
itemDOList = items;
|
||||
}
|
||||
|
||||
List<SimulationRobotPoseDTO> simulationList = new ArrayList<>();
|
||||
int i = 0;
|
||||
for (RobotInformationDO robot : robots) {
|
||||
SimulationRobotPoseDTO simulationRobotPoseDTO = new SimulationRobotPoseDTO();
|
||||
simulationRobotPoseDTO.setMac(robot.getMacAddress());
|
||||
if (itemDOList.size() <= i) {
|
||||
continue;
|
||||
}
|
||||
simulationRobotPoseDTO.setLocationX(itemDOList.get(i).getLocationX());
|
||||
simulationRobotPoseDTO.setLocationY(itemDOList.get(i).getLocationY());
|
||||
simulationRobotPoseDTO.setActualLocationX(itemDOList.get(i).getActualLocationX());
|
||||
simulationRobotPoseDTO.setActualLocationY(itemDOList.get(i).getActualLocationY());
|
||||
simulationRobotPoseDTO.setLocationYaw(itemDOList.get(i).getLocationYaw());
|
||||
simulationRobotPoseDTO.setFloor(positionMap.getFloor()+"");
|
||||
simulationRobotPoseDTO.setArea(positionMap.getArea());
|
||||
simulationList.add(simulationRobotPoseDTO);
|
||||
i++;
|
||||
}
|
||||
commonApi.commonMethod(simulationList, PathPlanningTopicConstant.INIT_ROBOT_POSE);
|
||||
}
|
||||
|
||||
public PositionMapLineDTO setPositionMapLineDTOData(PositionMapLineDTO positionMapLineDO) {
|
||||
PositionMapLineDTO build = PositionMapLineDTO.builder()
|
||||
.id(positionMapLineDO.getId())
|
||||
|
@ -103,4 +103,12 @@ public interface PositionMapItemService extends IService<PositionMapItemDO> {
|
||||
Object getAGVPointInformation(String macAddress);
|
||||
|
||||
void setMapItemIdle(Long id);
|
||||
|
||||
/**
|
||||
* 查询地图对应的类型数据
|
||||
* @param id 地图id
|
||||
* @param type 类型
|
||||
* @return
|
||||
*/
|
||||
List<PositionMapItemDO> getPositionMapItemByMapAndType(Long id, Integer type);
|
||||
}
|
||||
|
@ -17,6 +17,7 @@ import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
import static cn.hutool.core.collection.CollUtil.isNotEmpty;
|
||||
@ -130,4 +131,11 @@ public class PositionMapItemServiceImpl extends ServiceImpl<PositionMapItemMappe
|
||||
positionMapItemMapper.updateById(item);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<PositionMapItemDO> getPositionMapItemByMapAndType(Long mapId, Integer type) {
|
||||
return positionMapItemMapper.selectList(new LambdaQueryWrapperX<PositionMapItemDO>()
|
||||
.eq(PositionMapItemDO::getPositionMapId, mapId)
|
||||
.eq(PositionMapItemDO::getType, type));
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -10,6 +10,7 @@ import org.springframework.web.multipart.MultipartFile;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import javax.validation.Valid;
|
||||
import java.io.IOException;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 仓库点位地图 Service 接口
|
||||
@ -94,4 +95,10 @@ public interface PositionMapService extends IService<PositionMapDO> {
|
||||
* @param id
|
||||
*/
|
||||
void emergencyStopOrRecovery(Long id);
|
||||
|
||||
/**
|
||||
* 获取所有地图
|
||||
* @return
|
||||
*/
|
||||
List<PositionMapDO> getAllMap();
|
||||
}
|
||||
|
@ -305,4 +305,9 @@ public class PositionMapServiceImpl extends ServiceImpl<PositionMapMapper, Posit
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<PositionMapDO> getAllMap() {
|
||||
return positionMapMapper.selectList(new LambdaQueryWrapperX<PositionMapDO>().orderByDesc(PositionMapDO::getId));
|
||||
}
|
||||
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user