远遥查询车辆功能
This commit is contained in:
parent
681d8d7dc2
commit
a1cf7a9953
@ -3,6 +3,7 @@ package cn.iocoder.yudao.module.remote.controller.admin.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.controller.admin.robot.dto.RemoteRobotChangeModeDTO;
|
||||
import cn.iocoder.yudao.module.remote.controller.admin.robot.dto.RemoteRobotTaskDoneDTO;
|
||||
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;
|
||||
@ -95,4 +96,14 @@ public class RemoteRobotController {
|
||||
remoteRobotService.remoteDisconnect(request);
|
||||
return success(true);
|
||||
}
|
||||
|
||||
@PostMapping("/taskDone")
|
||||
@Operation(summary = "任务完成/取货完成")
|
||||
@PreAuthorize("@ss.hasPermission('remote:robot:taskDone')")
|
||||
public CommonResult<Boolean> remoteTaskDone(@Valid @RequestBody RemoteRobotTaskDoneDTO remoteRobotTaskDoneDTO,
|
||||
HttpServletRequest request) {
|
||||
remoteRobotService.remoteTaskDone(remoteRobotTaskDoneDTO,request);
|
||||
return success(true);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,14 @@
|
||||
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 RemoteRobotTaskDoneDTO {
|
||||
|
||||
@Schema(description = "取货完成: 0, 任务完成: 1")
|
||||
@NotNull(message = "请选择是取货完成还是任务完成")
|
||||
private Integer mode = 0;
|
||||
}
|
@ -2,6 +2,7 @@ package cn.iocoder.yudao.module.remote.service.robot;
|
||||
|
||||
import cn.iocoder.yudao.module.remote.controller.admin.robot.dto.PositionMapRespDTO;
|
||||
import cn.iocoder.yudao.module.remote.controller.admin.robot.dto.RemoteRobotChangeModeDTO;
|
||||
import cn.iocoder.yudao.module.remote.controller.admin.robot.dto.RemoteRobotTaskDoneDTO;
|
||||
import cn.iocoder.yudao.module.system.api.remote.dto.RemoteRobotDTO;
|
||||
import cn.iocoder.yudao.module.system.api.remote.dto.RemoteRobotStatusDTO;
|
||||
|
||||
@ -62,4 +63,11 @@ public interface RemoteRobotService {
|
||||
* @param request
|
||||
*/
|
||||
void remoteDisconnect(HttpServletRequest request);
|
||||
|
||||
/**
|
||||
* 任务完成/取货完成
|
||||
* @param remoteRobotTaskDoneDTO
|
||||
* @param request
|
||||
*/
|
||||
void remoteTaskDone( RemoteRobotTaskDoneDTO remoteRobotTaskDoneDTO, HttpServletRequest request);
|
||||
}
|
||||
|
@ -3,6 +3,7 @@ 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.controller.admin.robot.dto.RemoteRobotChangeModeDTO;
|
||||
import cn.iocoder.yudao.module.remote.controller.admin.robot.dto.RemoteRobotTaskDoneDTO;
|
||||
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;
|
||||
@ -15,7 +16,6 @@ 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
|
||||
@ -115,4 +115,18 @@ public class RemoteRobotServiceImpl implements RemoteRobotService{
|
||||
throw exception0(TASK_COMMONG_FAIL.getCode(), result.getMsg());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 任务完成/取货完成
|
||||
* @param remoteRobotTaskDoneDTO
|
||||
* @param request
|
||||
*/
|
||||
@Override
|
||||
public void remoteTaskDone(RemoteRobotTaskDoneDTO remoteRobotTaskDoneDTO, HttpServletRequest request) {
|
||||
String ip = IpUtils.getIp(request);
|
||||
CommonResult<Boolean> result = remoteRobotApi.remoteTaskDone(ip,remoteRobotTaskDoneDTO.getMode());
|
||||
if (!result.isSuccess()){
|
||||
throw exception0(TASK_COMMONG_FAIL.getCode(), result.getMsg());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -51,4 +51,8 @@ public interface RemoteRobotApi {
|
||||
@PostMapping(PREFIX + "/remoteDisconnect")
|
||||
@Operation(summary = "断开连接")
|
||||
CommonResult<Boolean> remoteDisconnect(@RequestParam(value = "remoteIp") String remoteIp);
|
||||
|
||||
@PostMapping(PREFIX + "/remoteTaskDone")
|
||||
@Operation(summary = "任务完成/取货完成")
|
||||
CommonResult<Boolean> remoteTaskDone(@RequestParam(value = "remoteIp") String remoteIp, @RequestParam(value = "mode") Integer mode);
|
||||
}
|
||||
|
@ -20,18 +20,15 @@ public class RemoteRobotStatusDTO {
|
||||
@Schema(description = "协控(0:关闭协控, 1:开启协控, 2:不显示协控)")
|
||||
private Integer collaborativeControl = 0;
|
||||
|
||||
@Schema(description = "是否可以点击: 任务完成(0:可以点, 1:不能点任务完成, 2:不显示任务完成按钮)")
|
||||
private Integer clickTaskDone = 1;
|
||||
|
||||
@Schema(description = "车辆任务状态(3:待命 , 其他都是任务中)")
|
||||
private Integer robotStatus = 2;
|
||||
|
||||
@Schema(description = "任务模式(0:锁定、1:正常)")
|
||||
private Integer robotTaskModel;
|
||||
|
||||
@Schema(description = "是否可以点击: 异常处理(0:可以点, 1:不能点, 2:不显示异常处理)")
|
||||
@Schema(description = "是否可以点击: 异常处理(0:显示异常处理, 1:不显示异常处理)")
|
||||
private Integer clickException = 1;
|
||||
|
||||
@Schema(description = "是否可以点击: 取货完成(0:可以点, 1:不能点, 2:不显示取货完成)")
|
||||
private Integer clickTakeDone = 1;
|
||||
@Schema(description = "是否可以点击( 0: 显示取货完成按钮, 1:显示任务完成按钮 , 2: 不显示任务完成按钮)")
|
||||
private Integer clickTaskDone = 2;
|
||||
}
|
||||
|
@ -225,6 +225,7 @@ public interface ErrorCodeConstants {
|
||||
// ========== 机器人任务明细 1-002-036-000 ==========
|
||||
ErrorCode TASK_DETAIL_NOT_EXISTS = new ErrorCode(1-002-036-001, "车辆任务明细不存在");
|
||||
ErrorCode TASK_DETAIL_CHANGE_ROBOT = new ErrorCode(1-002-036-002, "非新单据不能修改车辆");
|
||||
ErrorCode TASK_NOT_TAKE_RELEASE = new ErrorCode(1-002-036-003, "非取货任务,不能点击取货完成");
|
||||
|
||||
// ========== 机器人任务明细 1-002-037-000 ==========
|
||||
ErrorCode REDISSON_NOT_OBTAIN_LOCK = new ErrorCode(1-002-037-001, "有正在下发中的任务请稍后重试!");
|
||||
@ -292,6 +293,9 @@ public interface ErrorCodeConstants {
|
||||
ErrorCode REMOTE_TASK_HAVE_CHOOSE = new ErrorCode(1_002_053_011, "此任务已经被远遥设备选中");
|
||||
ErrorCode REMOTE_TASK_NOT_OCCUR_ERROR = new ErrorCode(1_002_053_012, "此任务未发发生4级异常");
|
||||
ErrorCode REMOTE_TASK_NOT_TAKE_RELEASE = new ErrorCode(1_002_053_013, "非取货或者放货任务,不能转移");
|
||||
ErrorCode REMOTE_ALREADY_CHOOSE_ROBOT = new ErrorCode(1_002_053_014, "此车辆已经被其他远遥设备控制中");
|
||||
ErrorCode REMOTE_ROBOT_HAVE_MORE_TASK = new ErrorCode(1_002_053_015, "此车辆有一个以上的处理中任务,请先检查数据");
|
||||
ErrorCode REMOTE_ROBOT_HAVE_NOT_TASK = new ErrorCode(1_002_053_016, "此车辆没有处理中的任务");
|
||||
|
||||
// ========== 车辆摄像头信息 1_002_054_001 ==========
|
||||
ErrorCode CAMERA_NOT_EXISTS = new ErrorCode(1_002_054_001, "车辆摄像头信息不存在");
|
||||
|
@ -108,6 +108,7 @@ public class RemoteRobotApiImpl implements RemoteRobotApi {
|
||||
|
||||
/**
|
||||
* 断开连接
|
||||
*
|
||||
* @param remoteIp
|
||||
* @return
|
||||
*/
|
||||
@ -117,5 +118,18 @@ public class RemoteRobotApiImpl implements RemoteRobotApi {
|
||||
return CommonResult.success(true);
|
||||
}
|
||||
|
||||
/**
|
||||
* 任务完成/取货完成
|
||||
*
|
||||
* @param remoteIp
|
||||
* @param mode
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public CommonResult<Boolean> remoteTaskDone(String remoteIp, Integer mode) {
|
||||
controllerInformationService.remoteTaskDone(remoteIp, mode);
|
||||
return CommonResult.success(true);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
@ -96,7 +96,7 @@ public class RobotTaskDetailController {
|
||||
@Operation(summary = "人工完成")
|
||||
@PreAuthorize("@ss.hasPermission('robot:task-detail:manuallyCompleted')")
|
||||
public CommonResult manuallyCompleted(@RequestParam("id") Long id) {
|
||||
taskDetailService.manuallyCompleted(id);
|
||||
taskDetailService.manuallyCompleted(id,"人工完成");
|
||||
return success(true);
|
||||
}
|
||||
|
||||
|
@ -10,4 +10,16 @@ public class RobotDoingTaskDTO {
|
||||
|
||||
@Schema(description = "AGV编号")
|
||||
private String robotNo;
|
||||
|
||||
@Schema(description = "robot_task_detail的id")
|
||||
private Long id;
|
||||
|
||||
@Schema(description = "任务类型(1:取放货、2:停车、 3:充电、4:移动、5:仅取货、6:仅放货、7:扫描码、8:检测托盘类型、9: 移动到点位)", example = "2")
|
||||
private Integer taskType;
|
||||
|
||||
@Schema(description = "任务状态(0:未开始、1:执行中、2:已完成、3:已取消、4:异常)", example = "1")
|
||||
private Integer taskStatus;
|
||||
|
||||
@Schema(description = "任务阶段(0:待执行、1:前往取货、2:取货中、3:前往放货、4:放货中、5:结束、6:移动中、7:正在充电、8:取消、9:人工完成、10:异常)")
|
||||
private Long taskStage;
|
||||
}
|
||||
|
@ -28,4 +28,9 @@ public interface RemoteControllerInformationMapper extends BaseMapperX<RemoteCon
|
||||
.orderByDesc(RemoteControllerInformationDO::getId));
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取远遥的车辆编号
|
||||
* @return
|
||||
*/
|
||||
List<String> getRemoteControllerRobotNos();
|
||||
}
|
@ -148,7 +148,7 @@ public interface RobotTaskDetailMapper extends BaseMapperX<RobotTaskDetailDO> {
|
||||
* 获取机器人正在做的任务
|
||||
* @return
|
||||
*/
|
||||
List<RobotDoingTaskDTO> getRobotDoingTaskNo();
|
||||
List<RobotDoingTaskDTO> getRobotDoingTaskNo(@Param("robotNo") String robotNo);
|
||||
|
||||
|
||||
/**
|
||||
|
@ -101,6 +101,7 @@ public class RobotTaskDetailActionLogServiceImpl implements RobotTaskDetailActio
|
||||
public RobotTaskDetailActionLogDO setPreviousTaskDoneByOrderId(Long orderId) {
|
||||
RobotTaskDetailActionLogDO lastLog = taskDetailActionLogMapper.selectOne(new LambdaQueryWrapperX<RobotTaskDetailActionLogDO>()
|
||||
.eq(RobotTaskDetailActionLogDO::getTaskDetailId, orderId)
|
||||
.ne(RobotTaskDetailActionLogDO::getCommandId, -1)
|
||||
.orderByDesc(RobotTaskDetailActionLogDO::getCreateTime)
|
||||
.last("limit 1"));
|
||||
if (ObjectUtil.isNotEmpty(lastLog) && ObjectUtil.isEmpty(lastLog.getCommandId())) {
|
||||
|
@ -453,7 +453,7 @@ public class PositionMapServiceImpl extends ServiceImpl<PositionMapMapper, Posit
|
||||
|
||||
List<RobotInformationDO> allRobot = informationService.getRobotInformationByRobotNos(robotNos);
|
||||
|
||||
List<RobotDoingTaskDTO> robotDoingTask = taskDetailService.getRobotDoingTaskNo();
|
||||
List<RobotDoingTaskDTO> robotDoingTask = taskDetailService.getRobotDoingTaskNo(null);
|
||||
|
||||
List<RemoteControllerInformationDO> remoteControllerInformations = controllerInformationService.getAllRemoteController();
|
||||
|
||||
|
@ -128,4 +128,13 @@ public interface RemoteControllerInformationService extends IService<RemoteContr
|
||||
* @param message
|
||||
*/
|
||||
void repeatedTransmissionDisconnect(RemoteSendMessage message);
|
||||
|
||||
/**
|
||||
* 任务完成/取货完成
|
||||
* @param remoteIp
|
||||
* @param mode
|
||||
*/
|
||||
void remoteTaskDone(String remoteIp, Integer mode);
|
||||
|
||||
List<String> getRemoteControllerRobotNos();
|
||||
}
|
||||
|
@ -16,6 +16,7 @@ import cn.iocoder.yudao.module.system.controller.admin.log.vo.UserOperationLogSa
|
||||
import cn.iocoder.yudao.module.system.controller.admin.remote.vo.ControllerTaskTransferLogSaveReqVO;
|
||||
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.controller.admin.robot.detail.RobotDoingTaskDTO;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.robot.vo.RobotTaskDetailSaveReqVO;
|
||||
import cn.iocoder.yudao.module.system.dal.dataobject.config.CommonConfigDO;
|
||||
import cn.iocoder.yudao.module.system.dal.dataobject.log.RobotTaskDetailActionLogDO;
|
||||
@ -28,15 +29,15 @@ import cn.iocoder.yudao.module.system.dal.mysql.config.CommonConfigMapper;
|
||||
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.config.CommandConfigTypeEnum;
|
||||
import cn.iocoder.yudao.module.system.enums.path.PathTaskTypeEnum;
|
||||
import cn.iocoder.yudao.module.system.enums.redis.RobotCacheLockEnum;
|
||||
import cn.iocoder.yudao.module.system.enums.robot.RobotStatusEnum;
|
||||
import cn.iocoder.yudao.module.system.enums.robot.RobotTaskModelEnum;
|
||||
import cn.iocoder.yudao.module.system.enums.robot.RobotTaskStatusEnum;
|
||||
import cn.iocoder.yudao.module.system.enums.robot.RobotTaskTypeEnum;
|
||||
import cn.iocoder.yudao.module.system.enums.robot.actionlog.ActionStatusEnum;
|
||||
import cn.iocoder.yudao.module.system.enums.robot.remote.RemoteModeEnum;
|
||||
import cn.iocoder.yudao.module.system.enums.robot.remote.RemoteOperationModeEnum;
|
||||
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.mq.message.RemoteSendMessage;
|
||||
import cn.iocoder.yudao.module.system.mq.producer.remote.RemoteControllerProducer;
|
||||
import cn.iocoder.yudao.module.system.service.log.RobotTaskDetailActionLogService;
|
||||
@ -50,7 +51,6 @@ import com.alibaba.fastjson.JSON;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.redisson.api.RLock;
|
||||
import org.springframework.context.ApplicationContext;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
@ -59,6 +59,7 @@ import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
||||
@ -241,13 +242,6 @@ public class RemoteControllerInformationServiceImpl extends ServiceImpl<RemoteCo
|
||||
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());
|
||||
}
|
||||
|
||||
RobotInformationDO robotInformation = informationService.getInformationByRobotNo(information.getRobotNo());
|
||||
if (RobotStatusEnum.STAND_BY.getType().equals(robotInformation.getRobotStatus())) {
|
||||
@ -255,6 +249,34 @@ public class RemoteControllerInformationServiceImpl extends ServiceImpl<RemoteCo
|
||||
}
|
||||
remoteRobotStatus.setRobotTaskModel(robotInformation.getRobotTaskModel());
|
||||
|
||||
if ((RemoteModeEnum.AUTOMATIC.getType().equals(information.getRemoteMode()) || RemoteModeEnum.FREE.getType().equals(information.getRemoteMode()))
|
||||
&& RobotStatusEnum.STAND_BY.getType().equals(robotInformation.getRobotStatus())) {
|
||||
remoteRobotStatus.setClickException(ZeroOneEnum.ZERO.getType());
|
||||
}
|
||||
|
||||
if (RemoteModeEnum.HAND_MOVEMENT.getType().equals(information.getRemoteMode())) {
|
||||
List<RobotDoingTaskDTO> robotDoingTaskNo = taskDetailService.getRobotDoingTaskNo(information.getRobotNo());
|
||||
if ((ObjectUtil.isNotEmpty(robotDoingTaskNo) && robotDoingTaskNo.size() > 1) || ObjectUtil.isEmpty(robotDoingTaskNo)) {
|
||||
return remoteRobotStatus;
|
||||
}
|
||||
RobotDoingTaskDTO robotDoingTask = robotDoingTaskNo.get(0);
|
||||
|
||||
if (!(RobotTaskStatusEnum.DOING.getType().equals(robotDoingTask.getTaskStatus())
|
||||
&& (RobotTaskTypeEnum.TAKE_RELEASE.getType().equals(robotDoingTask.getTaskType())
|
||||
|| RobotTaskTypeEnum.TAKE.getType().equals(robotDoingTask.getTaskType())
|
||||
|| RobotTaskTypeEnum.RELEASE.getType().equals(robotDoingTask.getTaskType())))) {
|
||||
return remoteRobotStatus;
|
||||
}
|
||||
|
||||
if (RobotTaskStageEnum.UN_START.getType().equals(robotDoingTask.getTaskStage())
|
||||
|| RobotTaskStageEnum.GO_TAKE.getType().equals(robotDoingTask.getTaskStage())
|
||||
|| RobotTaskStageEnum.TAKEING.getType().equals(robotDoingTask.getTaskStage())) {
|
||||
remoteRobotStatus.setClickTaskDone(ZeroOneEnum.ZERO.getType());
|
||||
}else {
|
||||
remoteRobotStatus.setClickTaskDone(ZeroOneEnum.ONE.getType());
|
||||
}
|
||||
}
|
||||
|
||||
return remoteRobotStatus;
|
||||
}
|
||||
|
||||
@ -331,6 +353,7 @@ public class RemoteControllerInformationServiceImpl extends ServiceImpl<RemoteCo
|
||||
|
||||
/**
|
||||
* 车辆换图修改限速
|
||||
*
|
||||
* @param pathPosedsDTO
|
||||
*/
|
||||
@Override
|
||||
@ -346,6 +369,7 @@ public class RemoteControllerInformationServiceImpl extends ServiceImpl<RemoteCo
|
||||
|
||||
/**
|
||||
* 断开连接
|
||||
*
|
||||
* @param remoteIp
|
||||
*/
|
||||
@Override
|
||||
@ -360,7 +384,7 @@ public class RemoteControllerInformationServiceImpl extends ServiceImpl<RemoteCo
|
||||
checkGraphMatch(information.getRobotNo());
|
||||
|
||||
String robotNo = information.getRobotNo();
|
||||
sendRemoteMsgToPP(robotNo,PathPlanningTopicConstant.CLOSE_REMOTE_CONTROLLER,RemoteOperationModeEnum.AUTO.getType());
|
||||
sendRemoteMsgToPP(robotNo, PathPlanningTopicConstant.CLOSE_REMOTE_CONTROLLER, RemoteOperationModeEnum.AUTO.getType());
|
||||
sendModeToRobot(robotNo, RemoteOperationModeEnum.AUTO.getType());
|
||||
|
||||
information.setRobotNo(null);
|
||||
@ -370,7 +394,7 @@ public class RemoteControllerInformationServiceImpl extends ServiceImpl<RemoteCo
|
||||
controllerInformationMapper.updateById(information);
|
||||
|
||||
UserOperationLogSaveReqVO build = UserOperationLogSaveReqVO.builder()
|
||||
.operateAction("远遥断开连接 "+ information.getRemoteIp())
|
||||
.operateAction("远遥断开连接 " + information.getRemoteIp())
|
||||
.nickName(SecurityFrameworkUtils.getLoginUserNickname()).build();
|
||||
userOperationLogService.createUserOperationLog(build);
|
||||
|
||||
@ -381,10 +405,56 @@ public class RemoteControllerInformationServiceImpl extends ServiceImpl<RemoteCo
|
||||
@Override
|
||||
public void repeatedTransmissionDisconnect(RemoteSendMessage message) {
|
||||
String robotNo = message.getRobotNo();
|
||||
sendRemoteMsgToPP(robotNo,PathPlanningTopicConstant.CLOSE_REMOTE_CONTROLLER,RemoteOperationModeEnum.AUTO.getType());
|
||||
sendRemoteMsgToPP(robotNo, PathPlanningTopicConstant.CLOSE_REMOTE_CONTROLLER, RemoteOperationModeEnum.AUTO.getType());
|
||||
sendModeToRobot(robotNo, RemoteOperationModeEnum.AUTO.getType());
|
||||
}
|
||||
|
||||
/**
|
||||
* 任务完成/取货完成
|
||||
*
|
||||
* @param remoteIp
|
||||
* @param mode
|
||||
*/
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void remoteTaskDone(String remoteIp, Integer mode) {
|
||||
RemoteControllerInformationDO information = checkRemoteControllerHaveBinding(remoteIp);
|
||||
List<RobotDoingTaskDTO> robotDoingTaskNo = taskDetailService.getRobotDoingTaskNo(information.getRobotNo());
|
||||
if (ObjectUtil.isNotEmpty(robotDoingTaskNo) && robotDoingTaskNo.size() > 1) {
|
||||
throw exception(REMOTE_ROBOT_HAVE_MORE_TASK);
|
||||
} else if (ObjectUtil.isEmpty(robotDoingTaskNo)) {
|
||||
throw exception(REMOTE_ROBOT_HAVE_NOT_TASK);
|
||||
}
|
||||
|
||||
//取货完成
|
||||
if (ZeroOneEnum.ZERO.getType().equals(mode)) {
|
||||
taskDetailService.remoteTaskTakeDone(robotDoingTaskNo.get(0).getId());
|
||||
} else {
|
||||
//任务完成
|
||||
taskDetailService.manuallyCompleted(robotDoingTaskNo.get(0).getId(), " 远遥点击任务完成 ");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> getRemoteControllerRobotNos() {
|
||||
List<RemoteControllerInformationDO> remoteControllerInformations = controllerInformationMapper.selectList(new LambdaQueryWrapper<RemoteControllerInformationDO>());
|
||||
if (ObjectUtil.isEmpty(remoteControllerInformations)) {
|
||||
return new ArrayList<>();
|
||||
}
|
||||
return remoteControllerInformations.stream().map(RemoteControllerInformationDO::getRobotNo).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
public RemoteControllerInformationDO checkRemoteControllerHaveBinding(String remoteIp) {
|
||||
RemoteControllerInformationDO information = controllerInformationMapper.selectOne(new LambdaQueryWrapper<RemoteControllerInformationDO>()
|
||||
.eq(RemoteControllerInformationDO::getRemoteIp, remoteIp)
|
||||
.last("limit 1"));
|
||||
if (ObjectUtil.isEmpty(information) || ObjectUtil.isEmpty(information.getRobotNo())) {
|
||||
throw exception(REMOTE_NOT_HAVE_BINDING_ROBOT);
|
||||
}
|
||||
return information;
|
||||
}
|
||||
|
||||
/**
|
||||
* 远遥转移任务
|
||||
*
|
||||
@ -392,12 +462,7 @@ public class RemoteControllerInformationServiceImpl extends ServiceImpl<RemoteCo
|
||||
*/
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void doRemoteTransferTaskToFreeRobot(RemoteTaskTransferDTO data) {
|
||||
RemoteControllerInformationDO information = controllerInformationMapper.selectOne(new LambdaQueryWrapper<RemoteControllerInformationDO>()
|
||||
.eq(RemoteControllerInformationDO::getRemoteIp, data.getRemoteIp())
|
||||
.last("limit 1"));
|
||||
if (ObjectUtil.isEmpty(information) || ObjectUtil.isEmpty(information.getRobotNo())) {
|
||||
throw exception(REMOTE_NOT_HAVE_BINDING_ROBOT);
|
||||
}
|
||||
RemoteControllerInformationDO information = checkRemoteControllerHaveBinding(data.getRemoteIp());
|
||||
//自动模式判断是否匹配路网
|
||||
if (RemoteModeEnum.AUTOMATIC.getType().equals(data.getRemoteMode())) {
|
||||
checkGraphMatch(information.getRobotNo());
|
||||
@ -450,7 +515,7 @@ public class RemoteControllerInformationServiceImpl extends ServiceImpl<RemoteCo
|
||||
informationService.rmoteTransferTaskToNewFreeRobo(oldRobotNo, data.getId(), information.getRobotNo());
|
||||
|
||||
//操作信息
|
||||
createUserOperateAction(taskDetail,oldRobotNo);
|
||||
createUserOperateAction(taskDetail, oldRobotNo);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -468,7 +533,7 @@ public class RemoteControllerInformationServiceImpl extends ServiceImpl<RemoteCo
|
||||
action = "取货库位任务 " + taskDetail.getFromLocationNo();
|
||||
}
|
||||
|
||||
String msg = "远遥将 " + action + "从旧车辆 " + oldRobotNo + " 转移给新车辆 " + taskDetail.getRobotNo();
|
||||
String msg = "远遥将 " + action + "从旧车辆 " + oldRobotNo + " 转移给新车辆 " + taskDetail.getRobotNo();
|
||||
UserOperationLogSaveReqVO build = UserOperationLogSaveReqVO.builder()
|
||||
.operateAction(msg)
|
||||
.nickName(SecurityFrameworkUtils.getLoginUserNickname()).build();
|
||||
@ -508,10 +573,23 @@ public class RemoteControllerInformationServiceImpl extends ServiceImpl<RemoteCo
|
||||
|
||||
//第一次设置为自动模式
|
||||
if (ObjectUtil.isEmpty(information.getRobotNo()) && RemoteModeEnum.AUTOMATIC.getType().equals(remoteMode)) {
|
||||
|
||||
RemoteControllerInformationDO remoteControllerInformation = controllerInformationMapper.selectOne(new LambdaQueryWrapper<RemoteControllerInformationDO>()
|
||||
.eq(RemoteControllerInformationDO::getRobotNo, robotNo)
|
||||
.last("limit 1"));
|
||||
if (ObjectUtil.isNotEmpty(remoteControllerInformation)) {
|
||||
throw exception(REMOTE_ALREADY_CHOOSE_ROBOT);
|
||||
}
|
||||
|
||||
List<RobotDoingTaskDTO> robotDoingTaskNo = taskDetailService.getRobotDoingTaskNo(robotNo);
|
||||
if (ObjectUtil.isNotEmpty(robotDoingTaskNo) && robotDoingTaskNo.size() > 1) {
|
||||
throw exception(REMOTE_ROBOT_HAVE_MORE_TASK);
|
||||
}
|
||||
|
||||
String operateAction = information.getRemoteIp() + " 开启远遥为自动模式";
|
||||
information.setTaskDetailId(null);
|
||||
setRemoteChangeLog(information, robotNo, remoteMode, operateAction);
|
||||
sendRemoteMsgToPP(robotNo,PathPlanningTopicConstant.START_REMOTE_CONTROLLER,RemoteOperationModeEnum.AUTO.getType());
|
||||
sendRemoteMsgToPP(robotNo, PathPlanningTopicConstant.START_REMOTE_CONTROLLER, RemoteOperationModeEnum.AUTO.getType());
|
||||
sendModeToRobot(robotNo, RemoteOperationModeEnum.AUTO.getType());
|
||||
return;
|
||||
}
|
||||
@ -522,7 +600,7 @@ public class RemoteControllerInformationServiceImpl extends ServiceImpl<RemoteCo
|
||||
.operateAction(information.getRemoteIp() + " 重新进入远遥 " + RemoteModeEnum.getMsg(remoteMode))
|
||||
.nickName(SecurityFrameworkUtils.getLoginUserNickname()).build();
|
||||
userOperationLogService.createUserOperationLog(operationLog);
|
||||
sendRemoteMsgToPP(robotNo,PathPlanningTopicConstant.START_REMOTE_CONTROLLER,RemoteOperationModeEnum.getType(information.getRemoteMode()));
|
||||
sendRemoteMsgToPP(robotNo, PathPlanningTopicConstant.START_REMOTE_CONTROLLER, RemoteOperationModeEnum.getType(information.getRemoteMode()));
|
||||
sendModeToRobot(robotNo, RemoteOperationModeEnum.getType(remoteMode));
|
||||
return;
|
||||
}
|
||||
@ -535,7 +613,7 @@ public class RemoteControllerInformationServiceImpl extends ServiceImpl<RemoteCo
|
||||
}
|
||||
String operateAction = information.getRemoteIp() + " 切换远遥模式为 " + RemoteModeEnum.getMsg(remoteMode);
|
||||
setRemoteChangeLog(information, robotNo, remoteMode, operateAction);
|
||||
sendRemoteMsgToPP(robotNo,PathPlanningTopicConstant.START_REMOTE_CONTROLLER,RemoteOperationModeEnum.MAN.getType());
|
||||
sendRemoteMsgToPP(robotNo, PathPlanningTopicConstant.START_REMOTE_CONTROLLER, RemoteOperationModeEnum.MAN.getType());
|
||||
sendModeToRobot(robotNo, RemoteOperationModeEnum.MAN.getType());
|
||||
return;
|
||||
}
|
||||
@ -560,7 +638,7 @@ public class RemoteControllerInformationServiceImpl extends ServiceImpl<RemoteCo
|
||||
|
||||
String operateAction = information.getRemoteIp() + " 切换远遥模式为 " + RemoteModeEnum.getMsg(remoteMode);
|
||||
setRemoteChangeLog(information, robotNo, remoteMode, operateAction);
|
||||
sendRemoteMsgToPP(robotNo,PathPlanningTopicConstant.START_REMOTE_CONTROLLER,RemoteOperationModeEnum.MAN.getType());
|
||||
sendRemoteMsgToPP(robotNo, PathPlanningTopicConstant.START_REMOTE_CONTROLLER, RemoteOperationModeEnum.MAN.getType());
|
||||
sendModeToRobot(robotNo, RemoteOperationModeEnum.MAN.getType());
|
||||
return;
|
||||
}
|
||||
@ -571,7 +649,7 @@ public class RemoteControllerInformationServiceImpl extends ServiceImpl<RemoteCo
|
||||
|
||||
String operateAction = information.getRemoteIp() + " 切换远遥模式为 " + RemoteModeEnum.getMsg(remoteMode);
|
||||
setRemoteChangeLog(information, robotNo, remoteMode, operateAction);
|
||||
sendRemoteMsgToPP(robotNo,PathPlanningTopicConstant.START_REMOTE_CONTROLLER,RemoteOperationModeEnum.AUTO.getType());
|
||||
sendRemoteMsgToPP(robotNo, PathPlanningTopicConstant.START_REMOTE_CONTROLLER, RemoteOperationModeEnum.AUTO.getType());
|
||||
sendModeToRobot(robotNo, RemoteOperationModeEnum.AUTO.getType());
|
||||
return;
|
||||
}
|
||||
@ -593,7 +671,7 @@ public class RemoteControllerInformationServiceImpl extends ServiceImpl<RemoteCo
|
||||
checkGraphMatch(robotNo);
|
||||
String operateAction = information.getRemoteIp() + " 切换远遥模式为 " + RemoteModeEnum.getMsg(remoteMode);
|
||||
setRemoteChangeLog(information, robotNo, remoteMode, operateAction);
|
||||
sendRemoteMsgToPP(robotNo,PathPlanningTopicConstant.START_REMOTE_CONTROLLER,RemoteOperationModeEnum.AUTO.getType());
|
||||
sendRemoteMsgToPP(robotNo, PathPlanningTopicConstant.START_REMOTE_CONTROLLER, RemoteOperationModeEnum.AUTO.getType());
|
||||
sendModeToRobot(robotNo, RemoteOperationModeEnum.AUTO.getType());
|
||||
}
|
||||
|
||||
@ -626,7 +704,7 @@ public class RemoteControllerInformationServiceImpl extends ServiceImpl<RemoteCo
|
||||
}
|
||||
String mac = informationService.getMacByRobotNo(robotNo);
|
||||
commonApi.commonMethod(robotModeDTO, RobotTopicConstant.ROBOT_COMMAND_TOPIC + mac);
|
||||
log.info("发送消息让车机 :{} 切换模式 :{}",robotNo, JSON.toJSONString(robotModeDTO));
|
||||
log.info("发送消息让车机 :{} 切换模式 :{}", robotNo, JSON.toJSONString(robotModeDTO));
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -221,4 +221,10 @@ public interface RobotInformationService extends IService<RobotInformationDO> {
|
||||
* @param robotNo
|
||||
*/
|
||||
void rmoteTransferTaskToNewFreeRobo(String oldRobotNo ,Long id, String robotNo);
|
||||
|
||||
/**
|
||||
* 设置车辆空闲
|
||||
* @param robotNo
|
||||
*/
|
||||
void setRobotFree(String robotNo);
|
||||
}
|
||||
|
@ -1444,6 +1444,19 @@ public class RobotInformationServiceImpl extends ServiceImpl<RobotInformationMap
|
||||
pathPlanningApi.synchronousLineObject(pathPlanningList, PathPlanningTopicConstant.TASK_ASSIGNMENT_REQUEST);
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置车辆空闲
|
||||
* @param robotNo
|
||||
*/
|
||||
@Override
|
||||
public void setRobotFree(String robotNo) {
|
||||
RobotInformationDO robotInformationDO = informationMapper.selectOne(new LambdaQueryWrapper<RobotInformationDO>()
|
||||
.eq(RobotInformationDO::getRobotNo, robotNo)
|
||||
.last("limit 1"));
|
||||
robotInformationDO.setRobotStatus(RobotStatusEnum.STAND_BY.getType());
|
||||
informationMapper.updateById(robotInformationDO);
|
||||
}
|
||||
|
||||
private Boolean checkElectricity(CommonConfigVO chargeConfig, RobotInformationDO robot, RobotStatusDataPoseDTO dataPoseDTO) {
|
||||
String chargeModelKey = RobotTaskChcheConstant.ROBOT_CHARGE_MODEL + robot.getRobotNo();
|
||||
Object chargeModelCache = redisUtil.get(chargeModelKey);
|
||||
|
@ -77,7 +77,7 @@ public interface RobotTaskDetailService {
|
||||
* @param id
|
||||
* @return
|
||||
*/
|
||||
void manuallyCompleted(Long id);
|
||||
void manuallyCompleted(Long id,String str);
|
||||
|
||||
/**
|
||||
* 查询此库位处理中的任务
|
||||
@ -110,7 +110,7 @@ public interface RobotTaskDetailService {
|
||||
* 获取机器人正在做的任务
|
||||
* @return
|
||||
*/
|
||||
List<RobotDoingTaskDTO> getRobotDoingTaskNo();
|
||||
List<RobotDoingTaskDTO> getRobotDoingTaskNo(String robotNo);
|
||||
|
||||
|
||||
/**
|
||||
@ -119,4 +119,10 @@ public interface RobotTaskDetailService {
|
||||
* @return
|
||||
*/
|
||||
PageResult<RemoteExceptionTaskDetailDTO> getExceptionTaskDetail(RemoteTaskQueryDTO remoteTaskQuery);
|
||||
|
||||
/**
|
||||
* 远遥点击取货完成
|
||||
* @param id
|
||||
*/
|
||||
void remoteTaskTakeDone(Long id);
|
||||
}
|
@ -3,10 +3,13 @@ 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.framework.security.core.util.SecurityFrameworkUtils;
|
||||
import cn.iocoder.yudao.module.mqtt.api.common.CommonApi;
|
||||
import cn.iocoder.yudao.module.system.api.path.vo.RobotClosePathPlantingDTO;
|
||||
import cn.iocoder.yudao.module.system.api.remote.dto.RemoteExceptionTaskDetailDTO;
|
||||
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.api.remote.dto.RemoteTaskQueryDTO;
|
||||
import cn.iocoder.yudao.module.system.constant.path.PathPlanningTopicConstant;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.log.vo.UserOperationLogSaveReqVO;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.robot.detail.RobotDoingTaskDTO;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.robot.vo.*;
|
||||
import cn.iocoder.yudao.module.system.dal.dataobject.log.RobotTaskDetailActionLogDO;
|
||||
@ -17,13 +20,20 @@ import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotWarnMsgDO;
|
||||
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.enums.common.ZeroOneEnum;
|
||||
import cn.iocoder.yudao.module.system.enums.path.PathIsReachEnum;
|
||||
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.RobotTaskTypeEnum;
|
||||
import cn.iocoder.yudao.module.system.enums.robot.actionlog.ActionStatusEnum;
|
||||
import cn.iocoder.yudao.module.system.enums.robot.task.RobotTaskStageEnum;
|
||||
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.path.PathPlanningService;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
@ -33,14 +43,13 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
||||
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
|
||||
import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.TASK_DETAIL_CHANGE_ROBOT;
|
||||
import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.TASK_DETAIL_NOT_EXISTS;
|
||||
import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*;
|
||||
|
||||
|
||||
/**
|
||||
@ -68,6 +77,15 @@ public class RobotTaskDetailServiceImpl implements RobotTaskDetailService {
|
||||
@Resource
|
||||
private RobotWarnMsgService warnMsgService;
|
||||
|
||||
@Resource
|
||||
private CommonApi commonApi;
|
||||
|
||||
@Resource
|
||||
private UserOperationLogService userOperationLogService;
|
||||
|
||||
@Resource
|
||||
private PathPlanningService pathPlanningService;
|
||||
|
||||
@Override
|
||||
public Long createTaskDetail(RobotTaskDetailSaveReqVO createReqVO) {
|
||||
// 插入
|
||||
@ -144,11 +162,13 @@ public class RobotTaskDetailServiceImpl implements RobotTaskDetailService {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void manuallyCompleted(Long taskDetailId) {
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void manuallyCompleted(Long taskDetailId, String str) {
|
||||
RobotTaskDetailDO robotTaskDetailDO = taskDetailMapper.selectById(taskDetailId);
|
||||
Long taskStage = robotTaskDetailDO.getTaskStage();
|
||||
robotTaskDetailDO.setTaskStatus(RobotTaskDetailStatusEnum.DONE.getType());
|
||||
robotTaskDetailDO.setTaskStage(RobotTaskStageEnum.MANUALLY_COMPLETED.getType());
|
||||
robotTaskDetailDO.setOccurError(ZeroOneEnum.ZERO.getType());
|
||||
taskDetailMapper.updateById(robotTaskDetailDO);
|
||||
|
||||
List<RobotTaskDetailDO> taskDetailDOS = taskDetailMapper.selectList(new LambdaQueryWrapperX<RobotTaskDetailDO>()
|
||||
@ -161,20 +181,36 @@ public class RobotTaskDetailServiceImpl implements RobotTaskDetailService {
|
||||
robotTaskMapper.updateRobot(robotTask);
|
||||
}
|
||||
|
||||
RobotTaskDetailActionLogDO log = taskDetailActionLogService.getLastTaskByRobotNo(robotTaskDetailDO.getRobotNo());
|
||||
if (ObjectUtil.isEmpty(log) || !log.getTaskDetailId().equals(taskDetailId)) {
|
||||
UserOperationLogSaveReqVO build = UserOperationLogSaveReqVO.builder()
|
||||
.operateAction("任务id " + taskDetailId + str + robotTaskDetailDO.getRobotNo())
|
||||
.nickName(SecurityFrameworkUtils.getLoginUserNickname()).build();
|
||||
userOperationLogService.createUserOperationLog(build);
|
||||
|
||||
RobotTaskDetailActionLogDO actionLog = taskDetailActionLogService.getLastTaskByRobotNo(robotTaskDetailDO.getRobotNo());
|
||||
if (ObjectUtil.isEmpty(actionLog) || !actionLog.getTaskDetailId().equals(taskDetailId)) {
|
||||
return;
|
||||
}
|
||||
|
||||
informationService.setRobotFree(robotTaskDetailDO.getRobotNo());
|
||||
|
||||
actionLog.setActionStatus(ActionStatusEnum.DONE.getType());
|
||||
taskDetailActionLogService.updateTaskDetailActionLogs(Arrays.asList(actionLog));
|
||||
taskDetailActionLogService.setPreviousTaskDoneByOrderId(taskDetailId);
|
||||
|
||||
if (RobotTaskStageEnum.DONE.getType().equals(taskStage)
|
||||
|| RobotTaskStageEnum.CLOSE.getType().equals(taskStage)
|
||||
|| RobotTaskStageEnum.MANUALLY_COMPLETED.getType().equals(taskStage)
|
||||
|| RobotTaskStageEnum.EXCEPTION.getType().equals(taskStage) ) {
|
||||
|| RobotTaskStageEnum.CLOSE.getType().equals(taskStage)
|
||||
|| RobotTaskStageEnum.MANUALLY_COMPLETED.getType().equals(taskStage)) {
|
||||
return;
|
||||
}
|
||||
|
||||
String mac = informationService.getMacByRobotNo(robotTaskDetailDO.getRobotNo());
|
||||
informationService.robotCloseTaskDetail(String.valueOf(taskDetailId),mac,"");
|
||||
informationService.robotCloseTaskDetail(String.valueOf(taskDetailId), mac, actionLog.getCommandType());
|
||||
|
||||
RobotClosePathPlantingDTO closePathPlanting = RobotClosePathPlantingDTO.builder()
|
||||
.robotNo(robotTaskDetailDO.getRobotNo())
|
||||
.id(robotTaskDetailDO.getId().toString())
|
||||
.build();
|
||||
commonApi.commonMethod(closePathPlanting, PathPlanningTopicConstant.KILL_TASK);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -202,16 +238,18 @@ public class RobotTaskDetailServiceImpl implements RobotTaskDetailService {
|
||||
|
||||
/**
|
||||
* 获取机器人正在做的任务
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public List<RobotDoingTaskDTO> getRobotDoingTaskNo() {
|
||||
return taskDetailMapper.getRobotDoingTaskNo();
|
||||
public List<RobotDoingTaskDTO> getRobotDoingTaskNo(String robotNo) {
|
||||
return taskDetailMapper.getRobotDoingTaskNo(robotNo);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 远遥查询异常的车辆
|
||||
*
|
||||
* @param pageReqVO
|
||||
* @return
|
||||
*/
|
||||
@ -233,7 +271,7 @@ public class RobotTaskDetailServiceImpl implements RobotTaskDetailService {
|
||||
|
||||
List<Long> detailIds = page.getRecords().stream().map(RemoteExceptionTaskDetailDTO::getId).collect(Collectors.toList());
|
||||
|
||||
List<RobotWarnMsgDO> warnMsgs =warnMsgService.getWarnMsgByDetailIds(detailIds);
|
||||
List<RobotWarnMsgDO> warnMsgs = warnMsgService.getWarnMsgByDetailIds(detailIds);
|
||||
Map<Long, String> warnMsgMap = null;
|
||||
if (ObjectUtil.isNotEmpty(warnMsgs)) {
|
||||
warnMsgMap = warnMsgs.stream().collect(Collectors.toMap(RobotWarnMsgDO::getTaskDetailId, RobotWarnMsgDO::getWarnMsg));
|
||||
@ -252,5 +290,42 @@ public class RobotTaskDetailServiceImpl implements RobotTaskDetailService {
|
||||
return dataPage;
|
||||
}
|
||||
|
||||
/**
|
||||
* 取货完成
|
||||
*/
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void remoteTaskTakeDone(Long taskDetailId) {
|
||||
RobotTaskDetailDO robotTaskDetailDO = taskDetailMapper.selectById(taskDetailId);
|
||||
String str = " 远遥点击取货完成 ";
|
||||
if (RobotTaskTypeEnum.TAKE.getType().equals(robotTaskDetailDO.getTaskType())) {
|
||||
manuallyCompleted(taskDetailId, str);
|
||||
} else if (RobotTaskTypeEnum.TAKE_RELEASE.getType().equals(robotTaskDetailDO.getTaskType())) {
|
||||
|
||||
if (!RobotTaskStageEnum.UN_START.getType().equals(robotTaskDetailDO.getTaskStage())
|
||||
&& !RobotTaskStageEnum.GO_TAKE.getType().equals(robotTaskDetailDO.getTaskStage())
|
||||
&& !RobotTaskStageEnum.TAKEING.getType().equals(robotTaskDetailDO.getTaskStage())) {
|
||||
log.info("远遥点击取货完成时, 任务已经取完货 :{}", JSON.toJSONString(robotTaskDetailDO));
|
||||
throw exception(TASK_NOT_TAKE_RELEASE);
|
||||
}
|
||||
|
||||
robotTaskDetailDO.setTaskStage(RobotTaskStageEnum.GO_RELEASE.getType());
|
||||
taskDetailMapper.updateById(robotTaskDetailDO);
|
||||
|
||||
UserOperationLogSaveReqVO build = UserOperationLogSaveReqVO.builder()
|
||||
.operateAction("任务id " + taskDetailId + str + robotTaskDetailDO.getRobotNo())
|
||||
.nickName(SecurityFrameworkUtils.getLoginUserNickname()).build();
|
||||
userOperationLogService.createUserOperationLog(build);
|
||||
|
||||
taskDetailActionLogService.setPreviousTaskDoneByOrderId(taskDetailId);
|
||||
|
||||
pathPlanningService.updateBehavior(String.valueOf(taskDetailId), robotTaskDetailDO.getRobotNo()
|
||||
, "", PathIsReachEnum.END_WORK.getType());
|
||||
} else {
|
||||
throw exception(TASK_NOT_TAKE_RELEASE);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -13,6 +13,7 @@ import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotInformationDO;
|
||||
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.mysql.config.CommonConfigMapper;
|
||||
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.RobotTaskDetailMapper;
|
||||
import cn.iocoder.yudao.module.system.dal.mysql.robot.RobotTaskMapper;
|
||||
@ -20,7 +21,6 @@ import cn.iocoder.yudao.module.system.enums.common.ZeroOneEnum;
|
||||
import cn.iocoder.yudao.module.system.enums.config.CommandConfigTypeEnum;
|
||||
import cn.iocoder.yudao.module.system.enums.robot.*;
|
||||
import cn.iocoder.yudao.module.system.enums.robot.charge.ChargeModelEnum;
|
||||
import cn.iocoder.yudao.module.system.enums.robot.information.ChargeTypeEnum;
|
||||
import cn.iocoder.yudao.module.system.util.redis.RedisUtil;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
@ -63,6 +63,9 @@ public class DistributeTasksServiceImpl implements DistributeTasksService {
|
||||
@Resource
|
||||
private RedisUtil redisUtil;
|
||||
|
||||
@Resource
|
||||
private RemoteControllerInformationMapper controllerInformationMapper;
|
||||
|
||||
|
||||
/**
|
||||
* 获取待执行的机器人和任务
|
||||
@ -82,6 +85,9 @@ public class DistributeTasksServiceImpl implements DistributeTasksService {
|
||||
return pair;
|
||||
}
|
||||
|
||||
List<String> remoteRobotNos = controllerInformationMapper.getRemoteControllerRobotNos();
|
||||
log.info("远遥中的车辆 :{}",JSON.toJSONString(remoteRobotNos));
|
||||
|
||||
List<RobotInformationDO> robots = robotInformationMapper.selectList(new LambdaQueryWrapperX<RobotInformationDO>()
|
||||
.in(RobotInformationDO::getRobotStatus, RobotStatusEnum.STAND_BY.getType(), RobotStatusEnum.CHARGE.getType())
|
||||
.eq(RobotInformationDO::getRobotTaskModel, RobotTaskModelEnum.NORMAL.getType()));
|
||||
@ -101,6 +107,11 @@ public class DistributeTasksServiceImpl implements DistributeTasksService {
|
||||
CommonConfigVO chargeConfig = JSONUtil.toBean(commonConfigDO.getConfigStr(), CommonConfigVO.class);
|
||||
|
||||
for (RobotInformationDO robot : robots) {
|
||||
|
||||
if (ObjectUtil.isNotEmpty(remoteRobotNos) && remoteRobotNos.contains(robot.getRobotNo())) {
|
||||
continue;
|
||||
}
|
||||
|
||||
String taskStatusKey = RobotTaskChcheConstant.ROBOT_TASK_STATUS + robot.getMacAddress();
|
||||
String cargoDetectedKey = RobotTaskChcheConstant.ROBOT_CARGO_DETECTED + robot.getMacAddress();
|
||||
Object taskStatus = redisUtil.get(taskStatusKey);
|
||||
|
@ -9,4 +9,13 @@
|
||||
文档可见:https://www.iocoder.cn/MyBatis/x-plugins/
|
||||
-->
|
||||
|
||||
<select id="getRemoteControllerRobotNos" resultType="java.lang.String">
|
||||
select
|
||||
robot_no
|
||||
from
|
||||
remote_controller_information
|
||||
where
|
||||
deleted = '0'
|
||||
and robot_no != ''
|
||||
</select>
|
||||
</mapper>
|
@ -311,6 +311,10 @@
|
||||
select
|
||||
distinct
|
||||
t2.robot_no as robotNo,
|
||||
t2.id as id,
|
||||
t2.task_stage as taskStage,
|
||||
t2.task_status as taskStatus,
|
||||
t2.task_type as taskType,
|
||||
t1.task_no as taskNo
|
||||
from
|
||||
robot_task t1 left join robot_task_detail t2
|
||||
@ -320,6 +324,9 @@
|
||||
and t2.deleted = '0'
|
||||
and t1.task_status = '1'
|
||||
and t2.task_status ='1'
|
||||
<if test="robotNo != null and robotNo != ''">
|
||||
and t2.robot_no = #{robotNo}
|
||||
</if>
|
||||
</select>
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user