车辆信息更新处理暂停相关逻辑

This commit is contained in:
cbs 2025-04-24 09:48:48 +08:00
parent 55315e00d0
commit 97fa291198
19 changed files with 362 additions and 24 deletions

View File

@ -0,0 +1,45 @@
package cn.iocoder.yudao.module.remote.controller.admin.task;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.remote.service.task.RemoteTaskService;
import cn.iocoder.yudao.module.system.api.remote.dto.RemoteExceptionTaskListDTO;
import cn.iocoder.yudao.module.system.api.remote.dto.RemoteTaskDTO;
import io.swagger.v3.oas.annotations.Operation;
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 static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
@Tag(name = "管理后台 - 远遥任务")
@RestController
@RequestMapping("/remote/task")
@Validated
public class RemoteTaskController {
@Autowired
private RemoteTaskService remoteTaskService;
@PostMapping("/getExceptionTask")
@Operation(summary = "获取异常任务列表")
@PreAuthorize("@ss.hasPermission('remote:task:getExceptionTask')")
public CommonResult<PageResult<RemoteExceptionTaskListDTO>> getExceptionTask(@RequestBody RemoteTaskDTO remoteTaskDTO) {
PageResult<RemoteExceptionTaskListDTO> list = remoteTaskService.getExceptionTask(remoteTaskDTO);
return success(list);
}
/*@PostMapping("/setRemoteTaskDone")
@Operation(summary = "获取异常任务列表")
@PreAuthorize("@ss.hasPermission('remote:task:getExceptionTask')")
public CommonResult<Boolean> setRemoteTaskDone(@RequestBody RemoteTaskDTO remoteTaskDTO) {
remoteTaskService.setRemoteTaskDone(remoteTaskDTO);
return success(true);
}*/
}

View File

@ -1,11 +1,12 @@
package cn.iocoder.yudao.module.remote.framework.system;
import cn.iocoder.yudao.module.system.api.remote.RemoteExceptionTaskApi;
import cn.iocoder.yudao.module.system.api.remote.RemoteLoginApi;
import cn.iocoder.yudao.module.system.api.remote.RemoteRobotApi;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.annotation.Configuration;
@Configuration(proxyBeanMethods = false)
@EnableFeignClients(clients = {RemoteLoginApi.class, RemoteRobotApi.class})
@EnableFeignClients(clients = {RemoteLoginApi.class, RemoteRobotApi.class, RemoteExceptionTaskApi.class})
public class SystemConfiguration {
}

View File

@ -0,0 +1,10 @@
package cn.iocoder.yudao.module.remote.service.task;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.system.api.remote.dto.RemoteExceptionTaskListDTO;
import cn.iocoder.yudao.module.system.api.remote.dto.RemoteTaskDTO;
public interface RemoteTaskService {
PageResult<RemoteExceptionTaskListDTO> getExceptionTask(RemoteTaskDTO remoteTaskDTO);
}

View File

@ -0,0 +1,28 @@
package cn.iocoder.yudao.module.remote.service.task;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.system.api.remote.RemoteExceptionTaskApi;
import cn.iocoder.yudao.module.system.api.remote.dto.RemoteExceptionTaskListDTO;
import cn.iocoder.yudao.module.system.api.remote.dto.RemoteTaskDTO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
@Slf4j
@Service
public class RemoteTaskServiceImpl implements RemoteTaskService {
@Resource
private RemoteExceptionTaskApi remoteExceptionTaskApi;
/**
* 获取异常任务列表
* @param remoteTaskDTO
* @return
*/
@Override
public PageResult<RemoteExceptionTaskListDTO> getExceptionTask(RemoteTaskDTO remoteTaskDTO) {
return remoteExceptionTaskApi.getExceptionTask(remoteTaskDTO);
}
}

View File

@ -0,0 +1,27 @@
package cn.iocoder.yudao.module.system.api.remote;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.system.api.remote.dto.RemoteExceptionTaskListDTO;
import cn.iocoder.yudao.module.system.api.remote.dto.RemoteTaskDTO;
import cn.iocoder.yudao.module.system.enums.ApiConstants;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
@FeignClient(name = ApiConstants.NAME) // TODO 芋艿fallbackFactory =
@Tag(name = "RPC 服务 - 远遥任务相关")
public interface RemoteExceptionTaskApi {
String PREFIX = ApiConstants.PREFIX + "/remote";
/**
* 远遥查看异常列表
* @return
*/
@PostMapping(PREFIX + "/getExceptionTask")
@Operation(summary = "保存IP和端口")
PageResult<RemoteExceptionTaskListDTO> getExceptionTask(@RequestBody RemoteTaskDTO remoteTaskDTO);
}

