任务状态
This commit is contained in:
parent
908ac015ca
commit
df8c8b28c6
@ -0,0 +1,17 @@
|
|||||||
|
package cn.iocoder.yudao.module.mqtt.api.path.task;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
public class TaskPathPlanningDTO {
|
||||||
|
private String orderId;
|
||||||
|
private String robotNo;
|
||||||
|
private String behaviorId;
|
||||||
|
private String isReach;
|
||||||
|
}
|
@ -19,10 +19,10 @@ import java.util.List;
|
|||||||
public class TaskToPathPlanningDTO {
|
public class TaskToPathPlanningDTO {
|
||||||
|
|
||||||
@Schema(description = "robot_task_detail/robot_charge_log 的 id")
|
@Schema(description = "robot_task_detail/robot_charge_log 的 id")
|
||||||
private String id;
|
private String orderId;
|
||||||
|
|
||||||
@Schema(description = "任务类型(TASK:robot_task的任务、CHARGE:充电任务)")
|
@Schema(description = "任务类型(TASK:robot_task的任务、CHARGE:充电任务)")
|
||||||
private String type;
|
private String orderType;
|
||||||
|
|
||||||
//线库: LINE + 线库号
|
//线库: LINE + 线库号
|
||||||
//普通库位: POINT + 点位号
|
//普通库位: POINT + 点位号
|
||||||
|
@ -3,15 +3,19 @@ package cn.iocoder.yudao.module.mqtt.api.task.dto;
|
|||||||
import lombok.Builder;
|
import lombok.Builder;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
@Builder
|
@Builder
|
||||||
public class RobotAssignTaskArgDTO {
|
public class RobotAssignTaskArgDTO {
|
||||||
//检测托盘时需要抬叉的高度,现在是需要,以后不用了
|
//检测托盘时需要抬叉的高度,现在是需要,以后不用了
|
||||||
private Double check_pallet_height;
|
// private Double check_pallet_height;
|
||||||
//取货高度
|
//取货高度
|
||||||
private Double height;
|
private Double height;
|
||||||
//整型 取第几层货
|
//整型 取第几层货
|
||||||
private Double level;
|
private Double level;
|
||||||
//叉起货需要在原来高度基础上偏移的高度
|
//叉起货需要在原来高度基础上偏移的高度
|
||||||
private Double offset_height;
|
private Double offsetHeight;
|
||||||
|
|
||||||
|
private List<Pose2ds> pose2ds;
|
||||||
}
|
}
|
||||||
|
@ -12,7 +12,8 @@ import java.util.List;
|
|||||||
@Builder
|
@Builder
|
||||||
public class RobotAssignTaskDTO {
|
public class RobotAssignTaskDTO {
|
||||||
private String topic;
|
private String topic;
|
||||||
private String order_id;
|
private String orderId;
|
||||||
private String order_type;
|
private String orderType;
|
||||||
|
private String executionType;
|
||||||
private List<RobotAssignTaskDataDTO> data;
|
private List<RobotAssignTaskDataDTO> data;
|
||||||
}
|
}
|
||||||
|
@ -6,6 +6,6 @@ import java.util.List;
|
|||||||
|
|
||||||
@Data
|
@Data
|
||||||
public class RobotAssignTaskDataDTO {
|
public class RobotAssignTaskDataDTO {
|
||||||
private String command_type;
|
private String commandType;
|
||||||
private List<RobotAssignTaskArgDTO> arg;
|
private List<RobotAssignTaskArgDTO> arg;
|
||||||
}
|
}
|
||||||
|
@ -1,11 +1,14 @@
|
|||||||
|
/*
|
||||||
package cn.iocoder.yudao.module.mqtt.enums.path;
|
package cn.iocoder.yudao.module.mqtt.enums.path;
|
||||||
|
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
|
|
||||||
|
*/
|
||||||
/**
|
/**
|
||||||
*TaskToPathPlanningDTO的type
|
*TaskToPathPlanningDTO的type
|
||||||
*/
|
*//*
|
||||||
|
|
||||||
@Getter
|
@Getter
|
||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
public enum TaskTypeEnum {
|
public enum TaskTypeEnum {
|
||||||
@ -15,3 +18,4 @@ public enum TaskTypeEnum {
|
|||||||
|
|
||||||
private final String type;
|
private final String type;
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
@ -18,5 +18,5 @@ public interface RobotTaskStatusApi {
|
|||||||
|
|
||||||
@PostMapping(PREFIX + "/updateStatus")
|
@PostMapping(PREFIX + "/updateStatus")
|
||||||
@Operation(summary = "机器人完成任务上报")
|
@Operation(summary = "机器人完成任务上报")
|
||||||
CommonResult<Boolean> robotDoneTask(@RequestBody RobotCompleteTaskDTO robotCompleteTaskDTO);
|
void robotDoneTask(@RequestBody RobotCompleteTaskDTO robotCompleteTaskDTO);
|
||||||
}
|
}
|
||||||
|
@ -7,19 +7,19 @@ public class RobotCommandStateDTO {
|
|||||||
/**
|
/**
|
||||||
* 命令id
|
* 命令id
|
||||||
*/
|
*/
|
||||||
private String command_id;
|
// private String command_id;
|
||||||
/**
|
/**
|
||||||
* 命令类型
|
* 命令类型
|
||||||
*/
|
*/
|
||||||
private String command_type;
|
private String commandType;
|
||||||
/**
|
/**
|
||||||
* 执行状态
|
* 执行状态
|
||||||
*/
|
*/
|
||||||
private String execution_state;
|
private Integer executionState;
|
||||||
/**
|
/**
|
||||||
* 响应的状态码
|
* 响应的状态码
|
||||||
*/
|
*/
|
||||||
private String status_code;
|
private String statusCode;
|
||||||
/**
|
/**
|
||||||
* 失败时的错误原因
|
* 失败时的错误原因
|
||||||
*/
|
*/
|
||||||
|
@ -13,19 +13,19 @@ public class RobotCompleteTaskDTO {
|
|||||||
/**
|
/**
|
||||||
* robot_task_detail 表id
|
* robot_task_detail 表id
|
||||||
*/
|
*/
|
||||||
private Long order_id;
|
private Long orderId;
|
||||||
/**
|
/**
|
||||||
* 任务类型,暂时未定义
|
* 任务类型,暂时未定义
|
||||||
*/
|
*/
|
||||||
private String order_type;
|
private String orderType;
|
||||||
/**
|
/**
|
||||||
* 执行状态
|
* 执行状态
|
||||||
*/
|
*/
|
||||||
private Integer execution_state;
|
private Integer executionState;
|
||||||
/**
|
/**
|
||||||
* 响应的状态码
|
* 响应的状态码
|
||||||
*/
|
*/
|
||||||
private String status_code;
|
private String statusCode;
|
||||||
/**
|
/**
|
||||||
* 失败时的错误原因
|
* 失败时的错误原因
|
||||||
*/
|
*/
|
||||||
@ -37,5 +37,5 @@ public class RobotCompleteTaskDTO {
|
|||||||
/**
|
/**
|
||||||
* 子任务
|
* 子任务
|
||||||
*/
|
*/
|
||||||
private List<RobotCommandStateDTO> command_state;
|
private RobotCommandStateDTO commandStatus;
|
||||||
}
|
}
|
||||||
|
@ -241,5 +241,7 @@ public interface ErrorCodeConstants {
|
|||||||
ErrorCode TASK_CYCLE_NOT_EXISTS = new ErrorCode(1_002_046_001, "循环任务点位不存在");
|
ErrorCode TASK_CYCLE_NOT_EXISTS = new ErrorCode(1_002_046_001, "循环任务点位不存在");
|
||||||
// ========== 用户操作记录 1_002_047_001 ==========
|
// ========== 用户操作记录 1_002_047_001 ==========
|
||||||
ErrorCode OPERATE_LOG_NOT_EXISTS = new ErrorCode(1_002_047_001, "用户操作记录不存在");
|
ErrorCode OPERATE_LOG_NOT_EXISTS = new ErrorCode(1_002_047_001, "用户操作记录不存在");
|
||||||
|
// ========== 车辆前往等待点记录 1_002_048_001 ==========
|
||||||
|
ErrorCode MOVE_TO_WAIT_NOT_EXISTS = new ErrorCode(1_002_048_001, "车辆前往等待点记录不存在");
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -21,10 +21,8 @@ import cn.iocoder.yudao.module.system.constant.webSocket.WebSocketConstant;
|
|||||||
import cn.iocoder.yudao.module.system.dal.dataobject.actionlog.RobotTaskDetailActionLogDO;
|
import cn.iocoder.yudao.module.system.dal.dataobject.actionlog.RobotTaskDetailActionLogDO;
|
||||||
import cn.iocoder.yudao.module.system.dal.dataobject.config.CommonConfigDO;
|
import cn.iocoder.yudao.module.system.dal.dataobject.config.CommonConfigDO;
|
||||||
import cn.iocoder.yudao.module.system.dal.dataobject.houselocation.WareHouseLocationDO;
|
import cn.iocoder.yudao.module.system.dal.dataobject.houselocation.WareHouseLocationDO;
|
||||||
import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotChargeLogDO;
|
import cn.iocoder.yudao.module.system.dal.dataobject.positionmap.PositionMapDO;
|
||||||
import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotTaskDO;
|
import cn.iocoder.yudao.module.system.dal.dataobject.robot.*;
|
||||||
import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotTaskDetailDO;
|
|
||||||
import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotWarnMsgDO;
|
|
||||||
import cn.iocoder.yudao.module.system.dal.mysql.actionlog.RobotTaskDetailActionLogMapper;
|
import cn.iocoder.yudao.module.system.dal.mysql.actionlog.RobotTaskDetailActionLogMapper;
|
||||||
import cn.iocoder.yudao.module.system.dal.mysql.cycle.TaskCycleMapper;
|
import cn.iocoder.yudao.module.system.dal.mysql.cycle.TaskCycleMapper;
|
||||||
import cn.iocoder.yudao.module.system.dal.mysql.houselocation.WareHouseLocationMapper;
|
import cn.iocoder.yudao.module.system.dal.mysql.houselocation.WareHouseLocationMapper;
|
||||||
@ -32,13 +30,18 @@ import cn.iocoder.yudao.module.system.dal.mysql.information.DeviceInformationMap
|
|||||||
import cn.iocoder.yudao.module.system.dal.mysql.robot.*;
|
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.common.ZeroOneEnum;
|
||||||
import cn.iocoder.yudao.module.system.enums.device.DeviceUseStatusEnum;
|
import cn.iocoder.yudao.module.system.enums.device.DeviceUseStatusEnum;
|
||||||
|
import cn.iocoder.yudao.module.system.enums.path.PathIsReachEnum;
|
||||||
|
import cn.iocoder.yudao.module.system.enums.path.PathTaskType;
|
||||||
import cn.iocoder.yudao.module.system.enums.robot.*;
|
import cn.iocoder.yudao.module.system.enums.robot.*;
|
||||||
import cn.iocoder.yudao.module.system.enums.robot.charge.ChargeTaskStatusEnum;
|
import cn.iocoder.yudao.module.system.enums.robot.charge.ChargeTaskStatusEnum;
|
||||||
import cn.iocoder.yudao.module.system.enums.robot.task.RobotStatusCodeEnum;
|
import cn.iocoder.yudao.module.system.enums.robot.task.RobotStatusCodeEnum;
|
||||||
import cn.iocoder.yudao.module.system.enums.robot.task.RobotTaksOrderTypeEnum;
|
import cn.iocoder.yudao.module.system.enums.robot.task.RobotTaskStageEnum;
|
||||||
|
import cn.iocoder.yudao.module.system.enums.wait.WaitStatusEnum;
|
||||||
|
import cn.iocoder.yudao.module.system.service.path.PathPlanningService;
|
||||||
import cn.iocoder.yudao.module.system.service.robot.RobotInformationService;
|
import cn.iocoder.yudao.module.system.service.robot.RobotInformationService;
|
||||||
import cn.iocoder.yudao.module.system.service.robot.RobotTaskDetailService;
|
import cn.iocoder.yudao.module.system.service.robot.RobotTaskDetailService;
|
||||||
import cn.iocoder.yudao.module.system.service.robot.RobotWarnMsgService;
|
import cn.iocoder.yudao.module.system.service.robot.RobotWarnMsgService;
|
||||||
|
import cn.iocoder.yudao.module.system.service.wait.MoveToWaitService;
|
||||||
import cn.iocoder.yudao.module.system.util.redis.RedisUtil;
|
import cn.iocoder.yudao.module.system.util.redis.RedisUtil;
|
||||||
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSON;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
@ -112,7 +115,13 @@ public class RobotTaskStatusApiImpl implements RobotTaskStatusApi {
|
|||||||
@Resource
|
@Resource
|
||||||
private DeviceInformationMapper deviceInformationMapper;
|
private DeviceInformationMapper deviceInformationMapper;
|
||||||
|
|
||||||
@Value("${zn.robot_doing_action.doing_action_cache_time:3*60*60}")
|
@Resource
|
||||||
|
private MoveToWaitService moveToWaitService;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private PathPlanningService pathPlanningService;
|
||||||
|
|
||||||
|
@Value("${zn.robot_doing_action.doing_action_cache_time:2*24*60*60}")
|
||||||
private Long doingActionCacheTime;
|
private Long doingActionCacheTime;
|
||||||
|
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
@ -121,33 +130,103 @@ public class RobotTaskStatusApiImpl implements RobotTaskStatusApi {
|
|||||||
TenantContextHolder.setTenantId(1L);
|
TenantContextHolder.setTenantId(1L);
|
||||||
String robotDoingActionKey = RobotTaskChcheConstant.ROBOT_QUERY_DOING_ACTION + robotCompleteTaskDTO.getMac();
|
String robotDoingActionKey = RobotTaskChcheConstant.ROBOT_QUERY_DOING_ACTION + robotCompleteTaskDTO.getMac();
|
||||||
|
|
||||||
if (!RobotStatusCodeEnum.SUCCESS.getType().equals(robotCompleteTaskDTO.getStatus_code())) {
|
if (!RobotStatusCodeEnum.SUCCESS.getType().equals(robotCompleteTaskDTO.getStatusCode())) {
|
||||||
log.info("车机上报异常 :{}", JSON.toJSONString(robotCompleteTaskDTO));
|
log.info("车机上报异常 :{}", JSON.toJSONString(robotCompleteTaskDTO));
|
||||||
closeTask(robotCompleteTaskDTO);
|
closeTask(robotCompleteTaskDTO);//todo 取不了和放不了的异常
|
||||||
redisUtil.del(robotDoingActionKey);
|
redisUtil.del(robotDoingActionKey);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (RobotExecutionStateConstant.UN_DO.equals(robotCompleteTaskDTO.getExecution_state())) {
|
if (RobotExecutionStateConstant.UN_DO.equals(robotCompleteTaskDTO.getExecutionState())
|
||||||
|
|| RobotExecutionStateConstant.STOP.equals(robotCompleteTaskDTO.getExecutionState())
|
||||||
|
|| RobotExecutionStateConstant.CLOSE.equals(robotCompleteTaskDTO.getExecutionState())) {
|
||||||
|
log.info("任务未开始/暂停/取消 :{}", robotCompleteTaskDTO.getOrderId());
|
||||||
return;
|
return;
|
||||||
}
|
} else if (RobotExecutionStateConstant.DONE.equals(robotCompleteTaskDTO.getExecutionState())) {
|
||||||
|
robotTaskDone(robotCompleteTaskDTO);
|
||||||
if (RobotExecutionStateConstant.DOING.equals(robotCompleteTaskDTO.getExecution_state())
|
|
||||||
&& RobotTaksOrderTypeEnum.TASK.getType().equals(robotCompleteTaskDTO.getOrder_type())) {
|
|
||||||
taskDoing(robotCompleteTaskDTO, robotDoingActionKey);
|
|
||||||
|
|
||||||
} else if (RobotExecutionStateConstant.DONE.equals(robotCompleteTaskDTO.getExecution_state())
|
|
||||||
&& RobotTaksOrderTypeEnum.TASK.getType().equals(robotCompleteTaskDTO.getOrder_type())) {
|
|
||||||
taskDone(robotCompleteTaskDTO);
|
|
||||||
redisUtil.del(robotDoingActionKey);
|
redisUtil.del(robotDoingActionKey);
|
||||||
} else if (RobotExecutionStateConstant.DOING.equals(robotCompleteTaskDTO.getExecution_state())
|
} else if (RobotExecutionStateConstant.DOING.equals(robotCompleteTaskDTO.getExecutionState())) {
|
||||||
&& RobotTaksOrderTypeEnum.AUTO_CHARGE.getType().equals(robotCompleteTaskDTO.getOrder_type())) {
|
robotTaskDoing(robotCompleteTaskDTO, robotDoingActionKey);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param robotCompleteTaskDTO
|
||||||
|
*/
|
||||||
|
private void robotTaskDoing(RobotCompleteTaskDTO robotCompleteTaskDTO, String robotDoingActionKey) {
|
||||||
|
if (PathTaskType.AUTO_CHARGE.getType().equals(robotCompleteTaskDTO.getOrderType())) {
|
||||||
chargeDoing(robotCompleteTaskDTO, robotDoingActionKey);
|
chargeDoing(robotCompleteTaskDTO, robotDoingActionKey);
|
||||||
|
} else if (PathTaskType.MOVE_TO_WAIT.getType().equals(robotCompleteTaskDTO.getOrderType())) {
|
||||||
} else if (RobotExecutionStateConstant.DONE.equals(robotCompleteTaskDTO.getExecution_state())
|
RobotTaskDetailActionLogDO logOne = new RobotTaskDetailActionLogDO();
|
||||||
&& RobotTaksOrderTypeEnum.AUTO_CHARGE.getType().equals(robotCompleteTaskDTO.getOrder_type())) {
|
logOne.setActionMsg("车辆正在前往等待点");
|
||||||
chargeDone(robotCompleteTaskDTO, robotDoingActionKey);
|
String robotNo = robotInformationService.getRobotNoByMac(robotCompleteTaskDTO.getMac());
|
||||||
|
logOne.setRobotNo(robotNo);
|
||||||
|
logOne.setTaskDetailId(robotCompleteTaskDTO.getOrderId());
|
||||||
|
taskDetailActionLogMapper.insert(logOne);
|
||||||
|
redisUtil.set(robotDoingActionKey, logOne.getActionMsg(), doingActionCacheTime);
|
||||||
|
moveToWaitService.setMoveToWaitDoing(robotCompleteTaskDTO.getOrderId(), WaitStatusEnum.GO_TO_WAIT.getType());
|
||||||
|
} else {
|
||||||
|
taskDoing(robotCompleteTaskDTO, robotDoingActionKey);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sendStartDoActionToPP(robotCompleteTaskDTO.getCommandStatus(), robotCompleteTaskDTO.getMac(),
|
||||||
|
String.valueOf(robotCompleteTaskDTO.getOrderId()));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 告诉PP开始作业
|
||||||
|
*
|
||||||
|
* @param commandStatus
|
||||||
|
* @param mac
|
||||||
|
* @param orderId
|
||||||
|
*/
|
||||||
|
public void sendStartDoActionToPP(RobotCommandStateDTO commandStatus, String mac, String orderId) {
|
||||||
|
if (ObjectUtil.isNotEmpty(commandStatus) && RobotExecutionStateConstant.DOING.equals(commandStatus.getExecutionState())
|
||||||
|
&& !CommandTypeEnum.MOVE_POSES.getType().equals(commandStatus.getCommandType())) {
|
||||||
|
String robotNo = robotInformationService.getRobotNoByMac(mac);
|
||||||
|
pathPlanningService.updateBehavior(orderId, robotNo
|
||||||
|
, "", PathIsReachEnum.START_WORK.getType());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 机器人完成任务
|
||||||
|
*
|
||||||
|
* @param robotCompleteTaskDTO
|
||||||
|
*/
|
||||||
|
private void robotTaskDone(RobotCompleteTaskDTO robotCompleteTaskDTO) {
|
||||||
|
//todo 后面考虑下充电,车机目前对充电的逻辑未定义
|
||||||
|
if (PathTaskType.MOVE.getType().equals(robotCompleteTaskDTO.getOrderType())
|
||||||
|
|| PathTaskType.MOVE_TO_WAIT_STOP.getType().equals(robotCompleteTaskDTO.getOrderType())
|
||||||
|
|| PathTaskType.TAKE.getType().equals(robotCompleteTaskDTO.getOrderType())
|
||||||
|
|| PathTaskType.RELEASE.getType().equals(robotCompleteTaskDTO.getOrderType())) {
|
||||||
|
taskDone(robotCompleteTaskDTO);
|
||||||
|
|
||||||
|
} else if (PathTaskType.TAKE_RELEASE.getType().equals(robotCompleteTaskDTO.getOrderType())) {
|
||||||
|
RobotTaskDetailDO robotTaskDetailDO = robotTaskDetailMapper.selectById(robotCompleteTaskDTO.getOrderId());
|
||||||
|
if (RobotTaskStageEnum.TAKEING.getType().equals(robotTaskDetailDO.getTaskStage())) {
|
||||||
|
pathPlanningService.updateBehavior(String.valueOf(robotCompleteTaskDTO.getOrderId()), robotTaskDetailDO.getRobotNo()
|
||||||
|
, "", PathIsReachEnum.END_WORK.getType());
|
||||||
|
} else if (RobotTaskStageEnum.RELEASEING.getType().equals(robotTaskDetailDO.getTaskStage())) {
|
||||||
|
taskDone(robotCompleteTaskDTO);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 通知PP关闭任务
|
||||||
|
*
|
||||||
|
* @param robotCompleteTaskDTO
|
||||||
|
*/
|
||||||
|
public void PPCloseOrder(RobotCompleteTaskDTO robotCompleteTaskDTO) {
|
||||||
|
String robotNo = robotInformationService.getRobotNoByMac(robotCompleteTaskDTO.getMac());
|
||||||
|
RobotClosePathPlantingDTO closePathPlanting = RobotClosePathPlantingDTO.builder()
|
||||||
|
.robotNo(robotNo)
|
||||||
|
.id(robotCompleteTaskDTO.getOrderId().toString())
|
||||||
|
.build();
|
||||||
|
commonApi.commonMethod(closePathPlanting, PathPlanningTopicConstant.KILL_TASK);
|
||||||
|
log.info("车机上报异常, 通知PP把任务取消 :{}", robotCompleteTaskDTO.getOrderId());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -157,16 +236,10 @@ public class RobotTaskStatusApiImpl implements RobotTaskStatusApi {
|
|||||||
*/
|
*/
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public void closeTask(RobotCompleteTaskDTO robotCompleteTaskDTO) {
|
public void closeTask(RobotCompleteTaskDTO robotCompleteTaskDTO) {
|
||||||
String robotNo = robotInformationService.getRobotNoByMac(robotCompleteTaskDTO.getMac());
|
PPCloseOrder(robotCompleteTaskDTO);
|
||||||
RobotClosePathPlantingDTO closePathPlanting = RobotClosePathPlantingDTO.builder()
|
|
||||||
.robotNo(robotNo)
|
|
||||||
.id(robotCompleteTaskDTO.getOrder_id().toString())
|
|
||||||
.build();
|
|
||||||
commonApi.commonMethod(closePathPlanting, PathPlanningTopicConstant.KILL_TASK);
|
|
||||||
log.info("车机上报异常, 通知PP把任务取消 :{}", robotCompleteTaskDTO.getOrder_id());
|
|
||||||
|
|
||||||
if (RobotTaksOrderTypeEnum.TASK.getType().equals(robotCompleteTaskDTO.getOrder_type())) {
|
/*if (RobotTaksOrderTypeEnum.TASK.getType().equals(robotCompleteTaskDTO.getOrderType())) {
|
||||||
RobotTaskDetailDO robotTaskDetailDO = closeTaskDetail(robotCompleteTaskDTO.getOrder_id());
|
RobotTaskDetailDO robotTaskDetailDO = closeTaskDetail(robotCompleteTaskDTO.getOrderId());
|
||||||
List<Long> locationIds = new ArrayList<>();
|
List<Long> locationIds = new ArrayList<>();
|
||||||
if (ObjectUtil.isNotEmpty(robotTaskDetailDO.getFromLocationId())) {
|
if (ObjectUtil.isNotEmpty(robotTaskDetailDO.getFromLocationId())) {
|
||||||
locationIds.add(robotTaskDetailDO.getFromLocationId());
|
locationIds.add(robotTaskDetailDO.getFromLocationId());
|
||||||
@ -179,22 +252,22 @@ public class RobotTaskStatusApiImpl implements RobotTaskStatusApi {
|
|||||||
, LocationLockEnum.YES.getType());
|
, LocationLockEnum.YES.getType());
|
||||||
}
|
}
|
||||||
|
|
||||||
} else if (RobotTaksOrderTypeEnum.AUTO_CHARGE.getType().equals(robotCompleteTaskDTO.getOrder_type())) {
|
} else if (RobotTaksOrderTypeEnum.AUTO_CHARGE.getType().equals(robotCompleteTaskDTO.getOrderType())) {
|
||||||
|
|
||||||
RobotChargeLogDO robotChargeLogDO = chargeLogMapper.selectOne(new LambdaQueryWrapper<RobotChargeLogDO>()
|
RobotChargeLogDO robotChargeLogDO = chargeLogMapper.selectOne(new LambdaQueryWrapper<RobotChargeLogDO>()
|
||||||
.eq(RobotChargeLogDO::getId, robotCompleteTaskDTO.getOrder_id()));
|
.eq(RobotChargeLogDO::getId, robotCompleteTaskDTO.getOrderId()));
|
||||||
robotChargeLogDO.setTaskStatus(ChargeTaskStatusEnum.ABNORMAL.getType());
|
robotChargeLogDO.setTaskStatus(ChargeTaskStatusEnum.ABNORMAL.getType());
|
||||||
chargeLogMapper.updateById(robotChargeLogDO);
|
chargeLogMapper.updateById(robotChargeLogDO);
|
||||||
|
|
||||||
if (ObjectUtil.isNotEmpty(robotChargeLogDO.getTaskDetailId())) {
|
if (ObjectUtil.isNotEmpty(robotChargeLogDO.getTaskDetailId())) {
|
||||||
closeTaskDetail(robotCompleteTaskDTO.getOrder_id());
|
closeTaskDetail(robotCompleteTaskDTO.getOrderId());
|
||||||
}
|
}
|
||||||
deviceInformationMapper.updateDeviceUseStatus(robotChargeLogDO.getDeviceNo(),
|
deviceInformationMapper.updateDeviceUseStatus(robotChargeLogDO.getDeviceNo(),
|
||||||
DeviceUseStatusEnum.IDLE.getType(), ZeroOneEnum.ZERO.getType());
|
DeviceUseStatusEnum.IDLE.getType(), ZeroOneEnum.ZERO.getType());
|
||||||
}
|
}*/
|
||||||
|
|
||||||
RobotWarnMsgDO warnMsg = RobotWarnMsgDO.builder().warnLevel(4)
|
/* RobotWarnMsgDO warnMsg = RobotWarnMsgDO.builder().warnLevel(4)
|
||||||
.warnCode(robotCompleteTaskDTO.getStatus_code())
|
.warnCode(robotCompleteTaskDTO.getStatusCode())
|
||||||
.robotNo(robotNo)
|
.robotNo(robotNo)
|
||||||
.warnType(RobotWarnType.ROBOT_WARN.getType())
|
.warnType(RobotWarnType.ROBOT_WARN.getType())
|
||||||
.warnMsg(robotNo +"_"+robotCompleteTaskDTO.getMessage())
|
.warnMsg(robotNo +"_"+robotCompleteTaskDTO.getMessage())
|
||||||
@ -202,11 +275,12 @@ public class RobotTaskStatusApiImpl implements RobotTaskStatusApi {
|
|||||||
.build();
|
.build();
|
||||||
warnMsgMapper.insert(warnMsg);
|
warnMsgMapper.insert(warnMsg);
|
||||||
|
|
||||||
warnMsgService.sendWarnMsgToWebsocket(warnMsg.getWarnMsg());
|
warnMsgService.sendWarnMsgToWebsocket(warnMsg.getWarnMsg());*/
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 关闭订单
|
* 关闭订单
|
||||||
|
*
|
||||||
* @param taskDetailId
|
* @param taskDetailId
|
||||||
*/
|
*/
|
||||||
public RobotTaskDetailDO closeTaskDetail(Long taskDetailId) {
|
public RobotTaskDetailDO closeTaskDetail(Long taskDetailId) {
|
||||||
@ -224,7 +298,7 @@ public class RobotTaskStatusApiImpl implements RobotTaskStatusApi {
|
|||||||
logOne.setActionMsg("车辆正在充电");
|
logOne.setActionMsg("车辆正在充电");
|
||||||
String robotNo = robotInformationService.getRobotNoByMac(robotCompleteTaskDTO.getMac());
|
String robotNo = robotInformationService.getRobotNoByMac(robotCompleteTaskDTO.getMac());
|
||||||
logOne.setRobotNo(robotNo);
|
logOne.setRobotNo(robotNo);
|
||||||
logOne.setTaskDetailId(robotCompleteTaskDTO.getOrder_id());
|
logOne.setTaskDetailId(robotCompleteTaskDTO.getOrderId());
|
||||||
taskDetailActionLogMapper.insert(logOne);
|
taskDetailActionLogMapper.insert(logOne);
|
||||||
redisUtil.set(robotDoingActionKey, logOne.getActionMsg(), doingActionCacheTime);
|
redisUtil.set(robotDoingActionKey, logOne.getActionMsg(), doingActionCacheTime);
|
||||||
}
|
}
|
||||||
@ -236,11 +310,20 @@ public class RobotTaskStatusApiImpl implements RobotTaskStatusApi {
|
|||||||
* @param robotCompleteTaskDTO
|
* @param robotCompleteTaskDTO
|
||||||
*/
|
*/
|
||||||
private void chargeDoing(RobotCompleteTaskDTO robotCompleteTaskDTO, String robotDoingActionKey) {
|
private void chargeDoing(RobotCompleteTaskDTO robotCompleteTaskDTO, String robotDoingActionKey) {
|
||||||
List<RobotCommandStateDTO> commandState = robotCompleteTaskDTO.getCommand_state();
|
RobotTaskDetailActionLogDO logOne = new RobotTaskDetailActionLogDO();
|
||||||
if (ObjectUtil.isEmpty(commandState)) {
|
RobotCommandStateDTO commandStatus = robotCompleteTaskDTO.getCommandStatus();
|
||||||
return;
|
if (ObjectUtil.isNotEmpty(commandStatus) && CommandTypeEnum.MOVE_POSES.getType().equals(commandStatus.getCommandType())) {
|
||||||
|
RobotChargeLogDO robotChargeLogDO = chargeLogMapper.selectById(robotCompleteTaskDTO.getOrderId());
|
||||||
|
logOne.setActionMsg("车辆正在前往充电点" + robotChargeLogDO.getDeviceNo());
|
||||||
|
} else if (ObjectUtil.isNotEmpty(commandStatus)) {
|
||||||
|
logOne.setActionMsg("车辆正在充电");
|
||||||
}
|
}
|
||||||
addActionLog(commandState, robotDoingActionKey);
|
|
||||||
|
String robotNo = robotInformationService.getRobotNoByMac(robotCompleteTaskDTO.getMac());
|
||||||
|
logOne.setRobotNo(robotNo);
|
||||||
|
logOne.setTaskDetailId(robotCompleteTaskDTO.getOrderId());
|
||||||
|
taskDetailActionLogMapper.insert(logOne);
|
||||||
|
redisUtil.set(robotDoingActionKey, logOne.getActionMsg(), doingActionCacheTime);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -251,12 +334,12 @@ public class RobotTaskStatusApiImpl implements RobotTaskStatusApi {
|
|||||||
private void taskDone(RobotCompleteTaskDTO robotCompleteTaskDTO) {
|
private void taskDone(RobotCompleteTaskDTO robotCompleteTaskDTO) {
|
||||||
//更新任务状态
|
//更新任务状态
|
||||||
RobotTaskDetailDO detailDO = new RobotTaskDetailDO();
|
RobotTaskDetailDO detailDO = new RobotTaskDetailDO();
|
||||||
detailDO.setId(robotCompleteTaskDTO.getOrder_id());
|
detailDO.setId(robotCompleteTaskDTO.getOrderId());
|
||||||
detailDO.setEndTime(LocalDateTime.now());
|
detailDO.setEndTime(LocalDateTime.now());
|
||||||
detailDO.setTaskStatus(robotCompleteTaskDTO.getExecution_state());
|
detailDO.setTaskStatus(RobotTaskDetailStatusEnum.DONE.getType());
|
||||||
robotTaskDetailMapper.updateRobotDetailById(detailDO);
|
robotTaskDetailMapper.updateRobotDetailById(detailDO);
|
||||||
//更新任务状态
|
//更新任务状态
|
||||||
RobotTaskDetailDO robotTaskDetailDO = robotTaskDetailMapper.selectById(robotCompleteTaskDTO.getOrder_id());
|
RobotTaskDetailDO robotTaskDetailDO = robotTaskDetailMapper.selectById(robotCompleteTaskDTO.getOrderId());
|
||||||
List<RobotTaskDetailDO> taskDetails = robotTaskDetailMapper.queryByTaskId(robotTaskDetailDO.getRobotTaskId());
|
List<RobotTaskDetailDO> taskDetails = robotTaskDetailMapper.queryByTaskId(robotTaskDetailDO.getRobotTaskId());
|
||||||
boolean done =
|
boolean done =
|
||||||
taskDetails.stream().noneMatch(v -> (v.getTaskStatus().equals(RobotTaskDetailStatusEnum.NEW.getType())));
|
taskDetails.stream().noneMatch(v -> (v.getTaskStatus().equals(RobotTaskDetailStatusEnum.NEW.getType())));
|
||||||
@ -269,31 +352,20 @@ public class RobotTaskStatusApiImpl implements RobotTaskStatusApi {
|
|||||||
taskCycleMapper.deletByRobotTaskId(taskDetails.get(0).getRobotTaskId());
|
taskCycleMapper.deletByRobotTaskId(taskDetails.get(0).getRobotTaskId());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (RobotTaskTypeEnum.MOVE.getType().equals(robotTaskDetailDO.getTaskType())) {
|
RobotInformationDO robotInformationDO = robotInformationMapper.selectOne(new LambdaQueryWrapperX<RobotInformationDO>()
|
||||||
robotInformationMapper.updateRobotTaskModel(robotTaskDetailDO.getRobotNo(), RobotTaskModelEnum.REJECTION.getType());
|
.eq(RobotInformationDO::getRobotNo, robotTaskDetailDO.getRobotNo()));
|
||||||
|
robotInformationDO.setRobotStatus(RobotStatusEnum.STAND_BY.getType());
|
||||||
|
if (RobotTaskTypeEnum.MOVE.getType().equals(robotTaskDetailDO.getTaskType())
|
||||||
|
|| (RobotTaskTypeEnum.PARK.getType().equals(robotTaskDetailDO.getTaskType())
|
||||||
|
&& ZeroOneEnum.ONE.getType().equals(robotTaskDetailDO.getNeedLock()))) {
|
||||||
|
robotInformationDO.setRobotTaskModel(RobotTaskModelEnum.REJECTION.getType());
|
||||||
}
|
}
|
||||||
|
robotInformationMapper.updateBatch(robotInformationDO);
|
||||||
|
//同步任务完成给PP
|
||||||
|
pathPlanningService.updateBehavior(String.valueOf(robotCompleteTaskDTO.getOrderId()), robotTaskDetailDO.getRobotNo()
|
||||||
|
, "", PathIsReachEnum.END_WORK.getType());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* 添加操作日志
|
|
||||||
*
|
|
||||||
* @param commandState
|
|
||||||
*/
|
|
||||||
public void addActionLog(List<RobotCommandStateDTO> commandState, String robotDoingActionKey) {
|
|
||||||
RobotCommandStateDTO robotCommandStateDTO = commandState.stream()
|
|
||||||
.filter(v -> RobotExecutionStateConstant.DOING.equals(Integer.valueOf(v.getExecution_state())))
|
|
||||||
.findFirst()
|
|
||||||
.orElse(null);
|
|
||||||
if (ObjectUtil.isNotEmpty(robotCommandStateDTO)) {
|
|
||||||
String robotDoingActionLogKey = RobotTaskChcheConstant.ROBOT_ACTION_LOG_ENTITY + robotCommandStateDTO.getCommand_id();
|
|
||||||
Object o = redisUtil.get(robotDoingActionLogKey);
|
|
||||||
if (ObjectUtil.isNotEmpty(o)) {
|
|
||||||
RobotTaskDetailActionLogDO actionLog = JSON.parseObject(JSON.toJSONString(o), RobotTaskDetailActionLogDO.class);
|
|
||||||
taskDetailActionLogMapper.insert(actionLog);
|
|
||||||
redisUtil.set(robotDoingActionKey, actionLog.getActionMsg(), doingActionCacheTime);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 任务处理中
|
* 任务处理中
|
||||||
@ -302,51 +374,74 @@ public class RobotTaskStatusApiImpl implements RobotTaskStatusApi {
|
|||||||
*/
|
*/
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public void taskDoing(RobotCompleteTaskDTO robotCompleteTaskDTO, String robotDoingActionKey) {
|
public void taskDoing(RobotCompleteTaskDTO robotCompleteTaskDTO, String robotDoingActionKey) {
|
||||||
List<RobotCommandStateDTO> commandState = robotCompleteTaskDTO.getCommand_state();
|
|
||||||
if (ObjectUtil.isEmpty(commandState)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
addActionLog(commandState, robotDoingActionKey);
|
|
||||||
|
|
||||||
String robotActionTakeGoodsKey = RobotTaskChcheConstant.ROBOT_ACTION_TAKE_GOODS + robotCompleteTaskDTO.getOrder_id();
|
RobotTaskDetailDO robotTaskDetailDO = robotTaskDetailMapper.selectById(robotCompleteTaskDTO.getOrderId());
|
||||||
Object o1 = redisUtil.get(robotActionTakeGoodsKey);
|
Long taskStage = robotTaskDetailDO.getTaskStage();
|
||||||
|
|
||||||
String robotActionReleaseGoodsKey = RobotTaskChcheConstant.ROBOT_ACTION_RELEASE_GOODS + robotCompleteTaskDTO.getOrder_id();
|
RobotCommandStateDTO commandStatus = robotCompleteTaskDTO.getCommandStatus();
|
||||||
Object o2 = redisUtil.get(robotActionReleaseGoodsKey);
|
String commandType = commandStatus.getCommandType();
|
||||||
|
|
||||||
if (ObjectUtil.isEmpty(o1) && ObjectUtil.isEmpty(o2)) {
|
RobotTaskDetailActionLogDO logOne = new RobotTaskDetailActionLogDO();
|
||||||
return;
|
if (PathTaskType.TAKE_RELEASE.getType().equals(robotCompleteTaskDTO.getOrderType())) {
|
||||||
}
|
if (CommandTypeEnum.MOVE_POSES.getType().equals(commandType) && RobotTaskStageEnum.UN_START.getType().equals(taskStage)) {
|
||||||
|
logOne.setActionMsg("车辆正在前往" + robotTaskDetailDO.getFromLocationNo() + "取货");
|
||||||
String takeCommonId = ObjectUtil.isNotEmpty(o1) ? String.valueOf(o1) : null;
|
robotTaskDetailDO.setTaskStage(RobotTaskStageEnum.GO_TAKE.getType());
|
||||||
String releaseCommonId = ObjectUtil.isNotEmpty(o2) ? String.valueOf(o2) : null;
|
} else if (CommandTypeEnum.WORK_PICK_UP_GOODS.getType().equals(commandType)) {
|
||||||
|
logOne.setActionMsg("车辆正在取货");
|
||||||
for (RobotCommandStateDTO commandStateDTO : commandState) {
|
robotTaskDetailDO.setTaskStage(RobotTaskStageEnum.TAKEING.getType());
|
||||||
//释放取的库位
|
} else if (CommandTypeEnum.WORK_DROP_OFF_GOODS.getType().equals(commandType)) {
|
||||||
if (RobotExecutionStateConstant.DONE.equals(Integer.valueOf(commandStateDTO.getExecution_state()))
|
logOne.setActionMsg("车辆正在放货");
|
||||||
&& ObjectUtil.isNotEmpty(takeCommonId) && takeCommonId.equals(commandStateDTO.getCommand_id())) {
|
robotTaskDetailDO.setTaskStage(RobotTaskStageEnum.RELEASEING.getType());
|
||||||
RobotTaskDetailActionLogDO actionLogDO =
|
} else if (CommandTypeEnum.MOVE_POSES.getType().equals(commandType)) {
|
||||||
taskDetailActionLogMapper.selectOne(new LambdaQueryWrapperX<RobotTaskDetailActionLogDO>()
|
logOne.setActionMsg("车辆正在前往" + robotTaskDetailDO.getToLocationNo() + "放货");
|
||||||
.eq(RobotTaskDetailActionLogDO::getCommandId, commandStateDTO.getCommand_id()));
|
robotTaskDetailDO.setTaskStage(RobotTaskStageEnum.GO_RELEASE.getType());
|
||||||
if (ObjectUtil.isNotEmpty(actionLogDO) && ObjectUtil.isNotEmpty(actionLogDO.getTaskDetailId())) {
|
|
||||||
freeLocation(true, actionLogDO.getTaskDetailId());
|
|
||||||
redisUtil.del(robotActionTakeGoodsKey);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//释放放的库位
|
} else if (PathTaskType.CHARGE.getType().equals(robotCompleteTaskDTO.getOrderType())) {
|
||||||
if (RobotExecutionStateConstant.DONE.equals(Integer.valueOf(commandStateDTO.getExecution_state()))
|
RobotChargeLogDO robotChargeLogDO = chargeLogMapper.selectById(robotCompleteTaskDTO.getOrderId());
|
||||||
&& ObjectUtil.isNotEmpty(releaseCommonId) && releaseCommonId.equals(commandStateDTO.getCommand_id())) {
|
if (CommandTypeEnum.MOVE_POSES.getType().equals(commandType)) {
|
||||||
RobotTaskDetailActionLogDO actionLogDO =
|
logOne.setActionMsg("车辆正在前往" + robotChargeLogDO.getDeviceNo() + "充电");
|
||||||
taskDetailActionLogMapper.selectOne(new LambdaQueryWrapperX<RobotTaskDetailActionLogDO>()
|
robotTaskDetailDO.setTaskStage(RobotTaskStageEnum.MOVE.getType());
|
||||||
.eq(RobotTaskDetailActionLogDO::getCommandId, commandStateDTO.getCommand_id()));
|
} else {
|
||||||
if (ObjectUtil.isNotEmpty(actionLogDO) && ObjectUtil.isNotEmpty(actionLogDO.getTaskDetailId())) {
|
logOne.setActionMsg("车辆正在充电");
|
||||||
freeLocation(false, actionLogDO.getTaskDetailId());
|
robotTaskDetailDO.setTaskStage(RobotTaskStageEnum.CHARGEING.getType());
|
||||||
redisUtil.del(robotActionReleaseGoodsKey);
|
}
|
||||||
}
|
|
||||||
|
} else if (PathTaskType.MOVE.getType().equals(robotCompleteTaskDTO.getOrderType())) {
|
||||||
|
if (CommandTypeEnum.MOVE_POSES.getType().equals(commandType)) {
|
||||||
|
logOne.setActionMsg("车辆正在前往" + robotTaskDetailDO.getToLocationNo());
|
||||||
|
robotTaskDetailDO.setTaskStage(RobotTaskStageEnum.MOVE.getType());
|
||||||
|
}
|
||||||
|
} else if (PathTaskType.MOVE_TO_WAIT_STOP.getType().equals(robotCompleteTaskDTO.getOrderType())) {
|
||||||
|
if (CommandTypeEnum.MOVE_POSES.getType().equals(commandType)) {
|
||||||
|
logOne.setActionMsg("车辆正在前往" + robotTaskDetailDO.getToLocationNo());
|
||||||
|
robotTaskDetailDO.setTaskStage(RobotTaskStageEnum.MOVE.getType());
|
||||||
|
}
|
||||||
|
} else if (PathTaskType.TAKE.getType().equals(robotCompleteTaskDTO.getOrderType())) {
|
||||||
|
if (CommandTypeEnum.MOVE_POSES.getType().equals(commandType) && RobotTaskStageEnum.UN_START.getType().equals(taskStage)) {
|
||||||
|
logOne.setActionMsg("车辆正在前往" + robotTaskDetailDO.getFromLocationNo() + "取货");
|
||||||
|
robotTaskDetailDO.setTaskStage(RobotTaskStageEnum.GO_TAKE.getType());
|
||||||
|
} else if (CommandTypeEnum.WORK_PICK_UP_GOODS.getType().equals(commandType)) {
|
||||||
|
logOne.setActionMsg("车辆正在取货");
|
||||||
|
robotTaskDetailDO.setTaskStage(RobotTaskStageEnum.TAKEING.getType());
|
||||||
|
}
|
||||||
|
|
||||||
|
} else if (PathTaskType.RELEASE.getType().equals(robotCompleteTaskDTO.getOrderType())) {
|
||||||
|
if (CommandTypeEnum.MOVE_POSES.getType().equals(commandType) && RobotTaskStageEnum.UN_START.getType().equals(taskStage)) {
|
||||||
|
logOne.setActionMsg("车辆正在前往" + robotTaskDetailDO.getToLocationNo() + "放货");
|
||||||
|
robotTaskDetailDO.setTaskStage(RobotTaskStageEnum.GO_RELEASE.getType());
|
||||||
|
} else if (CommandTypeEnum.WORK_DROP_OFF_GOODS.getType().equals(commandType)) {
|
||||||
|
logOne.setActionMsg("车辆正在放货");
|
||||||
|
robotTaskDetailDO.setTaskStage(RobotTaskStageEnum.RELEASEING.getType());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
String robotNo = robotInformationService.getRobotNoByMac(robotCompleteTaskDTO.getMac());
|
||||||
|
logOne.setRobotNo(robotNo);
|
||||||
|
logOne.setTaskDetailId(robotCompleteTaskDTO.getOrderId());
|
||||||
|
taskDetailActionLogMapper.insert(logOne);
|
||||||
|
redisUtil.set(robotDoingActionKey, logOne.getActionMsg(), doingActionCacheTime);
|
||||||
|
robotTaskDetailMapper.updateBatch(robotTaskDetailDO);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void freeLocation(Boolean isTake, Long taskDetailId) {
|
public void freeLocation(Boolean isTake, Long taskDetailId) {
|
||||||
@ -385,11 +480,9 @@ public class RobotTaskStatusApiImpl implements RobotTaskStatusApi {
|
|||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public CommonResult<Boolean> robotDoneTask(RobotCompleteTaskDTO robotCompleteTaskDTO) {
|
public void robotDoneTask(RobotCompleteTaskDTO robotCompleteTaskDTO) {
|
||||||
taskExecutor.execute(() -> {
|
taskExecutor.execute(() -> {
|
||||||
doRobotDoneTask(robotCompleteTaskDTO);
|
doRobotDoneTask(robotCompleteTaskDTO);
|
||||||
});
|
});
|
||||||
|
|
||||||
return CommonResult.success(true);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -83,7 +83,7 @@ public class PathPlanningTopicConstant {
|
|||||||
/**
|
/**
|
||||||
* 实时行为上报
|
* 实时行为上报
|
||||||
*/
|
*/
|
||||||
public static String UPDATE_ACTION = "UPDATE_ACTION";
|
public static String UPDATE_BEHAVIOR = "UPDATE_BEHAVIOR";
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -36,8 +36,8 @@ public class RobotTaskChcheConstant {
|
|||||||
public static String ROBOT_ACTION_LOG_ENTITY = "robot:action:log:entity";
|
public static String ROBOT_ACTION_LOG_ENTITY = "robot:action:log:entity";
|
||||||
|
|
||||||
//机器人取货完成(拼接robot_task_detail的id)
|
//机器人取货完成(拼接robot_task_detail的id)
|
||||||
public static String ROBOT_ACTION_TAKE_GOODS = "robot:take:";
|
// public static String ROBOT_ACTION_TAKE_GOODS = "robot:take:";
|
||||||
|
|
||||||
//机器人放货完成(拼接robot_task_detail的id)
|
//机器人放货完成(拼接robot_task_detail的id)
|
||||||
public static String ROBOT_ACTION_RELEASE_GOODS = "robot:release:";
|
// public static String ROBOT_ACTION_RELEASE_GOODS = "robot:release:";
|
||||||
}
|
}
|
||||||
|
@ -5,8 +5,8 @@ import lombok.Data;
|
|||||||
@Data
|
@Data
|
||||||
public class TaskOrderConfigDTO {
|
public class TaskOrderConfigDTO {
|
||||||
|
|
||||||
private String task_assignment_strategy;
|
private String taskAssignmentStrategy;
|
||||||
private String priority_factor;
|
private String priorityFactor;
|
||||||
private String time_factor;
|
private String timeFactor;
|
||||||
private String time_difference_threshold_second;
|
private String timeDifferenceThresholdSecond;
|
||||||
}
|
}
|
||||||
|
@ -52,4 +52,7 @@ public class PositionMapItemPageReqVO extends PageParam {
|
|||||||
@Schema(description = "排序的位置,越大越优先堆放")
|
@Schema(description = "排序的位置,越大越优先堆放")
|
||||||
private Long locationNumber;
|
private Long locationNumber;
|
||||||
|
|
||||||
|
@Schema(description = "等待点使用状态(0.空闲 1.使用中)")
|
||||||
|
private Integer useStatus;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -70,4 +70,8 @@ public class PositionMapItemRespVO {
|
|||||||
@ExcelProperty("排序的位置,越大越优先堆放")
|
@ExcelProperty("排序的位置,越大越优先堆放")
|
||||||
private Long locationNumber;
|
private Long locationNumber;
|
||||||
|
|
||||||
|
@Schema(description = "等待点使用状态(0.空闲 1.使用中)")
|
||||||
|
@ExcelProperty("等待点使用状态(0.空闲 1.使用中)")
|
||||||
|
private Integer useStatus;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -42,4 +42,7 @@ public class PositionMapItemSaveReqVO {
|
|||||||
|
|
||||||
@Schema(description = "排序的位置,越大越优先堆放")
|
@Schema(description = "排序的位置,越大越优先堆放")
|
||||||
private Long locationNumber;
|
private Long locationNumber;
|
||||||
|
|
||||||
|
@Schema(description = "等待点使用状态(0.空闲 1.使用中)")
|
||||||
|
private Integer useStatus;
|
||||||
}
|
}
|
||||||
|
@ -56,7 +56,7 @@ public class RobotTaskDetailPageReqVO extends PageParam {
|
|||||||
@Schema(description = "任务状态(0:未开始、1:执行中、2:已完成、3:已取消、4:异常)", example = "1")
|
@Schema(description = "任务状态(0:未开始、1:执行中、2:已完成、3:已取消、4:异常)", example = "1")
|
||||||
private Integer taskStatus;
|
private Integer taskStatus;
|
||||||
|
|
||||||
@Schema(description = "任务阶段(0:待执行、1:前往取货、2:取货中、3:运输中、4:放货中、5:结束)")
|
@Schema(description = "任务阶段(0:待执行、1:前往取货、2:取货中、3:前往放货、4:放货中、5:结束、6:移动中、7:正在充电)")
|
||||||
private Long taskStage;
|
private Long taskStage;
|
||||||
|
|
||||||
@Schema(description = "开始时间")
|
@Schema(description = "开始时间")
|
||||||
|
@ -62,8 +62,8 @@ public class RobotTaskDetailRespVO {
|
|||||||
@ExcelProperty("任务状态(0:未开始、1:执行中、2:已完成、3:已取消、4:异常)")
|
@ExcelProperty("任务状态(0:未开始、1:执行中、2:已完成、3:已取消、4:异常)")
|
||||||
private Integer taskStatus;
|
private Integer taskStatus;
|
||||||
|
|
||||||
@Schema(description = "任务阶段(0:待执行、1:前往取货、2:取货中、3:运输中、4:放货中、5:结束)")
|
@Schema(description = "任务阶段(0:待执行、1:前往取货、2:取货中、3:前往放货、4:放货中、5:结束、6:移动中、7:正在充电)")
|
||||||
@ExcelProperty("任务阶段(0:待执行、1:前往取货、2:取货中、3:运输中、4:放货中、5:结束)")
|
@ExcelProperty("任务阶段(0:待执行、1:前往取货、2:取货中、3:前往放货、4:放货中、5:结束、6:移动中、7:正在充电)")
|
||||||
private Long taskStage;
|
private Long taskStage;
|
||||||
|
|
||||||
@Schema(description = "开始时间")
|
@Schema(description = "开始时间")
|
||||||
|
@ -62,7 +62,7 @@ public class RobotTaskDetailSaveReqVO {
|
|||||||
@Schema(description = "任务状态(0:未开始、1:执行中、2:已完成、3:已取消、4:异常)", example = "1")
|
@Schema(description = "任务状态(0:未开始、1:执行中、2:已完成、3:已取消、4:异常)", example = "1")
|
||||||
private Integer taskStatus;
|
private Integer taskStatus;
|
||||||
|
|
||||||
@Schema(description = "任务阶段(0:待执行、1:前往取货、2:取货中、3:运输中、4:放货中、5:结束)")
|
@Schema(description = "任务阶段(0:待执行、1:前往取货、2:取货中、3:前往放货、4:放货中、5:结束、6:移动中、7:正在充电)")
|
||||||
private Long taskStage;
|
private Long taskStage;
|
||||||
|
|
||||||
@Schema(description = "开始时间")
|
@Schema(description = "开始时间")
|
||||||
|
@ -0,0 +1,97 @@
|
|||||||
|
package cn.iocoder.yudao.module.system.controller.admin.wait;
|
||||||
|
|
||||||
|
import cn.iocoder.yudao.module.system.controller.admin.wait.vo.MoveToWaitPageReqVO;
|
||||||
|
import cn.iocoder.yudao.module.system.controller.admin.wait.vo.MoveToWaitRespVO;
|
||||||
|
import cn.iocoder.yudao.module.system.controller.admin.wait.vo.MoveToWaitSaveReqVO;
|
||||||
|
import cn.iocoder.yudao.module.system.dal.dataobject.wait.MoveToWaitDO;
|
||||||
|
import cn.iocoder.yudao.module.system.service.wait.MoveToWaitService;
|
||||||
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
import org.springframework.validation.annotation.Validated;
|
||||||
|
import org.springframework.security.access.prepost.PreAuthorize;
|
||||||
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||||
|
import io.swagger.v3.oas.annotations.Parameter;
|
||||||
|
import io.swagger.v3.oas.annotations.Operation;
|
||||||
|
|
||||||
|
import javax.validation.constraints.*;
|
||||||
|
import javax.validation.*;
|
||||||
|
import javax.servlet.http.*;
|
||||||
|
import java.util.*;
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
import cn.iocoder.yudao.framework.common.pojo.PageParam;
|
||||||
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||||
|
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
|
||||||
|
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
||||||
|
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
|
||||||
|
|
||||||
|
import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
|
||||||
|
|
||||||
|
import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog;
|
||||||
|
import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.*;
|
||||||
|
|
||||||
|
|
||||||
|
@Tag(name = "管理后台 - 车辆前往等待点记录")
|
||||||
|
@RestController
|
||||||
|
@RequestMapping("/wait/move-to-wait")
|
||||||
|
@Validated
|
||||||
|
public class MoveToWaitController {
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private MoveToWaitService moveToWaitService;
|
||||||
|
|
||||||
|
@PostMapping("/create")
|
||||||
|
@Operation(summary = "创建车辆前往等待点记录")
|
||||||
|
@PreAuthorize("@ss.hasPermission('wait:move-to-wait:create')")
|
||||||
|
public CommonResult<Long> createMoveToWait(@Valid @RequestBody MoveToWaitSaveReqVO createReqVO) {
|
||||||
|
return success(moveToWaitService.createMoveToWait(createReqVO));
|
||||||
|
}
|
||||||
|
|
||||||
|
@PutMapping("/update")
|
||||||
|
@Operation(summary = "更新车辆前往等待点记录")
|
||||||
|
@PreAuthorize("@ss.hasPermission('wait:move-to-wait:update')")
|
||||||
|
public CommonResult<Boolean> updateMoveToWait(@Valid @RequestBody MoveToWaitSaveReqVO updateReqVO) {
|
||||||
|
moveToWaitService.updateMoveToWait(updateReqVO);
|
||||||
|
return success(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
@DeleteMapping("/delete")
|
||||||
|
@Operation(summary = "删除车辆前往等待点记录")
|
||||||
|
@Parameter(name = "id", description = "编号", required = true)
|
||||||
|
@PreAuthorize("@ss.hasPermission('wait:move-to-wait:delete')")
|
||||||
|
public CommonResult<Boolean> deleteMoveToWait(@RequestParam("id") Long id) {
|
||||||
|
moveToWaitService.deleteMoveToWait(id);
|
||||||
|
return success(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping("/get")
|
||||||
|
@Operation(summary = "获得车辆前往等待点记录")
|
||||||
|
@Parameter(name = "id", description = "编号", required = true, example = "1024")
|
||||||
|
@PreAuthorize("@ss.hasPermission('wait:move-to-wait:query')")
|
||||||
|
public CommonResult<MoveToWaitRespVO> getMoveToWait(@RequestParam("id") Long id) {
|
||||||
|
MoveToWaitDO moveToWait = moveToWaitService.getMoveToWait(id);
|
||||||
|
return success(BeanUtils.toBean(moveToWait, MoveToWaitRespVO.class));
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping("/page")
|
||||||
|
@Operation(summary = "获得车辆前往等待点记录分页")
|
||||||
|
@PreAuthorize("@ss.hasPermission('wait:move-to-wait:query')")
|
||||||
|
public CommonResult<PageResult<MoveToWaitRespVO>> getMoveToWaitPage(@Valid MoveToWaitPageReqVO pageReqVO) {
|
||||||
|
PageResult<MoveToWaitDO> pageResult = moveToWaitService.getMoveToWaitPage(pageReqVO);
|
||||||
|
return success(BeanUtils.toBean(pageResult, MoveToWaitRespVO.class));
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping("/export-excel")
|
||||||
|
@Operation(summary = "导出车辆前往等待点记录 Excel")
|
||||||
|
@PreAuthorize("@ss.hasPermission('wait:move-to-wait:export')")
|
||||||
|
@ApiAccessLog(operateType = EXPORT)
|
||||||
|
public void exportMoveToWaitExcel(@Valid MoveToWaitPageReqVO pageReqVO,
|
||||||
|
HttpServletResponse response) throws IOException {
|
||||||
|
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
|
||||||
|
List<MoveToWaitDO> list = moveToWaitService.getMoveToWaitPage(pageReqVO).getList();
|
||||||
|
// 导出 Excel
|
||||||
|
ExcelUtils.write(response, "车辆前往等待点记录.xls", "数据", MoveToWaitRespVO.class,
|
||||||
|
BeanUtils.toBean(list, MoveToWaitRespVO.class));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,31 @@
|
|||||||
|
package cn.iocoder.yudao.module.system.controller.admin.wait.vo;
|
||||||
|
|
||||||
|
import lombok.*;
|
||||||
|
import java.util.*;
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import cn.iocoder.yudao.framework.common.pojo.PageParam;
|
||||||
|
import org.springframework.format.annotation.DateTimeFormat;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
|
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
|
||||||
|
|
||||||
|
@Schema(description = "管理后台 - 车辆前往等待点记录分页 Request VO")
|
||||||
|
@Data
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
@ToString(callSuper = true)
|
||||||
|
public class MoveToWaitPageReqVO extends PageParam {
|
||||||
|
|
||||||
|
@Schema(description = "AGV编号")
|
||||||
|
private String robotNo;
|
||||||
|
|
||||||
|
@Schema(description = "地图字表节点id", example = "15970")
|
||||||
|
private Long positionMapItemId;
|
||||||
|
|
||||||
|
@Schema(description = "任务状态(0:未开始、1:前往等待点、2:已到达等待点、3:已离开等待点)", example = "1")
|
||||||
|
private Integer waitStatus;
|
||||||
|
|
||||||
|
@Schema(description = "创建时间")
|
||||||
|
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
|
||||||
|
private LocalDateTime[] createTime;
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,35 @@
|
|||||||
|
package cn.iocoder.yudao.module.system.controller.admin.wait.vo;
|
||||||
|
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import lombok.*;
|
||||||
|
import java.util.*;
|
||||||
|
import org.springframework.format.annotation.DateTimeFormat;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import com.alibaba.excel.annotation.*;
|
||||||
|
|
||||||
|
@Schema(description = "管理后台 - 车辆前往等待点记录 Response VO")
|
||||||
|
@Data
|
||||||
|
@ExcelIgnoreUnannotated
|
||||||
|
public class MoveToWaitRespVO {
|
||||||
|
|
||||||
|
@Schema(description = "主键ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "19107")
|
||||||
|
@ExcelProperty("主键ID")
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
@Schema(description = "AGV编号")
|
||||||
|
@ExcelProperty("AGV编号")
|
||||||
|
private String robotNo;
|
||||||
|
|
||||||
|
@Schema(description = "地图字表节点id", example = "15970")
|
||||||
|
@ExcelProperty("地图字表节点id")
|
||||||
|
private Long positionMapItemId;
|
||||||
|
|
||||||
|
@Schema(description = "任务状态(0:未开始、1:前往等待点、2:已到达等待点、3:已离开等待点)", example = "1")
|
||||||
|
@ExcelProperty("任务状态(0:未开始、1:前往等待点、2:已到达等待点、3:已离开等待点)")
|
||||||
|
private Integer waitStatus;
|
||||||
|
|
||||||
|
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||||
|
@ExcelProperty("创建时间")
|
||||||
|
private LocalDateTime createTime;
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,24 @@
|
|||||||
|
package cn.iocoder.yudao.module.system.controller.admin.wait.vo;
|
||||||
|
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import lombok.*;
|
||||||
|
import java.util.*;
|
||||||
|
import javax.validation.constraints.*;
|
||||||
|
|
||||||
|
@Schema(description = "管理后台 - 车辆前往等待点记录新增/修改 Request VO")
|
||||||
|
@Data
|
||||||
|
public class MoveToWaitSaveReqVO {
|
||||||
|
|
||||||
|
@Schema(description = "主键ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "19107")
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
@Schema(description = "AGV编号")
|
||||||
|
private String robotNo;
|
||||||
|
|
||||||
|
@Schema(description = "地图字表节点id", example = "15970")
|
||||||
|
private Long positionMapItemId;
|
||||||
|
|
||||||
|
@Schema(description = "任务状态(0:未开始、1:前往等待点、2:已到达等待点、3:已离开等待点)", example = "1")
|
||||||
|
private Integer waitStatus;
|
||||||
|
|
||||||
|
}
|
@ -77,5 +77,9 @@ public class PositionMapItemDO extends BaseDO {
|
|||||||
* 排序的位置,越大越优先堆放
|
* 排序的位置,越大越优先堆放
|
||||||
*/
|
*/
|
||||||
private Long locationNumber;
|
private Long locationNumber;
|
||||||
|
/**
|
||||||
|
* 等待点使用状态(0.空闲 1.使用中)
|
||||||
|
*/
|
||||||
|
private Integer useStatus;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -96,7 +96,7 @@ public class RobotTaskDetailDO extends BaseDO {
|
|||||||
*/
|
*/
|
||||||
private Integer taskStatus;
|
private Integer taskStatus;
|
||||||
/**
|
/**
|
||||||
* 任务阶段(0:待执行、1:前往取货、2:取货中、3:运输中、4:放货中、5:结束)
|
* 任务阶段(0:待执行、1:前往取货、2:取货中、3:前往放货、4:放货中、5:结束、6:移动中、7:正在充电)
|
||||||
*/
|
*/
|
||||||
private Long taskStage;
|
private Long taskStage;
|
||||||
/**
|
/**
|
||||||
|
@ -0,0 +1,43 @@
|
|||||||
|
package cn.iocoder.yudao.module.system.dal.dataobject.wait;
|
||||||
|
|
||||||
|
import lombok.*;
|
||||||
|
import java.util.*;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import com.baomidou.mybatisplus.annotation.*;
|
||||||
|
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 车辆前往等待点记录 DO
|
||||||
|
*
|
||||||
|
* @author 陈宾顺
|
||||||
|
*/
|
||||||
|
@TableName("robot_move_to_wait")
|
||||||
|
@KeySequence("robot_move_to_wait_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
|
||||||
|
@Data
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
@ToString(callSuper = true)
|
||||||
|
@Builder
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
public class MoveToWaitDO extends BaseDO {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 主键ID
|
||||||
|
*/
|
||||||
|
@TableId
|
||||||
|
private Long id;
|
||||||
|
/**
|
||||||
|
* AGV编号
|
||||||
|
*/
|
||||||
|
private String robotNo;
|
||||||
|
/**
|
||||||
|
* 地图字表节点id
|
||||||
|
*/
|
||||||
|
private Long positionMapItemId;
|
||||||
|
/**
|
||||||
|
* 任务状态(0:未开始、1:前往等待点、2:已到达等待点、3:已离开等待点)
|
||||||
|
*/
|
||||||
|
private Integer waitStatus;
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,29 @@
|
|||||||
|
package cn.iocoder.yudao.module.system.dal.mysql.wait;
|
||||||
|
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
|
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 org.apache.ibatis.annotations.Mapper;
|
||||||
|
|
||||||
|
import cn.iocoder.yudao.module.system.controller.admin.wait.vo.*;
|
||||||
|
import cn.iocoder.yudao.module.system.dal.dataobject.wait.MoveToWaitDO;
|
||||||
|
/**
|
||||||
|
* 车辆前往等待点记录 Mapper
|
||||||
|
*
|
||||||
|
* @author 陈宾顺
|
||||||
|
*/
|
||||||
|
@Mapper
|
||||||
|
public interface MoveToWaitMapper extends BaseMapperX<MoveToWaitDO> {
|
||||||
|
|
||||||
|
default PageResult<MoveToWaitDO> selectPage(MoveToWaitPageReqVO reqVO) {
|
||||||
|
return selectPage(reqVO, new LambdaQueryWrapperX<MoveToWaitDO>()
|
||||||
|
.eqIfPresent(MoveToWaitDO::getRobotNo, reqVO.getRobotNo())
|
||||||
|
.eqIfPresent(MoveToWaitDO::getPositionMapItemId, reqVO.getPositionMapItemId())
|
||||||
|
.eqIfPresent(MoveToWaitDO::getWaitStatus, reqVO.getWaitStatus())
|
||||||
|
.betweenIfPresent(MoveToWaitDO::getCreateTime, reqVO.getCreateTime())
|
||||||
|
.orderByDesc(MoveToWaitDO::getId));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,18 @@
|
|||||||
|
package cn.iocoder.yudao.module.system.enums.path;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Getter;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
@AllArgsConstructor
|
||||||
|
public enum PathIsReachEnum {
|
||||||
|
REACH("REACH","到达"),
|
||||||
|
MOVE("MOVE","前进"),
|
||||||
|
START_WORK("START_WORK","开始作业"),
|
||||||
|
END_WORK("END_WORK","完成作业");
|
||||||
|
/**
|
||||||
|
* 类型
|
||||||
|
*/
|
||||||
|
private final String type;
|
||||||
|
private final String msg;
|
||||||
|
}
|
@ -13,6 +13,8 @@ public enum PathTaskType {
|
|||||||
TAKE_RELEASE("TAKE_RELEASE","取放货"),
|
TAKE_RELEASE("TAKE_RELEASE","取放货"),
|
||||||
CHARGE("CHARGE","充电任务"),
|
CHARGE("CHARGE","充电任务"),
|
||||||
MOVE("MOVE","移动任务"),
|
MOVE("MOVE","移动任务"),
|
||||||
|
MOVE_TO_WAIT("MOVE_TO_WAIT","移动到等待点(没任务时去等待点)"),
|
||||||
|
MOVE_TO_WAIT_STOP("MOVE_TO_WAIT_STOP","停车任务"),
|
||||||
TAKE("TAKE","仅取货"),
|
TAKE("TAKE","仅取货"),
|
||||||
RELEASE("RELEASE","仅放货"),
|
RELEASE("RELEASE","仅放货"),
|
||||||
AUTO_CHARGE("AUTO_CHARGE","自动充电");
|
AUTO_CHARGE("AUTO_CHARGE","自动充电");
|
||||||
@ -39,6 +41,8 @@ public enum PathTaskType {
|
|||||||
return TAKE.getType();
|
return TAKE.getType();
|
||||||
}else if (RobotTaskTypeEnum.RELEASE.getType().equals(taskType)) {
|
}else if (RobotTaskTypeEnum.RELEASE.getType().equals(taskType)) {
|
||||||
return RELEASE.getType();
|
return RELEASE.getType();
|
||||||
|
}else if (RobotTaskTypeEnum.PARK.getType().equals(taskType)) {
|
||||||
|
return MOVE_TO_WAIT_STOP.getType();
|
||||||
}else {
|
}else {
|
||||||
return AUTO_CHARGE.getType();
|
return AUTO_CHARGE.getType();
|
||||||
}
|
}
|
||||||
|
@ -9,19 +9,11 @@ import lombok.Getter;
|
|||||||
@Getter
|
@Getter
|
||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
public enum CommandTypeEnum {
|
public enum CommandTypeEnum {
|
||||||
MOVE_POSES_AND_FORK("MOVE_POSES_AND_FORK","移动且降叉"),
|
WORK_PICK_UP_GOODS("WORK_PICK_UP_GOODS","取货控叉"),
|
||||||
|
WORK_DROP_OFF_GOODS("WORK_DROP_OFF_GOODS","放货控叉"),
|
||||||
MOVE_POSES("MOVE_POSES","移动"),
|
MOVE_POSES("MOVE_POSES","移动"),
|
||||||
MOVE_POSE("MOVE_POSE","移动"),
|
WORK_AUTO_CHARGE("WORK_AUTO_CHARGE","自动充电"),
|
||||||
JOY_AGV("JOY_AGV","遥感AGV移动"),
|
WORK_MANUAL_CHARGEC("WORK_MANUAL_CHARGEC","手动充电");
|
||||||
JOY_FORK("JOY_FORK","遥控货叉上下移动"),
|
|
||||||
SHUT_DOWN("SHUT_DOWN","关机"),
|
|
||||||
RESTART("RESTART","重启"),
|
|
||||||
STOP("STOP","停止"),
|
|
||||||
START("START","启动"),
|
|
||||||
WAIT("WAIT","等待"),
|
|
||||||
GET_PALLET_TOPIC("GET_PALLET_TOPIC","获取托盘位置"),
|
|
||||||
MOVE_TO_PALLET_POSE("MOVE_TO_PALLET_POSE","移动到取货终点"),
|
|
||||||
FORK("FORK","控制货叉上下移动");
|
|
||||||
/**
|
/**
|
||||||
* 类型
|
* 类型
|
||||||
*/
|
*/
|
||||||
|
@ -6,6 +6,8 @@ import lombok.Getter;
|
|||||||
@Getter
|
@Getter
|
||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
public enum RobotCommandTypeEnum {
|
public enum RobotCommandTypeEnum {
|
||||||
|
MOVE_POSES("MOVE_POSES","移动"),
|
||||||
|
WORK_START_CHARGE("WORK_START_CHARGE","充电"),
|
||||||
WORD_PICK_UP_GOODS("WORD_PICK_UP_GOODS","取货"),
|
WORD_PICK_UP_GOODS("WORD_PICK_UP_GOODS","取货"),
|
||||||
WORD_DROP_OFF_GOODS("WORD_DROP_OFF_GOODS","放货");
|
WORD_DROP_OFF_GOODS("WORD_DROP_OFF_GOODS","放货");
|
||||||
/**
|
/**
|
||||||
|
@ -1,11 +1,14 @@
|
|||||||
|
/*
|
||||||
package cn.iocoder.yudao.module.system.enums.robot.task;
|
package cn.iocoder.yudao.module.system.enums.robot.task;
|
||||||
|
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
|
|
||||||
|
*/
|
||||||
/**
|
/**
|
||||||
* RobotAcceptTaskDTO的order_type
|
* RobotAcceptTaskDTO的order_type
|
||||||
*/
|
*//*
|
||||||
|
|
||||||
@Getter
|
@Getter
|
||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
public enum RobotTaksOrderTypeEnum {
|
public enum RobotTaksOrderTypeEnum {
|
||||||
@ -13,8 +16,11 @@ public enum RobotTaksOrderTypeEnum {
|
|||||||
AUTO_MOVE("AUTO_MOVE"), //自动移库任务
|
AUTO_MOVE("AUTO_MOVE"), //自动移库任务
|
||||||
TASK("TASK"), //客户下发的任务
|
TASK("TASK"), //客户下发的任务
|
||||||
AUTO_CHARGE("AUTO_CHARGE"); //自动充电任务
|
AUTO_CHARGE("AUTO_CHARGE"); //自动充电任务
|
||||||
/**
|
*/
|
||||||
|
/**
|
||||||
* 类型
|
* 类型
|
||||||
*/
|
*//*
|
||||||
|
|
||||||
private final String type;
|
private final String type;
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
@ -0,0 +1,22 @@
|
|||||||
|
package cn.iocoder.yudao.module.system.enums.robot.task;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Getter;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
@AllArgsConstructor
|
||||||
|
public enum RobotTaskStageEnum {
|
||||||
|
UN_START(0L,"待执行"),
|
||||||
|
GO_TAKE(1L,"前往取货"),
|
||||||
|
TAKEING(2L,"取货中"),
|
||||||
|
GO_RELEASE(3L,"前往放货"),
|
||||||
|
RELEASEING(4L,"放货中"),
|
||||||
|
DONE(5L,"结束"),
|
||||||
|
MOVE(6L,"移动中"),
|
||||||
|
CHARGEING(7L,"待执行正在充电");
|
||||||
|
/**
|
||||||
|
* 类型
|
||||||
|
*/
|
||||||
|
private final Long type;
|
||||||
|
private final String msg;
|
||||||
|
}
|
@ -0,0 +1,22 @@
|
|||||||
|
package cn.iocoder.yudao.module.system.enums.wait;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Getter;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 任务状态(0:未开始、1:前往等待点、2:已到达等待点、3:已离开等待点)
|
||||||
|
*/
|
||||||
|
@Getter
|
||||||
|
@AllArgsConstructor
|
||||||
|
public enum WaitStatusEnum {
|
||||||
|
UN_START(0,"未开始"),
|
||||||
|
GO_TO_WAIT(1,"前往等待点"),
|
||||||
|
REACH_WAIT(2,"已到达等待点"),
|
||||||
|
LEAVE_WAIT(3,"已离开等待点");
|
||||||
|
/**
|
||||||
|
* 类型
|
||||||
|
*/
|
||||||
|
private final Integer type;
|
||||||
|
|
||||||
|
private final String msg;
|
||||||
|
}
|
@ -45,11 +45,11 @@ public class HouseLocationStrategyImpl implements NodeProcessingStrategy {
|
|||||||
// -- 筛选出 库位编号不为空 - 并且第最后一组数据 最大的值 - 如果没有则为0
|
// -- 筛选出 库位编号不为空 - 并且第最后一组数据 最大的值 - 如果没有则为0
|
||||||
int max = wareHouseLocationDOS.stream().map(WareHouseLocationDO::getLocationNo).filter(StrUtil::isNotEmpty)
|
int max = wareHouseLocationDOS.stream().map(WareHouseLocationDO::getLocationNo).filter(StrUtil::isNotEmpty)
|
||||||
.mapToInt(s -> Integer.parseInt(s.substring(s.length() - 1))).max().orElse(1);
|
.mapToInt(s -> Integer.parseInt(s.substring(s.length() - 1))).max().orElse(1);
|
||||||
int locationStorey = wareHouseLocationDOS.size();
|
|
||||||
Long locationNumber = null;
|
Long locationNumber = null;
|
||||||
if (ObjectUtil.isNotEmpty(item.getLocationNumber())) {
|
if (ObjectUtil.isNotEmpty(item.getLocationNumber())) {
|
||||||
locationNumber = item.getLocationNumber();
|
locationNumber = item.getLocationNumber();
|
||||||
}
|
}
|
||||||
|
int locationStorey = 1;
|
||||||
for (WareHouseLocationDO wareHouseLocationDO : wareHouseLocationDOS) {
|
for (WareHouseLocationDO wareHouseLocationDO : wareHouseLocationDOS) {
|
||||||
wareHouseLocationDO.setLocationX(item.getLocationX());
|
wareHouseLocationDO.setLocationX(item.getLocationX());
|
||||||
wareHouseLocationDO.setLocationY(item.getLocationY());
|
wareHouseLocationDO.setLocationY(item.getLocationY());
|
||||||
@ -58,6 +58,8 @@ public class HouseLocationStrategyImpl implements NodeProcessingStrategy {
|
|||||||
if (wareHouseLocationDO.getId() == null) {
|
if (wareHouseLocationDO.getId() == null) {
|
||||||
wareHouseLocationDO.setId(getId());
|
wareHouseLocationDO.setId(getId());
|
||||||
}
|
}
|
||||||
|
wareHouseLocationDO.setLocationStorey(locationStorey);
|
||||||
|
locationStorey ++;
|
||||||
if (StrUtil.isEmpty(wareHouseLocationDO.getLocationNo())) {
|
if (StrUtil.isEmpty(wareHouseLocationDO.getLocationNo())) {
|
||||||
// -- 生成库位编号 -
|
// -- 生成库位编号 -
|
||||||
String locationNo = String.format(KW_NO_FORMAT, positionMapId, RandomUtil.randomNumbers(4), max++);
|
String locationNo = String.format(KW_NO_FORMAT, positionMapId, RandomUtil.randomNumbers(4), max++);
|
||||||
@ -69,8 +71,6 @@ public class HouseLocationStrategyImpl implements NodeProcessingStrategy {
|
|||||||
wareHouseLocationDO.setLocationNumber(locationNumber);
|
wareHouseLocationDO.setLocationNumber(locationNumber);
|
||||||
locationNumber = locationNumber - 10;
|
locationNumber = locationNumber - 10;
|
||||||
}
|
}
|
||||||
wareHouseLocationDO.setLocationStorey(locationStorey);
|
|
||||||
locationStorey = locationStorey+1;
|
|
||||||
newList.add(wareHouseLocationDO);
|
newList.add(wareHouseLocationDO);
|
||||||
}
|
}
|
||||||
item.setDataJson(JSONUtil.toJsonStr(wareHouseLocationDOS));
|
item.setDataJson(JSONUtil.toJsonStr(wareHouseLocationDOS));
|
||||||
|
@ -29,4 +29,13 @@ public interface PathPlanningService {
|
|||||||
* @param message
|
* @param message
|
||||||
*/
|
*/
|
||||||
void sendPosedsToRobot(String message);
|
void sendPosedsToRobot(String message);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 同步PP任务状态
|
||||||
|
* @param orderId
|
||||||
|
* @param robotNo
|
||||||
|
* @param s
|
||||||
|
* @param type
|
||||||
|
*/
|
||||||
|
void updateBehavior(String orderId, String robotNo, String s, String type);
|
||||||
}
|
}
|
||||||
|
@ -5,6 +5,7 @@ import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
|
|||||||
import cn.iocoder.yudao.module.mqtt.api.common.CommonApi;
|
import cn.iocoder.yudao.module.mqtt.api.common.CommonApi;
|
||||||
import cn.iocoder.yudao.module.mqtt.api.path.PathPlanningApi;
|
import cn.iocoder.yudao.module.mqtt.api.path.PathPlanningApi;
|
||||||
import cn.iocoder.yudao.module.mqtt.api.path.dto.*;
|
import cn.iocoder.yudao.module.mqtt.api.path.dto.*;
|
||||||
|
import cn.iocoder.yudao.module.mqtt.api.path.task.TaskPathPlanningDTO;
|
||||||
import cn.iocoder.yudao.module.system.constant.path.PathPlanningTopicConstant;
|
import cn.iocoder.yudao.module.system.constant.path.PathPlanningTopicConstant;
|
||||||
import cn.iocoder.yudao.module.system.constant.robot.RobotTopicConstant;
|
import cn.iocoder.yudao.module.system.constant.robot.RobotTopicConstant;
|
||||||
import cn.iocoder.yudao.module.system.controller.admin.positionmap.vo.PositionMapItemSaveReqVO;
|
import cn.iocoder.yudao.module.system.controller.admin.positionmap.vo.PositionMapItemSaveReqVO;
|
||||||
@ -100,7 +101,7 @@ public class PathPlanningServiceImpl implements PathPlanningService {
|
|||||||
relatedPathNode.setFloor(positionMapDO.getFloor());
|
relatedPathNode.setFloor(positionMapDO.getFloor());
|
||||||
relatedPathNode.setArea(positionMapDO.getArea());
|
relatedPathNode.setArea(positionMapDO.getArea());
|
||||||
relatedPathNode.setType(PathTypeEnum.INIT.getType());
|
relatedPathNode.setType(PathTypeEnum.INIT.getType());
|
||||||
List<PositionMapLineDTO> positionMapLineDOS = positionMapLineMap.get(positionMapDO.getId()+"");
|
List<PositionMapLineDTO> positionMapLineDOS = positionMapLineMap.get(positionMapDO.getId() + "");
|
||||||
if (ObjectUtil.isEmpty(positionMapLineDOS)) {
|
if (ObjectUtil.isEmpty(positionMapLineDOS)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@ -386,16 +387,31 @@ public class PathPlanningServiceImpl implements PathPlanningService {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 发送路径给车机
|
* 发送路径给车机
|
||||||
|
*
|
||||||
* @param message
|
* @param message
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void sendPosedsToRobot(String message) {
|
public void sendPosedsToRobot(String message) {
|
||||||
PathPosedsDTO pathPosedsDTO = JSON.parseObject(message, PathPosedsDTO.class);
|
PathPosedsDTO pathPosedsDTO = JSON.parseObject(message, PathPosedsDTO.class);
|
||||||
String mac = robotInformationService.getMacByRobotNo(pathPosedsDTO.getRobotNo());
|
String mac = robotInformationService.getMacByRobotNo(pathPosedsDTO.getRobotNo());
|
||||||
String topic = RobotTopicConstant.ROBOT_TASK_MOVE_TOPIC+mac;
|
String topic = RobotTopicConstant.ROBOT_TASK_MOVE_TOPIC + mac;
|
||||||
commonApi.commonMethod(message, topic);
|
commonApi.commonMethod(message, topic);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 实时行为上报
|
||||||
|
* @param orderId
|
||||||
|
* @param robotNo
|
||||||
|
* @param behaviorId
|
||||||
|
* @param isReach
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void updateBehavior(String orderId, String robotNo, String behaviorId, String isReach) {
|
||||||
|
TaskPathPlanningDTO build = TaskPathPlanningDTO.builder().orderId(orderId).robotNo(robotNo)
|
||||||
|
.behaviorId(behaviorId).isReach(isReach).build();
|
||||||
|
commonApi.commonMethod(build, PathPlanningTopicConstant.UPDATE_BEHAVIOR);
|
||||||
|
}
|
||||||
|
|
||||||
public PositionMapLineDTO setPositionMapLineDTOData(PositionMapLineDTO positionMapLineDO) {
|
public PositionMapLineDTO setPositionMapLineDTOData(PositionMapLineDTO positionMapLineDO) {
|
||||||
PositionMapLineDTO build = PositionMapLineDTO.builder()
|
PositionMapLineDTO build = PositionMapLineDTO.builder()
|
||||||
.id(positionMapLineDO.getId())
|
.id(positionMapLineDO.getId())
|
||||||
|
@ -10,11 +10,7 @@ import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
|||||||
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
|
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||||
import cn.iocoder.yudao.framework.mybatis.core.util.MyBatisUtils;
|
import cn.iocoder.yudao.framework.mybatis.core.util.MyBatisUtils;
|
||||||
import cn.iocoder.yudao.module.mqtt.api.common.CommonApi;
|
import cn.iocoder.yudao.module.mqtt.api.common.CommonApi;
|
||||||
import cn.iocoder.yudao.module.mqtt.api.task.dto.RobotAcceptTaskDTO;
|
import cn.iocoder.yudao.module.mqtt.api.task.dto.*;
|
||||||
import cn.iocoder.yudao.module.mqtt.api.task.dto.RobotAssignTaskArgDTO;
|
|
||||||
import cn.iocoder.yudao.module.mqtt.api.task.dto.RobotAssignTaskDTO;
|
|
||||||
import cn.iocoder.yudao.module.mqtt.api.task.dto.RobotAssignTaskDataDTO;
|
|
||||||
import cn.iocoder.yudao.module.mqtt.enums.path.TaskTypeEnum;
|
|
||||||
import cn.iocoder.yudao.module.mqtt.enums.task.ExecutionTypeEnum;
|
import cn.iocoder.yudao.module.mqtt.enums.task.ExecutionTypeEnum;
|
||||||
import cn.iocoder.yudao.module.system.api.path.vo.RobotClosePathPlantingDTO;
|
import cn.iocoder.yudao.module.system.api.path.vo.RobotClosePathPlantingDTO;
|
||||||
import cn.iocoder.yudao.module.system.api.robot.dto.RobotStatusDataPoseDTO;
|
import cn.iocoder.yudao.module.system.api.robot.dto.RobotStatusDataPoseDTO;
|
||||||
@ -53,7 +49,6 @@ import cn.iocoder.yudao.module.system.enums.redis.RobotCacheLockEnum;
|
|||||||
import cn.iocoder.yudao.module.system.enums.robot.*;
|
import cn.iocoder.yudao.module.system.enums.robot.*;
|
||||||
import cn.iocoder.yudao.module.system.enums.robot.charge.ChargeTaskStatusEnum;
|
import cn.iocoder.yudao.module.system.enums.robot.charge.ChargeTaskStatusEnum;
|
||||||
import cn.iocoder.yudao.module.system.enums.robot.task.RobotCommandTypeEnum;
|
import cn.iocoder.yudao.module.system.enums.robot.task.RobotCommandTypeEnum;
|
||||||
import cn.iocoder.yudao.module.system.enums.robot.task.RobotTaksOrderTypeEnum;
|
|
||||||
//import cn.iocoder.yudao.module.system.service.robot.job.RobotCommonTaskService;
|
//import cn.iocoder.yudao.module.system.service.robot.job.RobotCommonTaskService;
|
||||||
import cn.iocoder.yudao.module.system.util.redis.RedisUtil;
|
import cn.iocoder.yudao.module.system.util.redis.RedisUtil;
|
||||||
import cn.iocoder.yudao.module.system.util.redis.RedissonUtils;
|
import cn.iocoder.yudao.module.system.util.redis.RedissonUtils;
|
||||||
@ -136,12 +131,12 @@ public class RobotTaskServiceImpl extends ServiceImpl<RobotTaskMapper, RobotTask
|
|||||||
@Value("${zn.task.check_sku_info:true}")
|
@Value("${zn.task.check_sku_info:true}")
|
||||||
private Boolean checkSkuInfo;
|
private Boolean checkSkuInfo;
|
||||||
|
|
||||||
@Value("${zn.robot_config.check_pallet_height}")
|
|
||||||
private Double checkPalletHeight;
|
|
||||||
|
|
||||||
@Value("${zn.robot_config.offset_height}")
|
@Value("${zn.robot_config.offset_height}")
|
||||||
private Double offsetHeight;
|
private Double offsetHeight;
|
||||||
|
|
||||||
|
@Value("${zn.robot_config.default_tray_height:1.0}")
|
||||||
|
private Double defaultTrayHeight;
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
private WareHouseLaneMapper houseLaneMapper;
|
private WareHouseLaneMapper houseLaneMapper;
|
||||||
|
|
||||||
@ -397,7 +392,6 @@ public class RobotTaskServiceImpl extends ServiceImpl<RobotTaskMapper, RobotTask
|
|||||||
robotTask.setOrder_id(taskDetailDO.getId().toString());
|
robotTask.setOrder_id(taskDetailDO.getId().toString());
|
||||||
String mac = robotInformationService.getMacByRobotNo(taskDetailDO.getRobotNo());
|
String mac = robotInformationService.getMacByRobotNo(taskDetailDO.getRobotNo());
|
||||||
robotTask.setTopic(RobotTopicConstant.ROBOT_TASK_TOPIC + mac);
|
robotTask.setTopic(RobotTopicConstant.ROBOT_TASK_TOPIC + mac);
|
||||||
robotTask.setOrder_type(RobotTaksOrderTypeEnum.TASK.getType());
|
|
||||||
robotTask.setExecution_type(ExecutionTypeEnum.CANCEL.getType());
|
robotTask.setExecution_type(ExecutionTypeEnum.CANCEL.getType());
|
||||||
commonApi.commonMethod(robotTask, robotTask.getTopic());
|
commonApi.commonMethod(robotTask, robotTask.getTopic());
|
||||||
|
|
||||||
@ -487,9 +481,8 @@ public class RobotTaskServiceImpl extends ServiceImpl<RobotTaskMapper, RobotTask
|
|||||||
robotTaskDetailDO = setTaskDoing(detailId, taskAssignDTO.getRobotNo(), deviceNoMap);
|
robotTaskDetailDO = setTaskDoing(detailId, taskAssignDTO.getRobotNo(), deviceNoMap);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ObjectUtil.isNotEmpty(robotTaskDetailDO)) {
|
sendTaskToRobot(robotTaskDetailDO, taskAssignDTO);
|
||||||
sendTaskToRobot(robotTaskDetailDO, taskAssignDTO);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -498,62 +491,79 @@ public class RobotTaskServiceImpl extends ServiceImpl<RobotTaskMapper, RobotTask
|
|||||||
* @param v
|
* @param v
|
||||||
*/
|
*/
|
||||||
private void sendTaskToRobot(RobotTaskDetailDO v, TaskAssignDTO taskAssignDTO) {
|
private void sendTaskToRobot(RobotTaskDetailDO v, TaskAssignDTO taskAssignDTO) {
|
||||||
String mac = robotInformationService.getMacByRobotNo(v.getRobotNo());
|
String mac = robotInformationService.getMacByRobotNo(taskAssignDTO.getRobotNo());
|
||||||
String orderType = PathTaskType.getTaskType(v.getTaskType());
|
RobotAssignTaskDataDTO robotAssignTask = getEmptyRobotAssignTaskData();
|
||||||
RobotAssignTaskDTO build = RobotAssignTaskDTO.builder()
|
RobotAssignTaskDTO build = RobotAssignTaskDTO.builder()
|
||||||
.topic(RobotTopicConstant.ROBOT_TASK_TOPIC + mac)
|
.topic(RobotTopicConstant.ROBOT_TASK_TOPIC + mac)
|
||||||
.order_type(orderType)
|
.orderType(taskAssignDTO.getType())
|
||||||
.order_id(v.getId().toString())
|
.executionType(ExecutionTypeEnum.DEFAULT.getType())
|
||||||
|
.orderId(taskAssignDTO.getId().toString())
|
||||||
|
.data(Lists.newArrayList(robotAssignTask))
|
||||||
.build();
|
.build();
|
||||||
if (PathTaskType.TAKE_RELEASE.getType().equals(taskAssignDTO.getType())
|
if (PathTaskType.TAKE_RELEASE.getType().equals(taskAssignDTO.getType())
|
||||||
|| PathTaskType.TAKE.getType().equals(taskAssignDTO.getType())
|
|| PathTaskType.TAKE.getType().equals(taskAssignDTO.getType())
|
||||||
|| PathTaskType.RELEASE.getType().equals(taskAssignDTO.getType())) {
|
|| PathTaskType.RELEASE.getType().equals(taskAssignDTO.getType())) {
|
||||||
List<RobotAssignTaskDataDTO> robotAssignTaskData = getRobotAssignTaskData(v,taskAssignDTO);
|
RobotAssignTaskDataDTO robotAssignTaskData = getRobotAssignTaskData(v, taskAssignDTO);
|
||||||
build.setData(robotAssignTaskData);
|
List<RobotAssignTaskDataDTO> data = build.getData();
|
||||||
|
data.add(robotAssignTaskData);
|
||||||
|
} else if (PathTaskType.CHARGE.getType().equals(taskAssignDTO.getType())
|
||||||
|
|| PathTaskType.AUTO_CHARGE.getType().equals(taskAssignDTO.getType())) {
|
||||||
|
RobotAssignTaskDataDTO robotAssignTaskData = new RobotAssignTaskDataDTO();
|
||||||
|
robotAssignTaskData.setCommandType(RobotCommandTypeEnum.WORK_START_CHARGE.getType());
|
||||||
|
List<RobotAssignTaskDataDTO> data = build.getData();
|
||||||
|
data.add(robotAssignTaskData);
|
||||||
}
|
}
|
||||||
log.info("发送任务给车机 :{}",JSON.toJSONString(build));
|
log.info("发送任务给车机 :{}", JSON.toJSONString(build));
|
||||||
commonApi.commonMethod(build, build.getTopic());
|
commonApi.commonMethod(build, build.getTopic());
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<RobotAssignTaskDataDTO> getRobotAssignTaskData(RobotTaskDetailDO v,TaskAssignDTO taskAssignDTO) {
|
public RobotAssignTaskDataDTO getEmptyRobotAssignTaskData() {
|
||||||
|
RobotAssignTaskDataDTO take = new RobotAssignTaskDataDTO();
|
||||||
|
take.setCommandType(RobotCommandTypeEnum.MOVE_POSES.getType());
|
||||||
|
List<Pose2ds> pose2ds = new ArrayList<>();
|
||||||
|
RobotAssignTaskArgDTO build = RobotAssignTaskArgDTO.builder().pose2ds(pose2ds).build();
|
||||||
|
take.setArg(Arrays.asList(build));
|
||||||
|
return take;
|
||||||
|
}
|
||||||
|
|
||||||
RobotAssignTaskDataDTO take = null;
|
public RobotAssignTaskDataDTO getRobotAssignTaskData(RobotTaskDetailDO v, TaskAssignDTO taskAssignDTO) {
|
||||||
RobotAssignTaskDataDTO release = null;
|
|
||||||
|
RobotAssignTaskDataDTO take = new RobotAssignTaskDataDTO();
|
||||||
|
RobotAssignTaskArgDTO build = null;
|
||||||
|
WareHouseLocationDO location = null;
|
||||||
if (PathTaskType.TAKE_RELEASE.getType().equals(taskAssignDTO.getType()) ||
|
if (PathTaskType.TAKE_RELEASE.getType().equals(taskAssignDTO.getType()) ||
|
||||||
PathTaskType.TAKE.getType().equals(taskAssignDTO.getType())) {
|
PathTaskType.TAKE.getType().equals(taskAssignDTO.getType())) {
|
||||||
take = new RobotAssignTaskDataDTO();
|
take.setCommandType(RobotCommandTypeEnum.WORD_PICK_UP_GOODS.getType());
|
||||||
take.setCommand_type(RobotCommandTypeEnum.WORD_PICK_UP_GOODS.getType());
|
location = locationMapper.selectById(v.getFromLocationId());
|
||||||
WareHouseLocationDO location = locationMapper.selectById(v.getFromLocationId());
|
build = RobotAssignTaskArgDTO.builder()
|
||||||
RobotAssignTaskArgDTO build = RobotAssignTaskArgDTO.builder()
|
|
||||||
.level(Double.valueOf(location.getLocationStorey()))
|
.level(Double.valueOf(location.getLocationStorey()))
|
||||||
.height(Double.valueOf(location.getLocationTrayHeight() + ""))
|
.offsetHeight(offsetHeight)
|
||||||
.check_pallet_height(checkPalletHeight)
|
|
||||||
.offset_height(offsetHeight)
|
|
||||||
.build();
|
.build();
|
||||||
take.setArg(Arrays.asList(build));
|
take.setArg(Arrays.asList(build));
|
||||||
}
|
} else if (PathTaskType.RELEASE.getType().equals(taskAssignDTO.getType())) {
|
||||||
if (PathTaskType.TAKE_RELEASE.getType().equals(taskAssignDTO.getType()) ||
|
take.setCommandType(RobotCommandTypeEnum.WORD_DROP_OFF_GOODS.getType());
|
||||||
PathTaskType.RELEASE.getType().equals(taskAssignDTO.getType())) {
|
location = locationMapper.selectById(v.getToLocationId());
|
||||||
release = new RobotAssignTaskDataDTO();
|
build = RobotAssignTaskArgDTO.builder()
|
||||||
release.setCommand_type(RobotCommandTypeEnum.WORD_DROP_OFF_GOODS.getType());
|
|
||||||
WareHouseLocationDO location = locationMapper.selectById(v.getToLocationId());
|
|
||||||
RobotAssignTaskArgDTO build = RobotAssignTaskArgDTO.builder()
|
|
||||||
.level(Double.valueOf(location.getLocationStorey()))
|
.level(Double.valueOf(location.getLocationStorey()))
|
||||||
.height(Double.valueOf(location.getLocationTrayHeight() + ""))
|
.offsetHeight(offsetHeight)
|
||||||
.check_pallet_height(checkPalletHeight)
|
|
||||||
.offset_height(offsetHeight)
|
|
||||||
.build();
|
.build();
|
||||||
release.setArg(Arrays.asList(build));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
List<RobotAssignTaskDataDTO> list = new ArrayList<>();
|
if (ObjectUtil.isEmpty(location.getLocationTrayHeight())) {
|
||||||
if (ObjectUtil.isNotEmpty(take)) {
|
setRobotAssignTaskArgHeigth(location, build);
|
||||||
list.add(take);
|
} else {
|
||||||
|
build.setHeight(Double.valueOf(location.getLocationTrayHeight() + ""));
|
||||||
}
|
}
|
||||||
if (ObjectUtil.isNotEmpty(release)) {
|
|
||||||
list.add(release);
|
take.setArg(Arrays.asList(build));
|
||||||
}
|
|
||||||
return list;
|
return take;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void setRobotAssignTaskArgHeigth(WareHouseLocationDO location, RobotAssignTaskArgDTO build) {
|
||||||
|
Integer locationStorey = location.getLocationStorey() - 1;
|
||||||
|
double height = locationStorey * defaultTrayHeight;
|
||||||
|
build.setHeight(height);
|
||||||
}
|
}
|
||||||
|
|
||||||
public RobotTaskDetailDO setTaskDoing(Long detailId, String robotNo, Map<Long, String> deviceNoMap) {
|
public RobotTaskDetailDO setTaskDoing(Long detailId, String robotNo, Map<Long, String> deviceNoMap) {
|
||||||
@ -1156,8 +1166,8 @@ public class RobotTaskServiceImpl extends ServiceImpl<RobotTaskMapper, RobotTask
|
|||||||
RobotChargeLogDO robotChargeLogs = null;
|
RobotChargeLogDO robotChargeLogs = null;
|
||||||
|
|
||||||
*//**
|
*//**
|
||||||
* 充电
|
* 充电
|
||||||
*//*
|
*//*
|
||||||
if (TaskTypeEnum.CHARGE.getType().equals(distribution.getType())) {
|
if (TaskTypeEnum.CHARGE.getType().equals(distribution.getType())) {
|
||||||
robotChargeLogs = chargeLogMapper.selectById(distribution.getId());
|
robotChargeLogs = chargeLogMapper.selectById(distribution.getId());
|
||||||
|
|
||||||
@ -1172,8 +1182,8 @@ public class RobotTaskServiceImpl extends ServiceImpl<RobotTaskMapper, RobotTask
|
|||||||
}
|
}
|
||||||
|
|
||||||
*//**
|
*//**
|
||||||
* 任务
|
* 任务
|
||||||
*//*
|
*//*
|
||||||
if (TaskTypeEnum.TASK.getType().equals(distribution.getType())) {
|
if (TaskTypeEnum.TASK.getType().equals(distribution.getType())) {
|
||||||
chargeDone(distribution.getRobotNo());
|
chargeDone(distribution.getRobotNo());
|
||||||
robotInformationMapper.updateRobotListStatus(distribution.getRobotNo(), RobotStatusEnum.DOING.getType(), distribution.getId());
|
robotInformationMapper.updateRobotListStatus(distribution.getRobotNo(), RobotStatusEnum.DOING.getType(), distribution.getId());
|
||||||
|
@ -8,13 +8,7 @@ import cn.iocoder.yudao.module.mqtt.api.path.task.TaskLimitationAreaDTO;
|
|||||||
import cn.iocoder.yudao.module.mqtt.api.path.task.TaskRobotNoLimittationAreaDTO;
|
import cn.iocoder.yudao.module.mqtt.api.path.task.TaskRobotNoLimittationAreaDTO;
|
||||||
import cn.iocoder.yudao.module.mqtt.api.path.task.TaskToPathPlanningDTO;
|
import cn.iocoder.yudao.module.mqtt.api.path.task.TaskToPathPlanningDTO;
|
||||||
import cn.iocoder.yudao.module.mqtt.api.task.RobotTaskApi;
|
import cn.iocoder.yudao.module.mqtt.api.task.RobotTaskApi;
|
||||||
import cn.iocoder.yudao.module.mqtt.api.task.dto.Pose2ds;
|
|
||||||
import cn.iocoder.yudao.module.mqtt.api.task.dto.RobotAcceptTaskDTO;
|
|
||||||
import cn.iocoder.yudao.module.mqtt.api.task.dto.RobotAcceptTaskData;
|
|
||||||
import cn.iocoder.yudao.module.mqtt.enums.path.TaskTypeEnum;
|
|
||||||
import cn.iocoder.yudao.module.system.constant.path.PathPlanningTopicConstant;
|
import cn.iocoder.yudao.module.system.constant.path.PathPlanningTopicConstant;
|
||||||
import cn.iocoder.yudao.module.system.constant.robot.RobotTaskChcheConstant;
|
|
||||||
import cn.iocoder.yudao.module.system.constant.robot.RobotTopicConstant;
|
|
||||||
import cn.iocoder.yudao.module.system.dal.dataobject.houselocation.WareHouseLocationDO;
|
import cn.iocoder.yudao.module.system.dal.dataobject.houselocation.WareHouseLocationDO;
|
||||||
import cn.iocoder.yudao.module.system.dal.dataobject.positionmap.PositionMapDO;
|
import cn.iocoder.yudao.module.system.dal.dataobject.positionmap.PositionMapDO;
|
||||||
import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotChargeLogDO;
|
import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotChargeLogDO;
|
||||||
@ -27,6 +21,7 @@ import cn.iocoder.yudao.module.system.dal.mysql.positionmap.PositionMapMapper;
|
|||||||
import cn.iocoder.yudao.module.system.dal.mysql.robot.RobotInformationMapper;
|
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.RobotTaskDetailMapper;
|
||||||
import cn.iocoder.yudao.module.system.dal.mysql.robot.RobotTaskMapper;
|
import cn.iocoder.yudao.module.system.dal.mysql.robot.RobotTaskMapper;
|
||||||
|
import cn.iocoder.yudao.module.system.enums.path.PathTaskType;
|
||||||
import cn.iocoder.yudao.module.system.enums.robot.*;
|
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.charge.ChargeModelEnum;
|
||||||
import cn.iocoder.yudao.module.system.service.robot.job.DistributeTasksService;
|
import cn.iocoder.yudao.module.system.service.robot.job.DistributeTasksService;
|
||||||
@ -167,9 +162,10 @@ public class RobotPathPlanningServiceImpl implements RobotPathPlanningService {
|
|||||||
priority = taskDetailMap.get(v.getTaskDetailId()).getPriority();
|
priority = taskDetailMap.get(v.getTaskDetailId()).getPriority();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
String orderType = ObjectUtil.isEmpty(v.getTaskDetailId()) ? PathTaskType.AUTO_CHARGE.getType():PathTaskType.CHARGE.getType();
|
||||||
TaskToPathPlanningDTO pathPlanning = TaskToPathPlanningDTO.builder()
|
TaskToPathPlanningDTO pathPlanning = TaskToPathPlanningDTO.builder()
|
||||||
.id(String.valueOf(v.getId()))
|
.orderId(String.valueOf(v.getId()))
|
||||||
.type(TaskTypeEnum.CHARGE.getType())
|
.orderType(orderType)
|
||||||
.priority(priority)
|
.priority(priority)
|
||||||
.createTime(createTime)
|
.createTime(createTime)
|
||||||
.build();
|
.build();
|
||||||
@ -223,8 +219,8 @@ public class RobotPathPlanningServiceImpl implements RobotPathPlanningService {
|
|||||||
for (RobotTaskDetailDO taskDetailDO : taskDetailDOS) {
|
for (RobotTaskDetailDO taskDetailDO : taskDetailDOS) {
|
||||||
|
|
||||||
TaskToPathPlanningDTO pathPlanning = TaskToPathPlanningDTO.builder()
|
TaskToPathPlanningDTO pathPlanning = TaskToPathPlanningDTO.builder()
|
||||||
.id(String.valueOf(taskDetailDO.getId()))
|
.orderId(String.valueOf(taskDetailDO.getId()))
|
||||||
.type(TaskTypeEnum.TASK.getType())
|
.orderType(PathTaskType.getTaskType(taskDetailDO.getTaskType()))
|
||||||
.priority(taskDetailDO.getPriority())
|
.priority(taskDetailDO.getPriority())
|
||||||
.createTime(taskDetailDO.getCreateTime())
|
.createTime(taskDetailDO.getCreateTime())
|
||||||
.build();
|
.build();
|
||||||
|
@ -19,7 +19,6 @@ import cn.iocoder.yudao.module.system.dal.mysql.config.CommonConfigMapper;
|
|||||||
import cn.iocoder.yudao.module.system.dal.mysql.robot.RobotWarnMsgMapper;
|
import cn.iocoder.yudao.module.system.dal.mysql.robot.RobotWarnMsgMapper;
|
||||||
import cn.iocoder.yudao.module.system.enums.config.CommandConfigTypeEnum;
|
import cn.iocoder.yudao.module.system.enums.config.CommandConfigTypeEnum;
|
||||||
import cn.iocoder.yudao.module.system.enums.robot.RobotWarnType;
|
import cn.iocoder.yudao.module.system.enums.robot.RobotWarnType;
|
||||||
import cn.iocoder.yudao.module.system.enums.robot.task.RobotTaksOrderTypeEnum;
|
|
||||||
import cn.iocoder.yudao.module.system.service.robot.RobotInformationService;
|
import cn.iocoder.yudao.module.system.service.robot.RobotInformationService;
|
||||||
import cn.iocoder.yudao.module.system.service.robot.RobotWarnMsgService;
|
import cn.iocoder.yudao.module.system.service.robot.RobotWarnMsgService;
|
||||||
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSON;
|
||||||
@ -95,7 +94,6 @@ public class ToolsServiceImpl implements ToolsService {
|
|||||||
/**
|
/**
|
||||||
* 清除交管
|
* 清除交管
|
||||||
*
|
*
|
||||||
* @param agvNo
|
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
@ -123,7 +121,6 @@ public class ToolsServiceImpl implements ToolsService {
|
|||||||
robotTask.setOrder_id(taskDetailId);
|
robotTask.setOrder_id(taskDetailId);
|
||||||
String mac = robotInformationService.getMacByRobotNo(informationDO.getRobotNo());
|
String mac = robotInformationService.getMacByRobotNo(informationDO.getRobotNo());
|
||||||
robotTask.setTopic(RobotTopicConstant.ROBOT_TASK_TOPIC + mac);
|
robotTask.setTopic(RobotTopicConstant.ROBOT_TASK_TOPIC + mac);
|
||||||
robotTask.setOrder_type(RobotTaksOrderTypeEnum.TASK.getType());
|
|
||||||
robotTask.setExecution_type(ExecutionTypeEnum.CANCEL.getType());
|
robotTask.setExecution_type(ExecutionTypeEnum.CANCEL.getType());
|
||||||
commonApi.commonMethod(robotTask, robotTask.getTopic());
|
commonApi.commonMethod(robotTask, robotTask.getTopic());
|
||||||
|
|
||||||
|
@ -0,0 +1,56 @@
|
|||||||
|
package cn.iocoder.yudao.module.system.service.wait;
|
||||||
|
|
||||||
|
import java.util.*;
|
||||||
|
import javax.validation.*;
|
||||||
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||||
|
import cn.iocoder.yudao.framework.common.pojo.PageParam;
|
||||||
|
import cn.iocoder.yudao.module.system.controller.admin.wait.vo.*;
|
||||||
|
import cn.iocoder.yudao.module.system.dal.dataobject.wait.MoveToWaitDO;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 车辆前往等待点记录 Service 接口
|
||||||
|
*
|
||||||
|
* @author 陈宾顺
|
||||||
|
*/
|
||||||
|
public interface MoveToWaitService {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 创建车辆前往等待点记录
|
||||||
|
*
|
||||||
|
* @param createReqVO 创建信息
|
||||||
|
* @return 编号
|
||||||
|
*/
|
||||||
|
Long createMoveToWait(@Valid MoveToWaitSaveReqVO createReqVO);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 更新车辆前往等待点记录
|
||||||
|
*
|
||||||
|
* @param updateReqVO 更新信息
|
||||||
|
*/
|
||||||
|
void updateMoveToWait(@Valid MoveToWaitSaveReqVO updateReqVO);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除车辆前往等待点记录
|
||||||
|
*
|
||||||
|
* @param id 编号
|
||||||
|
*/
|
||||||
|
void deleteMoveToWait(Long id);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得车辆前往等待点记录
|
||||||
|
*
|
||||||
|
* @param id 编号
|
||||||
|
* @return 车辆前往等待点记录
|
||||||
|
*/
|
||||||
|
MoveToWaitDO getMoveToWait(Long id);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得车辆前往等待点记录分页
|
||||||
|
*
|
||||||
|
* @param pageReqVO 分页查询
|
||||||
|
* @return 车辆前往等待点记录分页
|
||||||
|
*/
|
||||||
|
PageResult<MoveToWaitDO> getMoveToWaitPage(MoveToWaitPageReqVO pageReqVO);
|
||||||
|
|
||||||
|
void setMoveToWaitDoing(Long orderId,Integer status);
|
||||||
|
}
|
@ -0,0 +1,82 @@
|
|||||||
|
package cn.iocoder.yudao.module.system.service.wait;
|
||||||
|
|
||||||
|
import cn.iocoder.yudao.module.system.controller.admin.wait.vo.*;
|
||||||
|
import cn.iocoder.yudao.module.system.dal.dataobject.wait.MoveToWaitDO;
|
||||||
|
import cn.iocoder.yudao.module.system.dal.mysql.wait.MoveToWaitMapper;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
import org.springframework.validation.annotation.Validated;
|
||||||
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
|
import java.util.*;
|
||||||
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||||
|
import cn.iocoder.yudao.framework.common.pojo.PageParam;
|
||||||
|
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
||||||
|
|
||||||
|
|
||||||
|
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
|
||||||
|
import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.MOVE_TO_WAIT_NOT_EXISTS;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 车辆前往等待点记录 Service 实现类
|
||||||
|
*
|
||||||
|
* @author 陈宾顺
|
||||||
|
*/
|
||||||
|
@Service
|
||||||
|
@Validated
|
||||||
|
public class MoveToWaitServiceImpl implements MoveToWaitService {
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private MoveToWaitMapper moveToWaitMapper;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Long createMoveToWait(MoveToWaitSaveReqVO createReqVO) {
|
||||||
|
// 插入
|
||||||
|
MoveToWaitDO moveToWait = BeanUtils.toBean(createReqVO, MoveToWaitDO.class);
|
||||||
|
moveToWaitMapper.insert(moveToWait);
|
||||||
|
// 返回
|
||||||
|
return moveToWait.getId();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void updateMoveToWait(MoveToWaitSaveReqVO updateReqVO) {
|
||||||
|
// 校验存在
|
||||||
|
validateMoveToWaitExists(updateReqVO.getId());
|
||||||
|
// 更新
|
||||||
|
MoveToWaitDO updateObj = BeanUtils.toBean(updateReqVO, MoveToWaitDO.class);
|
||||||
|
moveToWaitMapper.updateById(updateObj);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void deleteMoveToWait(Long id) {
|
||||||
|
// 校验存在
|
||||||
|
validateMoveToWaitExists(id);
|
||||||
|
// 删除
|
||||||
|
moveToWaitMapper.deleteById(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void validateMoveToWaitExists(Long id) {
|
||||||
|
if (moveToWaitMapper.selectById(id) == null) {
|
||||||
|
throw exception(MOVE_TO_WAIT_NOT_EXISTS);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public MoveToWaitDO getMoveToWait(Long id) {
|
||||||
|
return moveToWaitMapper.selectById(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public PageResult<MoveToWaitDO> getMoveToWaitPage(MoveToWaitPageReqVO pageReqVO) {
|
||||||
|
return moveToWaitMapper.selectPage(pageReqVO);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setMoveToWaitDoing(Long orderId,Integer status) {
|
||||||
|
MoveToWaitDO updateObj = new MoveToWaitDO();
|
||||||
|
updateObj.setId(orderId);
|
||||||
|
updateObj.setWaitStatus(status);
|
||||||
|
moveToWaitMapper.updateById(updateObj);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -245,14 +245,14 @@ zn:
|
|||||||
scan: 机器人正在扫描
|
scan: 机器人正在扫描
|
||||||
parking_space: 机器人正在前往停车位
|
parking_space: 机器人正在前往停车位
|
||||||
charge: 机器人正在前往充电位
|
charge: 机器人正在前往充电位
|
||||||
action_entity_cache_time: 28800 #机器人所有动作缓存时间 8小时
|
action_entity_cache_time: 172800 #机器人所有动作缓存时间 8小时
|
||||||
doing_action_cache_time: 28800 #单个动作缓存时间 8小时
|
doing_action_cache_time: 172800 #单个动作缓存时间 8小时
|
||||||
robot_chearg: #机器人充电的配置
|
robot_chearg: #机器人充电的配置
|
||||||
release_location_number_config: 50 #同一组序号,越大越先执行
|
release_location_number_config: 50 #同一组序号,越大越先执行
|
||||||
priority_config: 50 #优先级
|
priority_config: 50 #优先级
|
||||||
task: #任务相关的配置
|
task: #任务相关的配置
|
||||||
check_sku_info: true #校验物料信息
|
check_sku_info: true #校验物料信息
|
||||||
robot_config: #机器人取放货默认配置
|
robot_config: #机器人取放货默认配置
|
||||||
check_pallet_height: 0.0 #检测托盘时需要抬叉的高度,现在是需要,以后不用了
|
|
||||||
offset_height: 0.1 #叉起货需要在原来高度基础上偏移的高度
|
offset_height: 0.1 #叉起货需要在原来高度基础上偏移的高度
|
||||||
|
default_tray_height: 1.1 #默认每层高度
|
||||||
|
|
||||||
|
@ -0,0 +1,12 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||||
|
<mapper namespace="cn.iocoder.yudao.module.system.dal.mysql.wait.MoveToWaitMapper">
|
||||||
|
|
||||||
|
<!--
|
||||||
|
一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
|
||||||
|
无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。
|
||||||
|
代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
|
||||||
|
文档可见:https://www.iocoder.cn/MyBatis/x-plugins/
|
||||||
|
-->
|
||||||
|
|
||||||
|
</mapper>
|
Loading…
Reference in New Issue
Block a user