远遥暂停车辆/恢复
This commit is contained in:
parent
ae3f3f7317
commit
b0a5dc3b35
@ -4,15 +4,16 @@ import cn.iocoder.yudao.framework.common.pojo.CommonResult;
|
||||
import cn.iocoder.yudao.module.remote.controller.admin.robot.dto.PositionMapRespDTO;
|
||||
import cn.iocoder.yudao.module.remote.service.robot.RemoteRobotService;
|
||||
import cn.iocoder.yudao.module.system.api.remote.dto.RemoteRobotDTO;
|
||||
import cn.iocoder.yudao.module.system.api.remote.dto.RemoteRobotStatusDTO;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.Parameter;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.security.access.prepost.PreAuthorize;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import java.util.List;
|
||||
|
||||
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
|
||||
@ -33,5 +34,38 @@ public class RemoteRobotController {
|
||||
return success(list);
|
||||
}
|
||||
|
||||
@GetMapping("/emergencyStopOrRecovery")
|
||||
@Operation(summary = "一键急停or一键恢复地图上所有AGV")
|
||||
@Parameter(name = "type", description = "类型(1:停止, 0:恢复)", required = true, example = "1024")
|
||||
@PreAuthorize("@ss.hasPermission('system:position-map:emergencyStopOrRecovery')")
|
||||
public CommonResult<Boolean> remoteEmergencyStopOrRecovery(@RequestParam("id") Long id, @RequestParam("type") Integer type) {
|
||||
remoteRobotService.remoteEmergencyStopOrRecovery(id,type);
|
||||
return success(true);
|
||||
}
|
||||
|
||||
@PostMapping("/getRobotRemoteStatus")
|
||||
@Operation(summary = "获取机器人远遥模式/急停/协控状态")
|
||||
public CommonResult<RemoteRobotStatusDTO> getRobotRemoteStatus(HttpServletRequest request) {
|
||||
return success(remoteRobotService.getRemoteRobotStatus(request));
|
||||
}
|
||||
|
||||
|
||||
@GetMapping("/stop")
|
||||
@Operation(summary = "暂停车辆")
|
||||
public CommonResult<Boolean> robotStop(@RequestParam("robotNo") String robotNo) {
|
||||
remoteRobotService.robotStop(robotNo);
|
||||
return success(true);
|
||||
}
|
||||
|
||||
|
||||
@GetMapping("/recovery")
|
||||
@Operation(summary = "恢复车辆")
|
||||
public CommonResult<Boolean> recovery(@RequestParam("robotNo") String robotNo) {
|
||||
remoteRobotService.recovery(robotNo);
|
||||
return success(true);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
@ -2,9 +2,43 @@ package cn.iocoder.yudao.module.remote.service.robot;
|
||||
|
||||
import cn.iocoder.yudao.module.remote.controller.admin.robot.dto.PositionMapRespDTO;
|
||||
import cn.iocoder.yudao.module.system.api.remote.dto.RemoteRobotDTO;
|
||||
import cn.iocoder.yudao.module.system.api.remote.dto.RemoteRobotStatusDTO;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import java.util.List;
|
||||
|
||||
public interface RemoteRobotService {
|
||||
/**
|
||||
* 获取地图区域对应的机器人信息
|
||||
* @param positionMapRespDTO
|
||||
* @return
|
||||
*/
|
||||
List<RemoteRobotDTO> remoteGetAreaRobot(PositionMapRespDTO positionMapRespDTO);
|
||||
|
||||
/**
|
||||
* 键急停or一键恢复地图上所有AGV
|
||||
* @param id
|
||||
* @param type
|
||||
*/
|
||||
void remoteEmergencyStopOrRecovery(Long id, Integer type);
|
||||
|
||||
/**
|
||||
* 获取机器人远遥模式/急停/协控状态
|
||||
* @param request
|
||||
* @return
|
||||
*/
|
||||
RemoteRobotStatusDTO getRemoteRobotStatus(HttpServletRequest request);
|
||||
|
||||
/**
|
||||
* 暂停车辆
|
||||
* @param robotNo
|
||||
* @return
|
||||
*/
|
||||
void robotStop(String robotNo);
|
||||
|
||||
/**
|
||||
* 恢复车辆
|
||||
* @param robotNo
|
||||
*/
|
||||
void recovery(String robotNo);
|
||||
}
|
||||
|
@ -1,14 +1,22 @@
|
||||
package cn.iocoder.yudao.module.remote.service.robot;
|
||||
|
||||
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
|
||||
import cn.iocoder.yudao.module.remote.controller.admin.robot.dto.PositionMapRespDTO;
|
||||
import cn.iocoder.yudao.module.remote.util.IpUtils;
|
||||
import cn.iocoder.yudao.module.system.api.remote.RemoteRobotApi;
|
||||
import cn.iocoder.yudao.module.system.api.remote.dto.RemoteRobotDTO;
|
||||
import cn.iocoder.yudao.module.system.api.remote.dto.RemoteRobotStatusDTO;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import java.util.List;
|
||||
|
||||
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception0;
|
||||
import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.PATH_PLANNING_NOT_EXISTS;
|
||||
import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.TASK_COMMONG_FAIL;
|
||||
|
||||
@Slf4j
|
||||
@Service
|
||||
public class RemoteRobotServiceImpl implements RemoteRobotService{
|
||||
@ -16,8 +24,62 @@ public class RemoteRobotServiceImpl implements RemoteRobotService{
|
||||
@Resource
|
||||
private RemoteRobotApi remoteRobotApi;
|
||||
|
||||
/**
|
||||
* 获取地图区域对应的机器人信息
|
||||
* @param positionMapRespDTO
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public List<RemoteRobotDTO> remoteGetAreaRobot(PositionMapRespDTO positionMapRespDTO) {
|
||||
return remoteRobotApi.remoteGetAreaRobot(positionMapRespDTO.getId());
|
||||
}
|
||||
|
||||
/**
|
||||
* 一键急停or一键恢复地图上所有AGV
|
||||
* @param id
|
||||
* @param type
|
||||
*/
|
||||
@Override
|
||||
public void remoteEmergencyStopOrRecovery(Long id, Integer type) {
|
||||
CommonResult<Boolean> result = remoteRobotApi.remoteEmergencyStopOrRecovery(id,type);
|
||||
if (!result.isSuccess()){
|
||||
throw exception0(TASK_COMMONG_FAIL.getCode(), result.getMsg());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取机器人远遥模式/急停/协控状态
|
||||
* @param request
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public RemoteRobotStatusDTO getRemoteRobotStatus(HttpServletRequest request) {
|
||||
String ip = IpUtils.getIp(request);
|
||||
return remoteRobotApi.getRemoteRobotStatus(ip);
|
||||
}
|
||||
|
||||
/**
|
||||
* 暂停机器人
|
||||
* @param robotNo
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public void robotStop(String robotNo) {
|
||||
CommonResult<Boolean> result = remoteRobotApi.robotStop(robotNo);
|
||||
if (!result.isSuccess()){
|
||||
throw exception0(TASK_COMMONG_FAIL.getCode(), result.getMsg());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 恢复车辆
|
||||
* @param robotNo
|
||||
*/
|
||||
@Override
|
||||
public void recovery(String robotNo) {
|
||||
CommonResult<Boolean> result = remoteRobotApi.recovery(robotNo);
|
||||
if (!result.isSuccess()){
|
||||
throw exception0(TASK_COMMONG_FAIL.getCode(), result.getMsg());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -30,7 +30,7 @@ public class IpUtils
|
||||
ip = request.getRemoteAddr();
|
||||
}
|
||||
if (ip.equals("0:0:0:0:0:0:0:1")) {
|
||||
ip = "localhost";
|
||||
ip = "127.0.0.1";
|
||||
}
|
||||
return ip;
|
||||
}
|
||||
|
@ -1,6 +1,8 @@
|
||||
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.enums.ApiConstants;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
@ -19,4 +21,20 @@ public interface RemoteRobotApi {
|
||||
@PostMapping(PREFIX + "/remoteGetAreaRobot")
|
||||
@Operation(summary = "获取地图区域对应的机器人信息")
|
||||
List<RemoteRobotDTO> remoteGetAreaRobot(@RequestParam(value = "mapId",defaultValue = "-1") Long mapId);
|
||||
|
||||
@PostMapping(PREFIX + "/remoteEmergencyStopOrRecovery")
|
||||
@Operation(summary = "一键急停or一键恢复地图上所有AGV")
|
||||
CommonResult<Boolean> remoteEmergencyStopOrRecovery(@RequestParam(value = "mapId") Long mapId, @RequestParam(value = "type") Integer type);
|
||||
|
||||
@PostMapping(PREFIX + "/getRemoteRobotStatus")
|
||||
@Operation(summary = "获取机器人远遥模式/急停/协控状态")
|
||||
RemoteRobotStatusDTO getRemoteRobotStatus(@RequestParam(value = "ip") String ip);
|
||||
|
||||
@PostMapping(PREFIX + "/robotStop")
|
||||
@Operation(summary = "暂停机器人")
|
||||
CommonResult<Boolean> robotStop(@RequestParam(value = "robotNo") String robotNo);
|
||||
|
||||
@PostMapping(PREFIX + "/recovery")
|
||||
@Operation(summary = "恢复机器人")
|
||||
CommonResult<Boolean> recovery(@RequestParam(value = "robotNo") String robotNo);
|
||||
}
|
||||
|
@ -0,0 +1,25 @@
|
||||
package cn.iocoder.yudao.module.system.api.remote.dto;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
@Data
|
||||
@NoArgsConstructor
|
||||
public class RemoteRobotStatusDTO {
|
||||
|
||||
@Schema(description = "AGV编号")
|
||||
private String robotNo;
|
||||
|
||||
@Schema(description = "车辆是否暂停(0:已经暂停, 1:没暂停)")
|
||||
private Integer isStop = 1;
|
||||
|
||||
@Schema(description = "远遥模式(0:自动模式, 1:手动模式, 2:自由模式)")
|
||||
private Integer remoteMode = 0;
|
||||
|
||||
@Schema(description = "协控(0:关闭协控, 1:开启协控)")
|
||||
private Integer collaborativeControl = 0;
|
||||
|
||||
@Schema(description = "是否可以点击: 任务完成(0:可以点, 1:不能点任务完成)")
|
||||
private Integer clickTaskDone = 1;
|
||||
}
|
@ -195,6 +195,7 @@ public interface ErrorCodeConstants {
|
||||
ErrorCode ROBOT_NOT_FOUND_FREE_CHARGING_STATION = new ErrorCode(1-002-034-007, "没有空闲的充电桩");
|
||||
ErrorCode ROBOT_HAVE_DOING_TASK = new ErrorCode(1-002-034-010, "车辆有处理中的任务,不允许修改/删除车辆编号和Mac地址");
|
||||
ErrorCode ROBOT_REJECTION = new ErrorCode(1-002-034-011, "车辆已锁定");
|
||||
ErrorCode ROBOT_DOING_REMOTE = new ErrorCode(1-002-034-012, "车辆目前远遥控制中,不能修改车辆信息");
|
||||
|
||||
// ========== 机器人任务主表 1-002-035-000 ==========
|
||||
ErrorCode TASK_NOT_EXISTS = new ErrorCode(1-002-035-001, "车辆任务主表不存在");
|
||||
@ -216,6 +217,7 @@ public interface ErrorCodeConstants {
|
||||
ErrorCode TASK_RELEASE_LOCATION_HAVE_OTHER_TASK = new ErrorCode(1-002-035-109, "放货库位已经分配了其他任务");
|
||||
ErrorCode TASK_CREATE_FAIL = new ErrorCode(1-002-035-110, "任务创建失败:");
|
||||
ErrorCode ROBOT_DO_TASK_FAIL = new ErrorCode(1-002-035-112, "车机反馈不能接任务");
|
||||
ErrorCode TASK_COMMONG_FAIL = new ErrorCode(1-002-035-113, "下发失败");
|
||||
|
||||
// ========== 机器人任务明细 1-002-036-000 ==========
|
||||
ErrorCode TASK_DETAIL_NOT_EXISTS = new ErrorCode(1-002-036-001, "车辆任务明细不存在");
|
||||
@ -271,6 +273,8 @@ public interface ErrorCodeConstants {
|
||||
ErrorCode TASK_PROCEED_NOT_EXISTS = new ErrorCode(1_002_051_001, "车辆衔接任务不存在");
|
||||
// ========== 车辆(地图)急停记录 1_002_052_001 ==========
|
||||
ErrorCode MAP_STOP_NOT_EXISTS = new ErrorCode(1_002_052_001, "车辆(地图)急停记录不存在");
|
||||
ErrorCode ROBOT_ALREADY_STOP = new ErrorCode(1_002_052_002, "车辆已经暂停");
|
||||
ErrorCode ROBOT_ALREADY_RECOVERY = new ErrorCode(1_002_052_003, "车辆已经恢复");
|
||||
// ========== 远遥设备信息 1_002_053_001 ==========
|
||||
ErrorCode CONTROLLER_INFORMATION_NOT_EXISTS = new ErrorCode(1_002_053_001, "远遥设备信息不存在");
|
||||
|
||||
|
@ -1,7 +1,11 @@
|
||||
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.service.positionmap.PositionMapService;
|
||||
import cn.iocoder.yudao.module.system.service.remote.RemoteControllerInformationService;
|
||||
import cn.iocoder.yudao.module.system.service.robot.mapstop.RobotMapStopService;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
@ -14,9 +18,15 @@ import java.util.List;
|
||||
@Validated
|
||||
public class RemoteRobotApiImpl implements RemoteRobotApi{
|
||||
|
||||
@Resource
|
||||
private RobotMapStopService mapStopService;
|
||||
|
||||
@Resource
|
||||
private PositionMapService positionMapService;
|
||||
|
||||
@Resource
|
||||
private RemoteControllerInformationService controllerInformationService;
|
||||
|
||||
/**
|
||||
* 远遥获取地图和车辆信息
|
||||
* @param mapId
|
||||
@ -27,5 +37,48 @@ public class RemoteRobotApiImpl implements RemoteRobotApi{
|
||||
return positionMapService.getRemoteAreaRobotByMapId(mapId);
|
||||
}
|
||||
|
||||
/**
|
||||
* 远遥车辆暂停
|
||||
* @param mapId
|
||||
* @param type
|
||||
*/
|
||||
@Override
|
||||
public CommonResult<Boolean> remoteEmergencyStopOrRecovery(Long mapId, Integer type) {
|
||||
positionMapService.emergencyStopOrRecovery(mapId,type,true);
|
||||
return CommonResult.success(true);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取机器人远遥模式/急停/协控状态
|
||||
* @param ip
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public RemoteRobotStatusDTO getRemoteRobotStatus(String remoteIp) {
|
||||
return controllerInformationService.getRemoteRobotStatus(remoteIp);
|
||||
}
|
||||
|
||||
/**
|
||||
* 远遥暂停车辆
|
||||
* @param robotNo
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public CommonResult<Boolean> robotStop(String robotNo) {
|
||||
mapStopService.remoteStopRobot(robotNo);
|
||||
return CommonResult.success(true);
|
||||
}
|
||||
|
||||
/**
|
||||
* 远遥恢复车辆
|
||||
* @param robotNo
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public CommonResult<Boolean> recovery(String robotNo) {
|
||||
mapStopService.remoteRecoveryRobot(robotNo);
|
||||
return CommonResult.success(true);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
@ -58,7 +58,7 @@ public class PositionMapController {
|
||||
@Parameter(name = "type", description = "类型(1:停止, 0:恢复)", required = true, example = "1024")
|
||||
@PreAuthorize("@ss.hasPermission('system:position-map:emergencyStopOrRecovery')")
|
||||
public CommonResult<Boolean> emergencyStopOrRecovery(@RequestParam("id") Long id, @RequestParam("type") Integer type) {
|
||||
positionMapService.emergencyStopOrRecovery(id,type);
|
||||
positionMapService.emergencyStopOrRecovery(id,type,false);
|
||||
return success(true);
|
||||
}
|
||||
|
||||
|
@ -25,7 +25,7 @@ public class UserOperationLogDO extends BaseDO {
|
||||
/**
|
||||
* 主键ID
|
||||
*/
|
||||
@TableId
|
||||
@TableId(type = IdType.ASSIGN_ID)
|
||||
private Long id;
|
||||
/**
|
||||
* 操作人员
|
||||
|
@ -32,4 +32,10 @@ public interface RobotMapStopMapper extends BaseMapperX<RobotMapStopDO> {
|
||||
* @param mapId
|
||||
*/
|
||||
void deleteRobotMapStopByMapId(@Param("mapId") Long mapId);
|
||||
|
||||
/**
|
||||
* 根据车辆编号删除
|
||||
* @param robotNos
|
||||
*/
|
||||
void deleteRobotMapStopByRobotNos(@Param("robotNos") List<String> robotNos);
|
||||
}
|
@ -97,7 +97,7 @@ public interface PositionMapService extends IService<PositionMapDO> {
|
||||
*
|
||||
* @param id
|
||||
*/
|
||||
void emergencyStopOrRecovery(Long id,Integer type);
|
||||
void emergencyStopOrRecovery(Long id,Integer type,Boolean isRemote);
|
||||
|
||||
/**
|
||||
* 获取所有地图
|
||||
|
@ -344,7 +344,7 @@ public class PositionMapServiceImpl extends ServiceImpl<PositionMapMapper, Posit
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void emergencyStopOrRecovery(Long id, Integer type) {
|
||||
public void emergencyStopOrRecovery(Long id, Integer type,Boolean isRemote) {
|
||||
// 先获取当前地图上的所有AGV信息
|
||||
PositionMapDO positionMapDO = positionMapMapper.selectById(id);
|
||||
|
||||
@ -358,14 +358,26 @@ public class PositionMapServiceImpl extends ServiceImpl<PositionMapMapper, Posit
|
||||
robotNos = informationService.getRobotByFloorAndArea(String.valueOf(positionMapDO.getFloor()), positionMapDO.getArea());
|
||||
robotSimulationPose.setCommandType(RobotCommandTypeEnum.EMERGENCY_STOP.getType());
|
||||
str = RobotCommandTypeEnum.EMERGENCY_STOP.getMsg();
|
||||
mapStr = "一键暂停 " + mapStr;
|
||||
if (isRemote) {
|
||||
mapStr = "远遥一键暂停 " + mapStr;
|
||||
}else {
|
||||
mapStr = "一键暂停 " + mapStr;
|
||||
}
|
||||
|
||||
} else {
|
||||
//恢复
|
||||
robotNos = robotMapStopService.getStopRobotNoByMapIds(id);
|
||||
robotSimulationPose.setCommandType(RobotCommandTypeEnum.RECOVERY.getType());
|
||||
str = RobotCommandTypeEnum.RECOVERY.getMsg();
|
||||
mapStr = "一键恢复 " + mapStr;
|
||||
if (isRemote) {
|
||||
mapStr = "远遥一键恢复 " + mapStr;
|
||||
}else {
|
||||
mapStr = "一键恢复 " + mapStr;
|
||||
}
|
||||
robotMapStopService.deleteRobotMapStopByMapId(id);
|
||||
if (ObjectUtil.isNotEmpty(robotNos)) {
|
||||
robotMapStopService.deleteRobotMapStopByRobotNos(robotNos);
|
||||
}
|
||||
}
|
||||
|
||||
if (ObjectUtil.isEmpty(robotNos)) {
|
||||
@ -380,23 +392,14 @@ public class PositionMapServiceImpl extends ServiceImpl<PositionMapMapper, Posit
|
||||
robotMapStopService.createMapStop(robotMapStopSave);
|
||||
}
|
||||
|
||||
sendEmergencyStopOrRecoveryToRobot(robotSimulationPose, robotNos, str);
|
||||
informationService.sendEmergencyStopOrRecoveryToRobot(robotSimulationPose, robotNos, str);
|
||||
UserOperationLogSaveReqVO operationLog = UserOperationLogSaveReqVO.builder()
|
||||
.operateAction(mapStr)
|
||||
.nickName(SecurityFrameworkUtils.getLoginUserNickname()).build();
|
||||
userOperationLogService.createUserOperationLog(operationLog);
|
||||
}
|
||||
|
||||
public void sendEmergencyStopOrRecoveryToRobot(RobotSimulationPoseDTO robotSimulationPose, List<String> robotNos, String str) {
|
||||
for (String robotNo : robotNos) {
|
||||
String mac = informationService.getMacByRobotNo(robotNo);
|
||||
commonApi.commonMethod(robotSimulationPose, RobotTopicConstant.ROBOT_COMMAND_TOPIC + mac);
|
||||
UserOperationLogSaveReqVO operationLog = UserOperationLogSaveReqVO.builder()
|
||||
.operateAction(str + robotNo)
|
||||
.nickName(SecurityFrameworkUtils.getLoginUserNickname()).build();
|
||||
userOperationLogService.createUserOperationLog(operationLog);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public List<PositionMapDO> getAllMap() {
|
||||
|
@ -4,6 +4,7 @@ import java.util.*;
|
||||
import javax.validation.*;
|
||||
|
||||
import cn.iocoder.yudao.module.system.api.remote.dto.LoginCheckDTO;
|
||||
import cn.iocoder.yudao.module.system.api.remote.dto.RemoteRobotStatusDTO;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.remote.vo.RemoteControllerInformationPageReqVO;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.remote.vo.RemoteControllerInformationSaveReqVO;
|
||||
import cn.iocoder.yudao.module.system.dal.dataobject.remote.RemoteControllerInformationDO;
|
||||
@ -74,4 +75,17 @@ public interface RemoteControllerInformationService extends IService<RemoteContr
|
||||
*/
|
||||
List<RemoteControllerInformationDO> getAllRemoteController();
|
||||
|
||||
/**
|
||||
* 获取机器人远遥模式/急停/协控状态
|
||||
* @param ip
|
||||
* @return
|
||||
*/
|
||||
RemoteRobotStatusDTO getRemoteRobotStatus(String ip);
|
||||
|
||||
/**
|
||||
* 根据机器人编号查询
|
||||
* @param robotNo
|
||||
* @return
|
||||
*/
|
||||
RemoteControllerInformationDO getRemoteControllerByRobotNo(String robotNo);
|
||||
}
|
||||
|
@ -4,13 +4,21 @@ import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.iocoder.yudao.framework.common.util.servlet.ServletUtils;
|
||||
import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
|
||||
import cn.iocoder.yudao.module.system.api.remote.dto.LoginCheckDTO;
|
||||
import cn.iocoder.yudao.module.system.api.remote.dto.RemoteRobotStatusDTO;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.log.vo.UserOperationLogSaveReqVO;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.remote.vo.RemoteControllerInformationPageReqVO;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.remote.vo.RemoteControllerInformationSaveReqVO;
|
||||
import cn.iocoder.yudao.module.system.dal.dataobject.log.RobotTaskDetailActionLogDO;
|
||||
import cn.iocoder.yudao.module.system.dal.dataobject.remote.RemoteControllerInformationDO;
|
||||
import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotInformationDO;
|
||||
import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotMapStopDO;
|
||||
import cn.iocoder.yudao.module.system.dal.mysql.remote.RemoteControllerInformationMapper;
|
||||
import cn.iocoder.yudao.module.system.enums.common.ZeroOneEnum;
|
||||
import cn.iocoder.yudao.module.system.enums.path.PathTaskTypeEnum;
|
||||
import cn.iocoder.yudao.module.system.enums.robot.actionlog.ActionStatusEnum;
|
||||
import cn.iocoder.yudao.module.system.service.log.RobotTaskDetailActionLogService;
|
||||
import cn.iocoder.yudao.module.system.service.log.UserOperationLogService;
|
||||
import cn.iocoder.yudao.module.system.service.robot.mapstop.RobotMapStopService;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
@ -45,6 +53,12 @@ public class RemoteControllerInformationServiceImpl extends ServiceImpl<RemoteCo
|
||||
@Resource
|
||||
private UserOperationLogService userOperationLogService;
|
||||
|
||||
@Resource
|
||||
private RobotMapStopService mapStopService;
|
||||
|
||||
@Resource
|
||||
private RobotTaskDetailActionLogService taskDetailActionLogService;
|
||||
|
||||
@Override
|
||||
public Long createControllerInformation(RemoteControllerInformationSaveReqVO createReqVO) {
|
||||
// 插入
|
||||
@ -147,5 +161,47 @@ public class RemoteControllerInformationServiceImpl extends ServiceImpl<RemoteCo
|
||||
.ne(RemoteControllerInformationDO::getRobotNo, ""));
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取机器人远遥模式/急停/协控状态
|
||||
* @param remoteIp
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public RemoteRobotStatusDTO getRemoteRobotStatus(String remoteIp) {
|
||||
RemoteControllerInformationDO information = controllerInformationMapper.selectOne(new LambdaQueryWrapper<RemoteControllerInformationDO>()
|
||||
.eq(RemoteControllerInformationDO::getRemoteIp, remoteIp)
|
||||
.last("limit 1"));
|
||||
if (ObjectUtil.isEmpty(information) || ObjectUtil.isEmpty(information.getRobotNo())) {
|
||||
return null;
|
||||
}
|
||||
RemoteRobotStatusDTO remoteRobotStatus = BeanUtils.toBean(information, RemoteRobotStatusDTO.class);
|
||||
List<RobotMapStopDO> robotMapStops = mapStopService.getStopRobotNoByRobotNo(information.getRobotNo());
|
||||
if (ObjectUtil.isNotEmpty(robotMapStops)) {
|
||||
remoteRobotStatus.setIsStop(ZeroOneEnum.ZERO.getType());
|
||||
}
|
||||
RobotTaskDetailActionLogDO actionLog = taskDetailActionLogService.getLastTaskByRobotNo(information.getRobotNo());
|
||||
if (ObjectUtil.isNotEmpty(actionLog) && !actionLog.getActionStatus().equals(ActionStatusEnum.DONE.getType())
|
||||
&& (PathTaskTypeEnum.TAKE_RELEASE.getType().equals(actionLog.getCommandType())
|
||||
|| PathTaskTypeEnum.TAKE.getType().equals(actionLog.getCommandType())
|
||||
|| PathTaskTypeEnum.RELEASE.getType().equals(actionLog.getCommandType())) ) {
|
||||
remoteRobotStatus.setClickTaskDone(ZeroOneEnum.ZERO.getType());
|
||||
}
|
||||
|
||||
return remoteRobotStatus;
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据车辆编号查询
|
||||
* @param robotNo
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public RemoteControllerInformationDO getRemoteControllerByRobotNo(String robotNo) {
|
||||
RemoteControllerInformationDO information = controllerInformationMapper.selectOne(new LambdaQueryWrapper<RemoteControllerInformationDO>()
|
||||
.eq(RemoteControllerInformationDO::getRobotNo, robotNo)
|
||||
.last("limit 1"));
|
||||
return information;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
@ -1,6 +1,7 @@
|
||||
package cn.iocoder.yudao.module.system.service.robot;
|
||||
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||
import cn.iocoder.yudao.module.mqtt.api.task.dto.RobotSimulationPoseDTO;
|
||||
import cn.iocoder.yudao.module.system.api.robot.dto.RobotStatusDTO;
|
||||
import cn.iocoder.yudao.module.system.api.robot.vo.RobotInformationVO;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.robot.vo.*;
|
||||
@ -166,4 +167,12 @@ public interface RobotInformationService extends IService<RobotInformationDO> {
|
||||
* @return
|
||||
*/
|
||||
List<String> getRobotByFloorAndArea(String floor, String area);
|
||||
|
||||
/**
|
||||
* 车辆一键暂停或启动
|
||||
* @param robotSimulationPose
|
||||
* @param robotNos
|
||||
* @param str
|
||||
*/
|
||||
void sendEmergencyStopOrRecoveryToRobot(RobotSimulationPoseDTO robotSimulationPose, List<String> robotNos, String str);
|
||||
}
|
||||
|
@ -18,6 +18,7 @@ import cn.iocoder.yudao.module.mqtt.api.path.task.TaskRobotNoLimittationAreaDTO;
|
||||
import cn.iocoder.yudao.module.mqtt.api.path.task.TaskToPathPlanningDTO;
|
||||
import cn.iocoder.yudao.module.mqtt.api.task.dto.RobotAcceptTaskDTO;
|
||||
import cn.iocoder.yudao.module.mqtt.api.task.dto.RobotRcsHeartBeatDTO;
|
||||
import cn.iocoder.yudao.module.mqtt.api.task.dto.RobotSimulationPoseDTO;
|
||||
import cn.iocoder.yudao.module.mqtt.enums.task.ExecutionTypeEnum;
|
||||
import cn.iocoder.yudao.module.system.api.robot.RequestProcessor;
|
||||
import cn.iocoder.yudao.module.system.api.robot.dto.FloorZoneDTO;
|
||||
@ -41,6 +42,7 @@ import cn.iocoder.yudao.module.system.dal.dataobject.informationmapassociation.I
|
||||
import cn.iocoder.yudao.module.system.dal.dataobject.log.RobotTaskDetailActionLogDO;
|
||||
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.remote.RemoteControllerInformationDO;
|
||||
import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotInformationDO;
|
||||
import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotModelDO;
|
||||
import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotTaskDO;
|
||||
@ -50,6 +52,7 @@ import cn.iocoder.yudao.module.system.dal.mysql.houselocation.WareHouseLocationM
|
||||
import cn.iocoder.yudao.module.system.dal.mysql.information.DeviceInformationMapper;
|
||||
import cn.iocoder.yudao.module.system.dal.mysql.positionmap.PositionMapItemMapper;
|
||||
import cn.iocoder.yudao.module.system.dal.mysql.positionmap.PositionMapMapper;
|
||||
import cn.iocoder.yudao.module.system.dal.mysql.remote.RemoteControllerInformationMapper;
|
||||
import cn.iocoder.yudao.module.system.dal.mysql.robot.RobotInformationMapper;
|
||||
import cn.iocoder.yudao.module.system.dal.mysql.robot.RobotModelMapper;
|
||||
import cn.iocoder.yudao.module.system.dal.mysql.robot.RobotTaskDetailMapper;
|
||||
@ -71,6 +74,7 @@ import cn.iocoder.yudao.module.system.service.informationmapassociation.Informat
|
||||
import cn.iocoder.yudao.module.system.service.log.RobotTaskDetailActionLogService;
|
||||
import cn.iocoder.yudao.module.system.service.log.UserOperationLogService;
|
||||
import cn.iocoder.yudao.module.system.service.positionmap.PositionMapItemService;
|
||||
import cn.iocoder.yudao.module.system.service.remote.RemoteControllerInformationService;
|
||||
import cn.iocoder.yudao.module.system.service.robot.camera.RobotCameraService;
|
||||
import cn.iocoder.yudao.module.system.service.robot.pathplanning.RobotPathPlanningService;
|
||||
import cn.iocoder.yudao.module.system.service.robot.proceed.RobotTaskProceedService;
|
||||
@ -174,6 +178,10 @@ public class RobotInformationServiceImpl extends ServiceImpl<RobotInformationMap
|
||||
@Resource
|
||||
private RobotCameraService cameraService;
|
||||
|
||||
|
||||
@Resource
|
||||
private RemoteControllerInformationMapper controllerInformationMapper;
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public Long createInformation(RobotInformationSaveReqVO createReqVO) {
|
||||
@ -246,6 +254,13 @@ public class RobotInformationServiceImpl extends ServiceImpl<RobotInformationMap
|
||||
validateInformationExists(updateReqVO.getId());
|
||||
RobotInformationDO robotInformationDO = informationMapper.selectById(updateReqVO.getId());
|
||||
|
||||
RemoteControllerInformationDO remoteControllerInformation = controllerInformationMapper.selectOne(new LambdaQueryWrapper<RemoteControllerInformationDO>()
|
||||
.eq(RemoteControllerInformationDO::getRobotNo, robotInformationDO.getRobotNo())
|
||||
.last("limit 1"));
|
||||
if (ObjectUtil.isNotEmpty(remoteControllerInformation)) {
|
||||
throw exception(ROBOT_DOING_REMOTE);
|
||||
}
|
||||
|
||||
cameraService.deleteCameraByRobotNo(robotInformationDO.getRobotNo());
|
||||
|
||||
if (!updateReqVO.getRobotNo().equals(robotInformationDO.getRobotNo())
|
||||
@ -1229,5 +1244,23 @@ public class RobotInformationServiceImpl extends ServiceImpl<RobotInformationMap
|
||||
return list;
|
||||
}
|
||||
|
||||
/**
|
||||
* 车辆一键暂停或启动
|
||||
* @param robotSimulationPose
|
||||
* @param robotNos
|
||||
* @param str
|
||||
*/
|
||||
@Override
|
||||
public void sendEmergencyStopOrRecoveryToRobot(RobotSimulationPoseDTO robotSimulationPose, List<String> robotNos, String str) {
|
||||
for (String robotNo : robotNos) {
|
||||
String mac = getMacByRobotNo(robotNo);
|
||||
commonApi.commonMethod(robotSimulationPose, RobotTopicConstant.ROBOT_COMMAND_TOPIC + mac);
|
||||
UserOperationLogSaveReqVO operationLog = UserOperationLogSaveReqVO.builder()
|
||||
.operateAction(str + robotNo)
|
||||
.nickName(SecurityFrameworkUtils.getLoginUserNickname()).build();
|
||||
userOperationLogService.createUserOperationLog(operationLog);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
@ -94,4 +94,30 @@ public interface RobotMapStopService extends IService<RobotMapStopDO> {
|
||||
* @return
|
||||
*/
|
||||
List<RobotMapStopDO> getAllRobotMapStops(Integer type);
|
||||
|
||||
/**
|
||||
* 根据车辆编号查询暂停信息
|
||||
* @param robotNo
|
||||
* @return
|
||||
*/
|
||||
List<RobotMapStopDO> getStopRobotNoByRobotNo(String robotNo);
|
||||
|
||||
/**
|
||||
* 远遥暂停车辆
|
||||
* @param robotNo
|
||||
* @return
|
||||
*/
|
||||
void remoteStopRobot(String robotNo);
|
||||
|
||||
/**
|
||||
* 根据车辆编号删除
|
||||
* @param robotNos
|
||||
*/
|
||||
void deleteRobotMapStopByRobotNos(List<String> robotNos);
|
||||
|
||||
/**
|
||||
* 远遥恢复车辆
|
||||
* @param robotNo
|
||||
*/
|
||||
void remoteRecoveryRobot(String robotNo);
|
||||
}
|
||||
|
@ -2,15 +2,27 @@ package cn.iocoder.yudao.module.system.service.robot.mapstop;
|
||||
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||
import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
|
||||
import cn.iocoder.yudao.module.mqtt.api.task.dto.RobotSimulationPoseDTO;
|
||||
import cn.iocoder.yudao.module.system.api.robot.dto.FloorZoneDTO;
|
||||
import cn.iocoder.yudao.module.system.constant.robot.RobotTaskChcheConstant;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.log.vo.UserOperationLogSaveReqVO;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.robot.mapstop.RobotMapStopPageReqVO;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.robot.mapstop.RobotMapStopSaveReqVO;
|
||||
import cn.iocoder.yudao.module.system.dal.dataobject.positionmap.PositionMapItemDO;
|
||||
import cn.iocoder.yudao.module.system.dal.dataobject.positionmap.PositionMapDO;
|
||||
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.dal.mysql.robot.RobotMapStopMapper;
|
||||
import cn.iocoder.yudao.module.system.enums.common.ZeroOneEnum;
|
||||
import cn.iocoder.yudao.module.system.enums.item.PositionMapItemEnum;
|
||||
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.robot.RobotInformationService;
|
||||
import cn.iocoder.yudao.module.system.util.redis.RedisUtil;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
@ -18,13 +30,12 @@ import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageParam;
|
||||
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
|
||||
|
||||
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
|
||||
import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.MAP_STOP_NOT_EXISTS;
|
||||
import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*;
|
||||
|
||||
/**
|
||||
* 车辆(地图)急停记录 Service 实现类
|
||||
@ -38,6 +49,18 @@ public class RobotMapStopServiceImpl extends ServiceImpl<RobotMapStopMapper, Rob
|
||||
@Resource
|
||||
private RobotMapStopMapper mapStopMapper;
|
||||
|
||||
@Resource
|
||||
private RobotInformationService informationService;
|
||||
|
||||
@Resource
|
||||
private PositionMapMapper positionMapMapper;
|
||||
|
||||
@Resource
|
||||
private RedisUtil redisUtil;
|
||||
|
||||
@Resource
|
||||
private UserOperationLogService userOperationLogService;
|
||||
|
||||
@Override
|
||||
public Long createMapStop(RobotMapStopSaveReqVO createReqVO) {
|
||||
// 插入
|
||||
@ -96,7 +119,7 @@ public class RobotMapStopServiceImpl extends ServiceImpl<RobotMapStopMapper, Rob
|
||||
@Override
|
||||
public List<String> getStopRobotNoByMapIds(Long id) {
|
||||
List<RobotMapStopDO> positionMapItems = mapStopMapper.selectList(new LambdaQueryWrapperX<RobotMapStopDO>()
|
||||
.eq(RobotMapStopDO::getStopType, ZeroOneEnum.ONE.getType())
|
||||
.eq(RobotMapStopDO::getStopType, ZeroOneEnum.ZERO.getType())
|
||||
.eq(RobotMapStopDO::getPositionMapId, id));
|
||||
if (ObjectUtil.isEmpty(positionMapItems)) {
|
||||
return new ArrayList<>();
|
||||
@ -108,7 +131,6 @@ public class RobotMapStopServiceImpl extends ServiceImpl<RobotMapStopMapper, Rob
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param id
|
||||
* @param robotNos
|
||||
*/
|
||||
@ -144,4 +166,93 @@ public class RobotMapStopServiceImpl extends ServiceImpl<RobotMapStopMapper, Rob
|
||||
.eq(RobotMapStopDO::getStopType, type));
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<RobotMapStopDO> getStopRobotNoByRobotNo(String robotNo) {
|
||||
return mapStopMapper.selectList(new LambdaQueryWrapperX<RobotMapStopDO>()
|
||||
.eq(RobotMapStopDO::getStopType, ZeroOneEnum.ONE.getType())
|
||||
.eq(RobotMapStopDO::getRobotNo, robotNo));
|
||||
}
|
||||
|
||||
/**
|
||||
* 远遥暂停车辆
|
||||
*
|
||||
* @param robotNo
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public void remoteStopRobot(String robotNo) {
|
||||
List<RobotMapStopDO> stopRobotNoByRobotNo = getStopRobotNoByRobotNo(robotNo);
|
||||
if (ObjectUtil.isNotEmpty(stopRobotNoByRobotNo)) {
|
||||
throw exception(ROBOT_ALREADY_STOP);
|
||||
}
|
||||
|
||||
RobotSimulationPoseDTO robotSimulationPose = new RobotSimulationPoseDTO();
|
||||
robotSimulationPose.setCommandType(RobotCommandTypeEnum.EMERGENCY_STOP.getType());
|
||||
List<String> list = Arrays.asList(robotNo);
|
||||
informationService.sendEmergencyStopOrRecoveryToRobot(robotSimulationPose, list, "远遥暂停车辆");
|
||||
|
||||
String mac = informationService.getMacByRobotNo(robotNo);
|
||||
String floorAreaKey = RobotTaskChcheConstant.ROBOT_FLOOR_AREA + mac;
|
||||
Object o = redisUtil.get(floorAreaKey);
|
||||
|
||||
Long id = -1l;
|
||||
if (ObjectUtil.isNotEmpty(o)) {
|
||||
FloorZoneDTO floorZone = JSON.parseObject((String) o, FloorZoneDTO.class);
|
||||
PositionMapDO positionMap = positionMapMapper.selectOne(new LambdaQueryWrapperX<PositionMapDO>()
|
||||
.eq(PositionMapDO::getFloor, floorZone.getFloor())
|
||||
.eq(PositionMapDO::getArea, floorZone.getArea()));
|
||||
if (ObjectUtil.isNotEmpty(positionMap)) {
|
||||
id = positionMap.getId();
|
||||
}
|
||||
}
|
||||
|
||||
createRobotMapStop(id, list);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据车辆编号删除
|
||||
*
|
||||
* @param robotNos
|
||||
*/
|
||||
@Override
|
||||
public void deleteRobotMapStopByRobotNos(List<String> robotNos) {
|
||||
mapStopMapper.deleteRobotMapStopByRobotNos(robotNos);
|
||||
}
|
||||
|
||||
/**
|
||||
* 远遥恢复车辆
|
||||
*
|
||||
* @param robotNo
|
||||
*/
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void remoteRecoveryRobot(String robotNo) {
|
||||
List<RobotMapStopDO> stopRobotNoByRobotNo = getStopRobotNoByRobotNo(robotNo);
|
||||
if (ObjectUtil.isEmpty(stopRobotNoByRobotNo)) {
|
||||
throw exception(ROBOT_ALREADY_RECOVERY);
|
||||
}
|
||||
|
||||
RobotSimulationPoseDTO robotSimulationPose = new RobotSimulationPoseDTO();
|
||||
robotSimulationPose.setCommandType(RobotCommandTypeEnum.RECOVERY.getType());
|
||||
List<String> list = Arrays.asList(robotNo);
|
||||
informationService.sendEmergencyStopOrRecoveryToRobot(robotSimulationPose, list, "远遥恢复车辆");
|
||||
|
||||
deleteRobotMapStopByRobotNos(list);
|
||||
|
||||
List<RobotMapStopDO> mapStopDOList = mapStopMapper.selectList(new LambdaQueryWrapperX<RobotMapStopDO>()
|
||||
.eq(RobotMapStopDO::getPositionMapId, stopRobotNoByRobotNo.get(0).getPositionMapId()));
|
||||
//说明此时地图上没有其他被暂停的车辆了
|
||||
if (ObjectUtil.isNotEmpty(mapStopDOList) && mapStopDOList.size() == 1) {
|
||||
PositionMapDO positionMapDO = positionMapMapper.selectById(mapStopDOList.get(0).getPositionMapId());
|
||||
deleteRobotMapStopByMapId(mapStopDOList.get(0).getPositionMapId());
|
||||
UserOperationLogSaveReqVO operationLog = UserOperationLogSaveReqVO.builder()
|
||||
.operateAction(positionMapDO.getFloor() + "层" + positionMapDO.getArea() + " 地图上所有车辆已经恢复,所以把地图也设置为恢复")
|
||||
.nickName(SecurityFrameworkUtils.getLoginUserNickname()).build();
|
||||
userOperationLogService.createUserOperationLog(operationLog);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
@ -16,4 +16,16 @@
|
||||
where
|
||||
position_map_id = #{mapId}
|
||||
</delete>
|
||||
|
||||
<delete id="deleteRobotMapStopByRobotNos">
|
||||
delete
|
||||
from
|
||||
robot_map_stop
|
||||
where
|
||||
robot_no in
|
||||
<foreach collection="robotNos" item="robotNo" index="index" open="(" close=")"
|
||||
separator=",">
|
||||
#{robotNo}
|
||||
</foreach>
|
||||
</delete>
|
||||
</mapper>
|
Loading…
Reference in New Issue
Block a user