View File

@ -0,0 +1,27 @@
package cn.iocoder.yudao.module.system.api.remote.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@Data
public class RemoteExceptionTaskListDTO {
@Schema(description = "主键ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "26224")
private Long id;
@Schema(description = "车辆编号")
private String robotNo ;
@Schema(description = "任务号")
private String taskNo;
@Schema(description = "取货库位编号")
private String fromLocationNo;
@Schema(description = "放货库位编号")
private String toLocationNo;
@Schema(description = "任务阶段(0:待执行、1前往取货、2取货中、3前往放货、4放货中、5结束、6移动中、7:正在充电、8:取消、9:人工完成、10:异常)")
private Long taskStage;
}

View File

@ -22,4 +22,10 @@ public class RemoteRobotStatusDTO {
@Schema(description = "是否可以点击: 任务完成(0:可以点, 1:不能点任务完成)")
private Integer clickTaskDone = 1;
@Schema(description = "车辆任务状态(3待命 , 其他都是任务中)")
private Integer robotStatus = 2;
@Schema(description = "任务模式0锁定、1正常")
private Integer robotTaskModel;
}

View File

@ -0,0 +1,14 @@
package cn.iocoder.yudao.module.system.api.remote.dto;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@Data
public class RemoteTaskDTO extends PageParam {
@Schema(description = "车辆编号")
private String robotNo ;
@Schema(description = "任务阶段(0:待执行、1前往取货、2取货中、3前往放货、4放货中、5结束、6移动中、7:正在充电、8:取消、9:人工完成、10:异常)")
private Long taskStage;
}

View File

@ -0,0 +1,33 @@
package cn.iocoder.yudao.module.system.api.remote;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.system.api.remote.dto.RemoteExceptionTaskListDTO;
import cn.iocoder.yudao.module.system.api.remote.dto.RemoteTaskDTO;
import cn.iocoder.yudao.module.system.service.robot.RobotTaskDetailService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
@Slf4j
@RestController // 提供 RESTful API 接口 Feign 调用
@Validated
public class RemoteExceptionTaskApiImpl implements RemoteExceptionTaskApi{
@Resource
private RobotTaskDetailService taskDetailService;
/**
* 远遥获取异常任务列表
* @param taskStage
* @param robotNo
* @return
*/
@Override
public PageResult<RemoteExceptionTaskListDTO> getExceptionTask(RemoteTaskDTO remoteTaskDTO) {
return taskDetailService.getRemoteExceptionTask(remoteTaskDTO);
}
}

View File

@ -57,7 +57,7 @@ public class RobotTaskPageReqVO extends PageParam {
@Schema(description = "任务状态(0:未开始、1执行中、2已完成、3已取消)", example = "2")
private Integer taskStatus;
@Schema(description = "任务阶段(0:待执行、1前往取货、2取货中、3运输中、4放货中、5结束)")
@Schema(description = "任务阶段(0:待执行、1前往取货、2取货中、3前往放货、4放货中、5结束、6移动中、7:正在充电、8:取消、9:人工完成、10:异常)")
private Long taskStage;
@Schema(description = "开始时间")

View File

@ -3,10 +3,14 @@ package cn.iocoder.yudao.module.system.dal.mysql.robot;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.module.system.api.remote.dto.RemoteExceptionTaskListDTO;
import cn.iocoder.yudao.module.system.api.remote.dto.RemoteTaskDTO;
import cn.iocoder.yudao.module.system.controller.admin.robot.detail.RobotDoingTaskDTO;
import cn.iocoder.yudao.module.system.controller.admin.robot.vo.RobotTaskDetailAddVO;
import cn.iocoder.yudao.module.system.controller.admin.robot.vo.RobotTaskDetailPageReqVO;
import cn.iocoder.yudao.module.system.controller.admin.robot.vo.RobotTaskPageReqVO;
import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotTaskDetailDO;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
@ -143,4 +147,14 @@ public interface RobotTaskDetailMapper extends BaseMapperX<RobotTaskDetailDO> {
* @return
*/
List<RobotDoingTaskDTO> getRobotDoingTaskNo();
/**
* 远遥查询异常任务列表
* @param mpPage
* @param pageReqVO
* @return
*/
IPage<RemoteExceptionTaskListDTO> selectRemoteExceptionTask(@Param("mpPage") IPage mpPage,
@Param("pageReqVO") RemoteTaskDTO pageReqVO);
}

View File

@ -364,6 +364,15 @@ public class PositionMapServiceImpl extends ServiceImpl<PositionMapMapper, Posit
mapStr = "一键暂停 " + mapStr;
}
//过滤已经暂停的
if (ObjectUtil.isNotEmpty(robotNos)) {
List<RobotMapStopDO> robotMapStopList = robotMapStopService.getStopRobotNoByRobotNoList(robotNos);
if (ObjectUtil.isNotEmpty(robotMapStopList)) {
List<String> stopRobotNos = robotMapStopList.stream().map(RobotMapStopDO::getRobotNo).collect(Collectors.toList());
robotNos.removeAll(stopRobotNos);
}
}
} else {
//恢复
robotNos = robotMapStopService.getStopRobotNoByMapIds(id);
@ -516,7 +525,6 @@ public class PositionMapServiceImpl extends ServiceImpl<PositionMapMapper, Posit
}
if (ObjectUtil.isNotEmpty(remoteMap) && ObjectUtil.isNotEmpty(remoteMap.get(robotNo))) {
System.out.println("---------" + JSON.toJSONString(remoteMap.get(robotNo)));
remoteRobotDetail.setRemoteMode(remoteMap.get(robotNo).getRemoteMode());
}
robotList.add(remoteRobotDetail);

