车辆信息更新处理暂停相关逻辑
This commit is contained in:
parent
55315e00d0
commit
97fa291198
@ -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);
|
||||
}*/
|
||||
|
||||
}
|
@ -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 {
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
@ -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);
|
||||
}
|
||||
}
|
@ -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);
|
||||
}
|
@ -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;
|
||||
|
||||
}
|
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
@ -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 = "开始时间")
|
||||
|
@ -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);
|
||||
|
||||
}
|
@ -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);
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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());
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
}
|
@ -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;
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
@ -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);
|
||||
}
|
||||
|
@ -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));
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
@ -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">
|
||||
|
Loading…
Reference in New Issue
Block a user