远遥车辆列表
This commit is contained in:
parent
342038226e
commit
8e04dca496
@ -17,6 +17,7 @@ import org.springframework.web.bind.annotation.*;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.validation.Valid;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
|
||||
|
||||
@ -31,7 +32,7 @@ public class RemoteRobotController {
|
||||
|
||||
@PostMapping("/getAreaRobot")
|
||||
@Operation(summary = "获取地图区域对应的机器人信息")
|
||||
public CommonResult<List<RemoteRobotDTO>> getAreaRobot(@RequestBody PositionMapRespDTO positionMapRespDTO) {
|
||||
public CommonResult<List<RemoteRobotDTO>> getAreaRobot(@Valid @RequestBody PositionMapRespDTO positionMapRespDTO) {
|
||||
List<RemoteRobotDTO> list = remoteRobotService.remoteGetAreaRobot(positionMapRespDTO);
|
||||
return success(list);
|
||||
}
|
||||
@ -78,5 +79,12 @@ public class RemoteRobotController {
|
||||
return success(true);
|
||||
}
|
||||
|
||||
@GetMapping("/getMap")
|
||||
@Operation(summary = "获得仓库点位地图Map")
|
||||
@PreAuthorize("@ss.hasPermission('system:position-map:getMap')")
|
||||
public CommonResult<Object> getPositionMapList() {
|
||||
Object result = remoteRobotService.getPositionMapList();
|
||||
return success(result);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -3,8 +3,11 @@ package cn.iocoder.yudao.module.remote.controller.admin.robot.dto;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
import javax.validation.constraints.NotNull;
|
||||
|
||||
@Data
|
||||
public class PositionMapRespDTO {
|
||||
@Schema(description = "地图id")
|
||||
@NotNull(message = "请输入地图id")
|
||||
private Long id;
|
||||
}
|
||||
|
@ -21,7 +21,7 @@ import java.util.List;
|
||||
|
||||
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
|
||||
|
||||
@Tag(name = "管理后台 - 远遥任务")
|
||||
@Tag(name = "管理后台 - 异常车辆列表")
|
||||
@RestController
|
||||
@RequestMapping("/remote/task")
|
||||
@Validated
|
||||
|
@ -50,4 +50,10 @@ public interface RemoteRobotService {
|
||||
* @return
|
||||
*/
|
||||
void robotChangeMode( RemoteRobotChangeModeDTO data,HttpServletRequest request);
|
||||
|
||||
/**
|
||||
* 查询地图
|
||||
* @return
|
||||
*/
|
||||
Object getPositionMapList();
|
||||
}
|
||||
|
@ -97,4 +97,9 @@ public class RemoteRobotServiceImpl implements RemoteRobotService{
|
||||
throw exception0(TASK_COMMONG_FAIL.getCode(), result.getMsg());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getPositionMapList() {
|
||||
return remoteRobotApi.getRemotePositionMapList();
|
||||
}
|
||||
}
|
||||
|
@ -20,7 +20,7 @@ public interface RemoteRobotApi {
|
||||
|
||||
@PostMapping(PREFIX + "/remoteGetAreaRobot")
|
||||
@Operation(summary = "获取地图区域对应的机器人信息")
|
||||
List<RemoteRobotDTO> remoteGetAreaRobot(@RequestParam(value = "mapId", defaultValue = "-1") Long mapId);
|
||||
List<RemoteRobotDTO> remoteGetAreaRobot(@RequestParam(value = "mapId") Long mapId);
|
||||
|
||||
@PostMapping(PREFIX + "/remoteEmergencyStopOrRecovery")
|
||||
@Operation(summary = "一键急停or一键恢复地图上所有AGV")
|
||||
@ -43,4 +43,8 @@ public interface RemoteRobotApi {
|
||||
CommonResult<Boolean> robotChangeMode(@RequestParam(value = "remoteMode") Integer remoteMode,
|
||||
@RequestParam(value = "ip") String ip,
|
||||
@RequestParam(value = "robotNo") String robotNo);
|
||||
|
||||
@PostMapping(PREFIX + "/getRemotePositionMapList")
|
||||
@Operation(summary = "远遥查询地图")
|
||||
Object getRemotePositionMapList();
|
||||
}
|
||||
|
@ -10,17 +10,11 @@ import java.util.List;
|
||||
@NoArgsConstructor
|
||||
public class RemoteRobotDTO {
|
||||
|
||||
@Schema(description = "地图id")
|
||||
private Long id;
|
||||
@Schema(description = "远遥模式(0:自动模式, 1:手动模式, 2:自由模式)")
|
||||
private Integer remoteMode = 0;
|
||||
|
||||
@Schema(description = "楼层")
|
||||
private Integer floor;
|
||||
|
||||
@Schema(description = "区域")
|
||||
private String area;
|
||||
|
||||
@Schema(description = "地图是否暂停(0:暂停, 1:没暂停)")
|
||||
private Integer isStop = 1;
|
||||
@Schema(description = "车辆数量")
|
||||
private Integer robotQuantity = 0;
|
||||
|
||||
@Schema(description = "车辆明细")
|
||||
private List<RemoteRobotDetailDTO> robotList;
|
||||
|
@ -12,7 +12,7 @@ public class RemoteRobotDetailDTO {
|
||||
@Schema(description = "上传图片附件", example = "https://www.iocoder.cn")
|
||||
private String url;
|
||||
|
||||
@Schema(description = "任务模式(0:拒收任务、1:正常)", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@Schema(description = "任务模式(0:锁定、1:正常)", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
private Integer robotTaskModel;
|
||||
|
||||
@Schema(description = "车辆状态(2:任务中、3:待命、4:充电中)")
|
||||
@ -21,6 +21,6 @@ public class RemoteRobotDetailDTO {
|
||||
@Schema(description = "任务号")
|
||||
private String taskNo;
|
||||
|
||||
@Schema(description = "远遥模式(0:自动模式, 1:手动模式, 2:自由模式)")
|
||||
@Schema(description = "车辆模式(0:自动模式, 1:手动模式, 2:自由模式)")
|
||||
private Integer remoteMode = 0;
|
||||
}
|
||||
|
@ -3,6 +3,7 @@ package cn.iocoder.yudao.module.system.api.remote;
|
||||
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
|
||||
import cn.iocoder.yudao.module.system.api.remote.dto.RemoteRobotDTO;
|
||||
import cn.iocoder.yudao.module.system.api.remote.dto.RemoteRobotStatusDTO;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.positionmap.dto.PositionMapDTO;
|
||||
import cn.iocoder.yudao.module.system.service.positionmap.PositionMapService;
|
||||
import cn.iocoder.yudao.module.system.service.remote.RemoteControllerInformationService;
|
||||
import cn.iocoder.yudao.module.system.service.robot.mapstop.RobotMapStopService;
|
||||
@ -12,6 +13,7 @@ import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@Slf4j
|
||||
@RestController // 提供 RESTful API 接口,给 Feign 调用
|
||||
@ -98,5 +100,11 @@ public class RemoteRobotApiImpl implements RemoteRobotApi {
|
||||
return CommonResult.success(true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getRemotePositionMapList() {
|
||||
Map<Integer, List<PositionMapDTO>> result = positionMapService.getPositionMapList();
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
@ -24,6 +24,7 @@ import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotMapStopDO;
|
||||
import cn.iocoder.yudao.module.system.dal.mysql.positionmap.PositionMapMapper;
|
||||
import cn.iocoder.yudao.module.system.enums.common.ZeroOneEnum;
|
||||
import cn.iocoder.yudao.module.system.enums.robot.RobotStatusEnum;
|
||||
import cn.iocoder.yudao.module.system.enums.robot.remote.RemoteModeEnum;
|
||||
import cn.iocoder.yudao.module.system.enums.robot.task.RobotCommandTypeEnum;
|
||||
import cn.iocoder.yudao.module.system.service.log.UserOperationLogService;
|
||||
import cn.iocoder.yudao.module.system.service.remote.RemoteControllerInformationService;
|
||||
@ -344,7 +345,7 @@ public class PositionMapServiceImpl extends ServiceImpl<PositionMapMapper, Posit
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void emergencyStopOrRecovery(Long id, Integer type,Boolean isRemote) {
|
||||
public void emergencyStopOrRecovery(Long id, Integer type, Boolean isRemote) {
|
||||
// 先获取当前地图上的所有AGV信息
|
||||
PositionMapDO positionMapDO = positionMapMapper.selectById(id);
|
||||
|
||||
@ -360,7 +361,7 @@ public class PositionMapServiceImpl extends ServiceImpl<PositionMapMapper, Posit
|
||||
str = RobotCommandTypeEnum.EMERGENCY_STOP.getMsg();
|
||||
if (isRemote) {
|
||||
mapStr = "远遥一键暂停 " + mapStr;
|
||||
}else {
|
||||
} else {
|
||||
mapStr = "一键暂停 " + mapStr;
|
||||
}
|
||||
|
||||
@ -380,7 +381,7 @@ public class PositionMapServiceImpl extends ServiceImpl<PositionMapMapper, Posit
|
||||
str = RobotCommandTypeEnum.RECOVERY.getMsg();
|
||||
if (isRemote) {
|
||||
mapStr = "远遥一键恢复 " + mapStr;
|
||||
}else {
|
||||
} else {
|
||||
mapStr = "一键恢复 " + mapStr;
|
||||
}
|
||||
robotMapStopService.deleteRobotMapStopByMapId(id);
|
||||
@ -409,7 +410,6 @@ public class PositionMapServiceImpl extends ServiceImpl<PositionMapMapper, Posit
|
||||
}
|
||||
|
||||
|
||||
|
||||
@Override
|
||||
public List<PositionMapDO> getAllMap() {
|
||||
return positionMapMapper.selectList(new LambdaQueryWrapperX<PositionMapDO>().orderByDesc(PositionMapDO::getId));
|
||||
@ -446,9 +446,16 @@ public class PositionMapServiceImpl extends ServiceImpl<PositionMapMapper, Posit
|
||||
@Override
|
||||
public List<RemoteRobotDTO> getRemoteAreaRobotByMapId(Long mapId) {
|
||||
|
||||
List<RobotInformationDO> allRobot = informationService.getAllRobot();
|
||||
PositionMapDO positionMapDO = positionMapMapper.selectById(mapId);
|
||||
List<String> robotNos =
|
||||
informationService.getRobotByFloorAndArea(String.valueOf(positionMapDO.getFloor()), positionMapDO.getArea());
|
||||
if (ObjectUtil.isEmpty(robotNos)) {
|
||||
return new ArrayList<>();
|
||||
}
|
||||
|
||||
List<RobotInformationDO> allRobot = informationService.getRobotInformationByRobotNos(robotNos);
|
||||
|
||||
List<RobotDoingTaskDTO> robotDoingTask = taskDetailService.getRobotDoingTaskNo();
|
||||
List<RobotMapStopDO> robotMapStops = mapStopService.getAllRobotMapStops(ZeroOneEnum.ZERO.getType());
|
||||
|
||||
List<RemoteControllerInformationDO> remoteControllerInformations = controllerInformationService.getAllRemoteController();
|
||||
|
||||
@ -463,79 +470,65 @@ public class PositionMapServiceImpl extends ServiceImpl<PositionMapMapper, Posit
|
||||
robotDoingTaskMap = robotDoingTask.stream().collect(Collectors.toMap(RobotDoingTaskDTO::getRobotNo, Function.identity()));
|
||||
}
|
||||
|
||||
List<Long> stopMapIds = null;
|
||||
if (ObjectUtil.isNotEmpty(robotMapStops)) {
|
||||
stopMapIds = robotMapStops.stream().map(RobotMapStopDO::getPositionMapId).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
Map<String, RemoteControllerInformationDO> remoteMap = null;
|
||||
if (ObjectUtil.isNotEmpty(remoteControllerInformations)) {
|
||||
remoteMap = remoteControllerInformations.stream().collect(Collectors.toMap(RemoteControllerInformationDO::getRobotNo, Function.identity()));
|
||||
}
|
||||
|
||||
if (ObjectUtil.isEmpty(mapId) || mapId < 0) {
|
||||
List<PositionMapDO> allMap = positionMapMapper.selectList(new LambdaQueryWrapperX<PositionMapDO>().orderByDesc(PositionMapDO::getFloor));
|
||||
if (ObjectUtil.isEmpty(allMap)) {
|
||||
return new ArrayList<>();
|
||||
}
|
||||
return getRemoteAllMapInfomation(allMap, robotMap, robotDoingTaskMap, stopMapIds, remoteMap);
|
||||
} else {
|
||||
PositionMapDO positionMapDO = positionMapMapper.selectById(mapId);
|
||||
RemoteRobotDTO remoteRobot = getRemoteSingleMapInfomation(positionMapDO, robotMap,
|
||||
robotDoingTaskMap, stopMapIds,
|
||||
remoteMap);
|
||||
return Collections.singletonList(remoteRobot);
|
||||
}
|
||||
return getRemoteSingleMapInfomation(robotMap, robotNos,
|
||||
robotDoingTaskMap,
|
||||
remoteMap);
|
||||
}
|
||||
|
||||
private List<RemoteRobotDTO> getRemoteAllMapInfomation(List<PositionMapDO> allMap, Map<String, RobotInformationDO> robotMap,
|
||||
Map<String, RobotDoingTaskDTO> robotDoingTaskMap, List<Long> stopMapIds,
|
||||
Map<String, RemoteControllerInformationDO> remoteMap) {
|
||||
List<RemoteRobotDTO> remoteRobotList = new ArrayList<>();
|
||||
for (PositionMapDO positionMapDO : allMap) {
|
||||
RemoteRobotDTO remoteRobotDTO = getRemoteSingleMapInfomation(positionMapDO, robotMap, robotDoingTaskMap, stopMapIds, remoteMap);
|
||||
remoteRobotList.add(remoteRobotDTO);
|
||||
}
|
||||
return remoteRobotList;
|
||||
}
|
||||
|
||||
private RemoteRobotDTO getRemoteSingleMapInfomation(PositionMapDO positionMapDO, Map<String, RobotInformationDO> robotMap,
|
||||
Map<String, RobotDoingTaskDTO> robotDoingTaskMap, List<Long> stopMapIds,
|
||||
private List<RemoteRobotDTO> getRemoteSingleMapInfomation(Map<String, RobotInformationDO> robotMap, List<String> robotNos,
|
||||
Map<String, RobotDoingTaskDTO> robotDoingTaskMap,
|
||||
Map<String, RemoteControllerInformationDO> remoteMap) {
|
||||
List<String> robotNos =
|
||||
informationService.getRobotByFloorAndArea(String.valueOf(positionMapDO.getFloor()), positionMapDO.getArea());
|
||||
RemoteRobotDTO remoteRobotDTO = new RemoteRobotDTO();
|
||||
remoteRobotDTO.setId(positionMapDO.getId());
|
||||
remoteRobotDTO.setFloor(positionMapDO.getFloor());
|
||||
remoteRobotDTO.setArea(positionMapDO.getArea());
|
||||
if (ObjectUtil.isNotEmpty(robotNos) && ObjectUtil.isNotEmpty(robotMap)) {
|
||||
List<RemoteRobotDetailDTO> robotList = new ArrayList<>();
|
||||
for (String robotNo : robotNos) {
|
||||
RobotInformationDO robotInformation = robotMap.get(robotNo);
|
||||
if (ObjectUtil.isEmpty(robotInformation)) {
|
||||
continue;
|
||||
}
|
||||
RemoteRobotDetailDTO remoteRobotDetail = BeanUtils.toBean(robotInformation, RemoteRobotDetailDTO.class);
|
||||
if (ObjectUtil.isNotEmpty(robotDoingTaskMap) && ObjectUtil.isNotEmpty(robotDoingTaskMap.get(robotNo))) {
|
||||
remoteRobotDetail.setTaskNo(robotDoingTaskMap.get(robotNo).getTaskNo());
|
||||
} else if (RobotStatusEnum.DOING.getType().equals(robotInformation.getRobotStatus())) {
|
||||
remoteRobotDetail.setTaskNo("车辆正在做移动任务");
|
||||
} else if (RobotStatusEnum.CHARGE.getType().equals(robotInformation.getRobotStatus())) {
|
||||
remoteRobotDetail.setTaskNo("车辆正在做充电任务");
|
||||
}
|
||||
RemoteRobotDTO automatic = new RemoteRobotDTO();
|
||||
RemoteRobotDTO handMovement = new RemoteRobotDTO();
|
||||
RemoteRobotDTO free = new RemoteRobotDTO();
|
||||
List<RemoteRobotDetailDTO> automaticDetail = new ArrayList<>();
|
||||
List<RemoteRobotDetailDTO> handMovementDetail = new ArrayList<>();
|
||||
List<RemoteRobotDetailDTO> freeDetail = new ArrayList<>();
|
||||
|
||||
if (ObjectUtil.isNotEmpty(remoteMap) && ObjectUtil.isNotEmpty(remoteMap.get(robotNo))) {
|
||||
remoteRobotDetail.setRemoteMode(remoteMap.get(robotNo).getRemoteMode());
|
||||
}
|
||||
robotList.add(remoteRobotDetail);
|
||||
for (String robotNo : robotNos) {
|
||||
RobotInformationDO robotInformation = robotMap.get(robotNo);
|
||||
if (ObjectUtil.isEmpty(robotInformation)) {
|
||||
continue;
|
||||
}
|
||||
RemoteRobotDetailDTO remoteRobotDetail = BeanUtils.toBean(robotInformation, RemoteRobotDetailDTO.class);
|
||||
if (ObjectUtil.isNotEmpty(robotDoingTaskMap) && ObjectUtil.isNotEmpty(robotDoingTaskMap.get(robotNo))) {
|
||||
remoteRobotDetail.setTaskNo(robotDoingTaskMap.get(robotNo).getTaskNo());
|
||||
} else if (RobotStatusEnum.DOING.getType().equals(robotInformation.getRobotStatus())) {
|
||||
remoteRobotDetail.setTaskNo("车辆正在做移动任务");
|
||||
} else if (RobotStatusEnum.CHARGE.getType().equals(robotInformation.getRobotStatus())) {
|
||||
remoteRobotDetail.setTaskNo("车辆正在做充电任务");
|
||||
}
|
||||
|
||||
if (ObjectUtil.isNotEmpty(remoteMap) && ObjectUtil.isNotEmpty(remoteMap.get(robotNo))) {
|
||||
remoteRobotDetail.setRemoteMode(remoteMap.get(robotNo).getRemoteMode());
|
||||
}
|
||||
|
||||
if (RemoteModeEnum.AUTOMATIC.getType().equals(remoteRobotDetail.getRemoteMode())) {
|
||||
automaticDetail.add(remoteRobotDetail);
|
||||
}else if (RemoteModeEnum.HAND_MOVEMENT.getType().equals(remoteRobotDetail.getRemoteMode())) {
|
||||
handMovementDetail.add(remoteRobotDetail);
|
||||
}else {
|
||||
freeDetail.add(remoteRobotDetail);
|
||||
}
|
||||
remoteRobotDTO.setRobotList(robotList);
|
||||
}
|
||||
|
||||
if (ObjectUtil.isNotEmpty(stopMapIds) && stopMapIds.contains(positionMapDO.getId())) {
|
||||
remoteRobotDTO.setIsStop(ZeroOneEnum.ZERO.getType());
|
||||
}
|
||||
automatic.setRemoteMode(RemoteModeEnum.AUTOMATIC.getType());
|
||||
automatic.setRobotQuantity(automaticDetail.size());
|
||||
automatic.setRobotList(automaticDetail);
|
||||
|
||||
return remoteRobotDTO;
|
||||
handMovement.setRemoteMode(RemoteModeEnum.HAND_MOVEMENT.getType());
|
||||
handMovement.setRobotQuantity(handMovementDetail.size());
|
||||
handMovement.setRobotList(handMovementDetail);
|
||||
|
||||
free.setRemoteMode(RemoteModeEnum.FREE.getType());
|
||||
free.setRobotQuantity(freeDetail.size());
|
||||
free.setRobotList(freeDetail);
|
||||
|
||||
return Arrays.asList(automatic,handMovement,free);
|
||||
}
|
||||
}
|
||||
|
@ -199,4 +199,11 @@ public interface RobotInformationService extends IService<RobotInformationDO> {
|
||||
* @return
|
||||
*/
|
||||
Boolean checkRobotElectricity(RobotInformationDO information, CommonConfigDO commonConfig);
|
||||
|
||||
/**
|
||||
* 根据车辆编号查询
|
||||
* @param robotNos
|
||||
* @return
|
||||
*/
|
||||
List<RobotInformationDO> getRobotInformationByRobotNos(List<String> robotNos);
|
||||
}
|
||||
|
@ -1392,6 +1392,12 @@ public class RobotInformationServiceImpl extends ServiceImpl<RobotInformationMap
|
||||
return checkElectricity(chargeConfig, robotInformation, dataPoseDTO);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<RobotInformationDO> getRobotInformationByRobotNos(List<String> robotNos) {
|
||||
return informationMapper.selectList(new LambdaQueryWrapperX<RobotInformationDO>()
|
||||
.in(RobotInformationDO::getRobotNo, robotNos));
|
||||
}
|
||||
|
||||
private Boolean checkElectricity(CommonConfigVO chargeConfig, RobotInformationDO robot, RobotStatusDataPoseDTO dataPoseDTO) {
|
||||
String chargeModelKey = RobotTaskChcheConstant.ROBOT_CHARGE_MODEL + robot.getRobotNo();
|
||||
Object chargeModelCache = redisUtil.get(chargeModelKey);
|
||||
|
Loading…
Reference in New Issue
Block a user