View File

@ -223,6 +223,12 @@ public class RemoteControllerInformationServiceImpl extends ServiceImpl<RemoteCo
remoteRobotStatus.setClickTaskDone(ZeroOneEnum.ZERO.getType());
}
RobotInformationDO robotInformation = informationService.getInformationByRobotNo(information.getRobotNo());
if (RobotStatusEnum.STAND_BY.getType().equals(robotInformation.getRobotStatus())) {
remoteRobotStatus.setRobotStatus(RobotStatusEnum.STAND_BY.getType());
}
remoteRobotStatus.setRobotTaskModel(robotInformation.getRobotTaskModel());
return remoteRobotStatus;
}

View File

@ -45,20 +45,14 @@ import cn.iocoder.yudao.module.system.dal.dataobject.log.RobotTaskDetailActionLo
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;
import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotTaskDetailDO;
import cn.iocoder.yudao.module.system.dal.dataobject.robot.*;
import cn.iocoder.yudao.module.system.dal.dataobject.wait.MoveToWaitDO;
import cn.iocoder.yudao.module.system.dal.mysql.houselocation.WareHouseLocationMapper;
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;
import cn.iocoder.yudao.module.system.dal.mysql.robot.RobotTaskMapper;
import cn.iocoder.yudao.module.system.dal.mysql.robot.*;
import cn.iocoder.yudao.module.system.enums.common.ZeroOneEnum;
import cn.iocoder.yudao.module.system.enums.device.DeviceTypeEnum;
import cn.iocoder.yudao.module.system.enums.device.DeviceUseStatusEnum;
@ -72,6 +66,7 @@ import cn.iocoder.yudao.module.system.enums.robot.RobotTaskModelEnum;
import cn.iocoder.yudao.module.system.enums.robot.actionlog.ActionStatusEnum;
import cn.iocoder.yudao.module.system.enums.robot.charge.ChargeModelEnum;
import cn.iocoder.yudao.module.system.enums.robot.information.RobotStatisticsTypeEnum;
import cn.iocoder.yudao.module.system.enums.robot.task.RobotCommandTypeEnum;
import cn.iocoder.yudao.module.system.enums.robot.task.RobotTaskStageEnum;
import cn.iocoder.yudao.module.system.service.informationmapassociation.InformationMapAssociationService;
import cn.iocoder.yudao.module.system.service.log.RobotTaskDetailActionLogService;
@ -189,6 +184,9 @@ public class RobotInformationServiceImpl extends ServiceImpl<RobotInformationMap
@Resource
private RemoteControllerInformationMapper controllerInformationMapper;
@Resource
private RobotMapStopMapper mapStopMapper;
@Override
@Transactional(rollbackFor = Exception.class)
public Long createInformation(RobotInformationSaveReqVO createReqVO) {
@ -313,6 +311,16 @@ public class RobotInformationServiceImpl extends ServiceImpl<RobotInformationMap
// 更新
RobotInformationDO updateObj = BeanUtils.toBean(updateReqVO, RobotInformationDO.class);
informationMapper.updateById(updateObj);
if (!robotInformationDO.getRobotNo().equals(updateReqVO.getRobotNo())) {
List<RobotMapStopDO> robotMapStops = mapStopMapper.selectList(new LambdaQueryWrapperX<RobotMapStopDO>()
.eq(RobotMapStopDO::getRobotNo, robotInformationDO.getRobotNo()));
if (ObjectUtil.isNotEmpty(robotMapStops)) {
robotMapStops.forEach(v -> v.setRobotNo(updateReqVO.getRobotNo()));
mapStopMapper.updateById(robotMapStops);
}
}
// 更新AGV于地图关系表 -----
List<List<Long>> list = CollectionUtils.compareLists(
(CollUtil.isEmpty(robotInformationDO.getFloorAreaJson()) ? Collections.emptyList() : new ArrayList<>(robotInformationDO.getFloorAreaJson())),
@ -386,6 +394,9 @@ public class RobotInformationServiceImpl extends ServiceImpl<RobotInformationMap
// 删除
informationMapper.deleteById(id);
//释放暂停记录
releaseRobotStop(robotInformationDO);
List<RobotDimensionsDTO> RobotDimensions = informationMapper.selectRobotDimensions();
pathPlanningApi.synchronousLineObject(RobotDimensions, PathPlanningTopicConstant.SEND_ROBOT_DIMENSIONS);
@ -399,6 +410,40 @@ public class RobotInformationServiceImpl extends ServiceImpl<RobotInformationMap
redisUtil.del(floorAreaKey);
}
public void releaseRobotStop(RobotInformationDO robotInformationDO) {
List<RobotMapStopDO> robotMapStops = mapStopMapper.selectList(new LambdaQueryWrapperX<RobotMapStopDO>()
.eq(RobotMapStopDO::getRobotNo, robotInformationDO.getRobotNo()));
if (ObjectUtil.isEmpty(robotMapStops)) {
return;
}
RobotSimulationPoseDTO robotSimulationPose = new RobotSimulationPoseDTO();
robotSimulationPose.setCommandType(RobotCommandTypeEnum.RECOVERY.getType());
List<String> robotNoList = Arrays.asList(robotInformationDO.getRobotNo());
sendEmergencyStopOrRecoveryToRobot(robotSimulationPose, robotNoList, "删除车辆时恢复车辆");
mapStopMapper.deleteRobotMapStopByRobotNos(robotNoList);
Long positionMapId = null;
for (RobotMapStopDO robotMapStopDO : robotMapStops) {
if (ObjectUtil.isNotEmpty(robotMapStopDO.getPositionMapId()) && robotMapStopDO.getPositionMapId() > 0) {
positionMapId = robotMapStopDO.getPositionMapId();
}
}
if (ObjectUtil.isNotEmpty(positionMapId)) {
List<RobotMapStopDO> mapStopDOList = mapStopMapper.selectList(new LambdaQueryWrapperX<RobotMapStopDO>()
.eq(RobotMapStopDO::getPositionMapId, positionMapId));
//说明此时地图上没有其他被暂停的车辆了
if (ObjectUtil.isNotEmpty(mapStopDOList) && mapStopDOList.size() == 1) {
PositionMapDO positionMapDO = positionMapMapper.selectById(positionMapId);
mapStopMapper.deleteRobotMapStopByMapId(positionMapId);
UserOperationLogSaveReqVO operationLogs = UserOperationLogSaveReqVO.builder()
.operateAction(positionMapDO.getFloor() + "" + positionMapDO.getArea() + " 地图上所有车辆已经恢复,所以把地图也设置为恢复")
.nickName(SecurityFrameworkUtils.getLoginUserNickname()).build();
userOperationLogService.createUserOperationLog(operationLogs);
}
}
}
private void validateInformationExists(Long id) {
if (informationMapper.selectById(id) == null) {
throw exception(ROBOT_INFORMATION_NOT_EXISTS);
@ -1328,7 +1373,7 @@ public class RobotInformationServiceImpl extends ServiceImpl<RobotInformationMap
}
}
return checkElectricity(chargeConfig,robotInformation,dataPoseDTO);
return checkElectricity(chargeConfig, robotInformation, dataPoseDTO);
}
private Boolean checkElectricity(CommonConfigVO chargeConfig, RobotInformationDO robot, RobotStatusDataPoseDTO dataPoseDTO) {
@ -1347,15 +1392,15 @@ public class RobotInformationServiceImpl extends ServiceImpl<RobotInformationMap
} else if (ObjectUtil.isNotEmpty(chargeModelCache) && ChargeModelEnum.FULL.getType().equals((Integer) chargeModelCache)) {
robotEndElectricity = new BigDecimal(fullElectricity);
} else if (ObjectUtil.isNotEmpty(chargeModelCache) && ChargeModelEnum.CHANCE.getType().equals((Integer) chargeModelCache)
&& ObjectUtil.isNotEmpty(chargeConfig.getChanceChargeEnd())) {
&& ObjectUtil.isNotEmpty(chargeConfig.getChanceChargeEnd())) {
robotEndElectricity = new BigDecimal(String.valueOf(chargeConfig.getChanceChargeEnd()));
} else if (ObjectUtil.isNotEmpty(chargeConfig.getEndAutoCharge())){
} else if (ObjectUtil.isNotEmpty(chargeConfig.getEndAutoCharge())) {
robotEndElectricity = new BigDecimal(String.valueOf(chargeConfig.getEndAutoCharge()));
}
if (robotRemainingElectricity.compareTo(robotEndElectricity) >= 0) {
return true;
}else {
} else {
log.info("机器人正在充电,还没达到充电设置的电量,暂不能接任务:{} ", robot.getRobotNo());
}

View File

@ -3,6 +3,8 @@ package cn.iocoder.yudao.module.system.service.robot;
import javax.validation.*;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.system.api.remote.dto.RemoteExceptionTaskListDTO;
import cn.iocoder.yudao.module.system.api.remote.dto.RemoteTaskDTO;
import cn.iocoder.yudao.module.system.controller.admin.robot.detail.RobotDoingTaskDTO;
import cn.iocoder.yudao.module.system.controller.admin.robot.vo.RobotTaskDetailAddVO;
import cn.iocoder.yudao.module.system.controller.admin.robot.vo.RobotTaskDetailPageReqVO;
@ -108,4 +110,9 @@ public interface RobotTaskDetailService {
*/
List<RobotDoingTaskDTO> getRobotDoingTaskNo();
/**
* 获取远遥异常列表
* @return
*/
PageResult<RemoteExceptionTaskListDTO> getRemoteExceptionTask(RemoteTaskDTO remoteTaskDTO);
}

View File

@ -2,11 +2,11 @@ package cn.iocoder.yudao.module.system.service.robot;
import cn.hutool.core.util.ObjectUtil;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.framework.mybatis.core.util.MyBatisUtils;
import cn.iocoder.yudao.module.system.api.remote.dto.RemoteExceptionTaskListDTO;
import cn.iocoder.yudao.module.system.api.remote.dto.RemoteTaskDTO;
import cn.iocoder.yudao.module.system.controller.admin.robot.detail.RobotDoingTaskDTO;
import cn.iocoder.yudao.module.system.controller.admin.robot.vo.RobotTaskDetailAddVO;
import cn.iocoder.yudao.module.system.controller.admin.robot.vo.RobotTaskDetailPageReqVO;
import cn.iocoder.yudao.module.system.controller.admin.robot.vo.RobotTaskDetailRespVO;
import cn.iocoder.yudao.module.system.controller.admin.robot.vo.RobotTaskDetailSaveReqVO;
import cn.iocoder.yudao.module.system.controller.admin.robot.vo.*;
import cn.iocoder.yudao.module.system.dal.dataobject.log.RobotTaskDetailActionLogDO;
import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotTaskDO;
import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotTaskDetailDO;
@ -17,6 +17,7 @@ import cn.iocoder.yudao.module.system.enums.robot.RobotTaskDetailStatusEnum;
import cn.iocoder.yudao.module.system.enums.robot.RobotTaskStatusEnum;
import cn.iocoder.yudao.module.system.enums.robot.task.RobotTaskStageEnum;
import cn.iocoder.yudao.module.system.service.log.RobotTaskDetailActionLogService;
import com.baomidou.mybatisplus.core.metadata.IPage;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
@ -197,4 +198,17 @@ public class RobotTaskDetailServiceImpl implements RobotTaskDetailService {
public List<RobotDoingTaskDTO> getRobotDoingTaskNo() {
return taskDetailMapper.getRobotDoingTaskNo();
}
@Override
public PageResult<RemoteExceptionTaskListDTO> getRemoteExceptionTask(RemoteTaskDTO pageReqVO) {
IPage mpPage = MyBatisUtils.buildPage(pageReqVO);
IPage<RemoteExceptionTaskListDTO> page = taskDetailMapper.selectRemoteExceptionTask(mpPage, pageReqVO);
PageResult<RemoteExceptionTaskListDTO> dataPage = new PageResult<>();
dataPage.setTotal(page.getTotal());
dataPage.setList(page.getRecords());
return dataPage;
}
}

View File

@ -120,4 +120,11 @@ public interface RobotMapStopService extends IService<RobotMapStopDO> {
* @param robotNo
*/
void remoteRecoveryRobot(String robotNo);
/**
* 查询已经暂停的车辆
* @param robotNos
* @return
*/
List<RobotMapStopDO> getStopRobotNoByRobotNoList(List<String> robotNos);
}

View File

@ -233,6 +233,13 @@ public class RobotMapStopServiceImpl extends ServiceImpl<RobotMapStopMapper, Rob
throw exception(ROBOT_ALREADY_RECOVERY);
}
Long positionMapId = null;
for (RobotMapStopDO robotMapStopDO : stopRobotNoByRobotNo) {
if (robotMapStopDO.getPositionMapId() > 0) {
positionMapId = robotMapStopDO.getPositionMapId();
}
}
RobotSimulationPoseDTO robotSimulationPose = new RobotSimulationPoseDTO();
robotSimulationPose.setCommandType(RobotCommandTypeEnum.RECOVERY.getType());
List<String> list = Arrays.asList(robotNo);
@ -240,19 +247,29 @@ public class RobotMapStopServiceImpl extends ServiceImpl<RobotMapStopMapper, Rob
deleteRobotMapStopByRobotNos(list);
if (ObjectUtil.isEmpty(positionMapId)) {
return;
}
List<RobotMapStopDO> mapStopDOList = mapStopMapper.selectList(new LambdaQueryWrapperX<RobotMapStopDO>()
.eq(RobotMapStopDO::getPositionMapId, stopRobotNoByRobotNo.get(0).getPositionMapId()));
.eq(RobotMapStopDO::getPositionMapId, positionMapId));
//说明此时地图上没有其他被暂停的车辆了
if (ObjectUtil.isNotEmpty(mapStopDOList) && mapStopDOList.size() == 1) {
PositionMapDO positionMapDO = positionMapMapper.selectById(mapStopDOList.get(0).getPositionMapId());
deleteRobotMapStopByMapId(mapStopDOList.get(0).getPositionMapId());
if (ObjectUtil.isNotEmpty(mapStopDOList) && mapStopDOList.size() == 1 ) {
PositionMapDO positionMapDO = positionMapMapper.selectById(positionMapId);
deleteRobotMapStopByMapId(positionMapId);
UserOperationLogSaveReqVO operationLog = UserOperationLogSaveReqVO.builder()
.operateAction(positionMapDO.getFloor() + "" + positionMapDO.getArea() + " 地图上所有车辆已经恢复,所以把地图也设置为恢复")
.nickName(SecurityFrameworkUtils.getLoginUserNickname()).build();
userOperationLogService.createUserOperationLog(operationLog);
}
}
@Override
public List<RobotMapStopDO> getStopRobotNoByRobotNoList(List<String> robotNos) {
return mapStopMapper.selectList(new LambdaQueryWrapperX<RobotMapStopDO>()
.eq(RobotMapStopDO::getStopType, ZeroOneEnum.ONE.getType())
.in(RobotMapStopDO::getRobotNo, robotNos));
}
}

View File

@ -322,6 +322,35 @@
and t2.task_status ='1'
</select>
<select id="selectRemoteExceptionTask"
resultType="cn.iocoder.yudao.module.system.api.remote.dto.RemoteExceptionTaskListDTO">
select
t2.id,
t2.robot_no as robotNo,
t1.task_no as taskNo,
t2.from_location_no as fromLocationNo,
t2.to_location_no as toLocationNo,
t2.task_stage as taskStage
from
robot_task t1 inner join robot_task_detail t2
on t1.id = t2.robot_task_id
<where>
t1.deleted = '0'
and t2.deleted = '0'
and t2.occur_error = '1'
and t2.task_type in ('1','6')
and t2.task_status = '1'
and t1.task_status = '1'
<if test="pageReqVO.robotNo != null and pageReqVO.robotNo != ''">
and t2.robot_no = #{pageReqVO.robotNo}
</if>
<if test="pageReqVO.taskStage != null">
and t2.task_stage = #{pageReqVO.taskStage}
</if>
</where>
order by t1.create_time desc
</select>
<!--通过主键修改数据-->
<update id="updateRobotDetailById">