Compare commits

...

4 Commits

Author SHA1 Message Date
cbs
0072a4e4d0 修改测试环境MQTT的IP 2025-06-12 11:14:39 +08:00
cbs
0c07ba959e Merge remote-tracking branch 'origin/dev' into cbs 2025-06-12 11:12:58 +08:00
cbs
6737505fed 消费MQTT消息 2025-06-12 11:11:18 +08:00
cbs
0f3a4ac1ed 代码优化 2025-06-11 19:48:02 +08:00
24 changed files with 147 additions and 57 deletions

View File

@ -34,7 +34,9 @@ public class ApiAccessLogInterceptor implements HandlerInterceptor {
private static final String ATTRIBUTE_STOP_WATCH = "ApiAccessLogInterceptor.StopWatch";
private static final List<String> ignoreInterfaceUrls = Arrays.asList("/rpc-api/system/task/robotStatusUpdate","/rpc-api/system/task/updateRobotCommonStatus");
private static final List<String> ignoreInterfaceUrls = Arrays.asList("/rpc-api/system/task/robotStatusUpdate",
"/rpc-api/system/task/robotReactiveStatus",
"/rpc-api/system/task/updateRobotCommonStatus");
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {

View File

@ -9,6 +9,8 @@ import org.eclipse.paho.client.mqttv3.MqttMessage;
import org.springframework.context.annotation.Configuration;
import java.nio.charset.StandardCharsets;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/**
* MQTT回调
@ -17,6 +19,9 @@ import java.nio.charset.StandardCharsets;
@Configuration
public class MqttCallBack implements MqttCallback {
private static final ExecutorService fixedThreadPool = Executors.newFixedThreadPool(10);
/**
* 与服务器断开的回调
*/
@ -35,6 +40,7 @@ public class MqttCallBack implements MqttCallback {
*/
@Override
public void messageArrived(String topic, MqttMessage mqttMessage) throws Exception {
fixedThreadPool.execute(() -> {
String msg = new String(mqttMessage.getPayload(), StandardCharsets.UTF_8);
// log.info("[MQTT]接收当前消息为 :{}", msg);
@ -45,6 +51,8 @@ public class MqttCallBack implements MqttCallback {
log.info("消费失败的消息主题 :{},消息内容 :{}", topic, msg);
log.info("消费消息异常 :{}", e);
}
});
}
/**

View File

@ -22,7 +22,7 @@ public class RobotStatusServiceImpl implements MqttService {
*/
@Override
public void analysisMessage(String message) {
// log.info("处理RobotStatusServiceImpl的消息 :{}", message);
log.info("处理RobotStatusServiceImpl的消息 :{}", message);
RobotPoseStatusDTO robotStatusData = JSON.parseObject(message, RobotPoseStatusDTO.class);
robotStatusApi.robotStatusUpdate(robotStatusData);
}

View File

@ -33,9 +33,9 @@ management:
# MQTT
mqtt:
# host: tcp://123.57.12.40:1883
host: tcp://127.0.0.1:1883
# host: tcp://10.10.7.195:1883
host: tcp://123.57.12.40:1883
# host: tcp://127.0.0.1:1883
# host: tcp://10.10.7.116:1883
username: adminuser
password: adminuser
qos: 2

View File

@ -34,7 +34,8 @@ management:
# MQTT
mqtt:
# host: tcp://123.57.12.40:1883
host: tcp://10.10.100.42:1883
# host: tcp://10.10.100.42:1883
host: tcp://127.0.0.1:1883
username: adminuser
password: adminuser
qos: 0

View File

@ -202,6 +202,7 @@ public interface ErrorCodeConstants {
ErrorCode ROBOT_PORT_NOT_COMPLIANCE = new ErrorCode(1-002-034-016, "车辆端口范围在4096至65535之间");
ErrorCode ROBOT_IP_NOT_COMPLIANCE = new ErrorCode(1-002-034-017, "请检测车辆IP是否符合规范");
ErrorCode ROBOT_IP_OR_PORT_EMPTY = new ErrorCode(1-002-034-020, "车辆IP或者端口为空");
ErrorCode ROBOT_PART_AREA = new ErrorCode(1-002-034-021, "车辆选择的楼层,不包含目前车辆停靠的楼层");
// ========== 机器人任务主表 1-002-035-000 ==========
ErrorCode TASK_NOT_EXISTS = new ErrorCode(1-002-035-001, "车辆任务主表不存在");

View File

@ -98,6 +98,7 @@ public class PathApiImpl implements PathApi {
*/
@Override
public void ppDistributionTaskFail(String message) {
log.info("111111路径规划上报失败的消息");
TenantContextHolder.setTenantId(1L);
RobotWarnMsgSaveReqVO data = JSON.parseObject(message, RobotWarnMsgSaveReqVO.class);
warnMsgService.createWarnMsg(data);
@ -108,7 +109,7 @@ public class PathApiImpl implements PathApi {
@Override
public void pathPlanningMove(String message) {
log.info("收到路径规划路径的消息 :{}", message);
log.info("111111路径规划发给车机的消息 :{}", message);
taskExecutor.execute(() -> {
TenantContextHolder.setTenantId(1L);
pathPlanningService.sendPosedsToRobot(message);
@ -145,7 +146,7 @@ public class PathApiImpl implements PathApi {
@Override
public void graphMatchData(String message) {
TenantContextHolder.setTenantId(1L);
log.info("匹配路网的消息 :{}",message);
log.info("111111路径规划匹配路网的消息 :{}",message);
pathPlanningService.graphMatchData(message);
}

View File

@ -30,7 +30,7 @@ public class RobotGenericsStatusApiImpl implements RobotGenericsStatusApi {
}
public void doUpdateRobotCommonStatus(RobotGenericsDataDTO robotStatusData) {
// log.info("车机每3秒上报其他状态信息 :{}", JSONUtil.toJsonStr(robotStatusData));
// log.info("111111车机每3秒上报其他状态信息 :{}", JSONUtil.toJsonStr(robotStatusData));
if (ObjectUtil.isEmpty(robotStatusData) || ObjectUtil.isEmpty(robotStatusData.getHwStates())
|| ObjectUtil.isEmpty(robotStatusData.getMac())) {
log.info("参数不全 :{}", JSON.toJSONString(robotStatusData));

View File

@ -41,7 +41,7 @@ public class RobotObstaclesStatusApiImpl implements RobotObstaclesStatusApi{
@Override
public void robotObstaclesStatus(String message) {
log.info("障碍物状态上报 :{}" ,message);
log.info("111111障碍物状态上报 :{}" ,message);
RobotObstaclesStatusDTO data = JSON.parseObject(message, RobotObstaclesStatusDTO.class);
if (!data.getObstacles()) {

View File

@ -41,7 +41,7 @@ public class RobotPathStatusApiImpl implements RobotPathStatusApi {
}
private void doRobotPathStatus(String message) {
log.info("导航实时行为上报: {}", message);
log.info("111111导航实时行为上报: {}", message);
TenantContextHolder.setTenantId(1L);
RobotPathStatusDTO data = JSON.parseObject(message, RobotPathStatusDTO.class);
String robotNo = robotInformationService.getRobotNoByMac(data.getMac());

View File

@ -128,7 +128,7 @@ public class RobotTaskStatusApiImpl implements RobotTaskStatusApi {
@Transactional(rollbackFor = Exception.class)
public void doRobotDoneTask(RobotCompleteTaskDTO robotCompleteTaskDTO) {
log.info("机器人完成任务上报 :{}", JSON.toJSONString(robotCompleteTaskDTO));
log.info("111111机器人完成任务上报 :{}", JSON.toJSONString(robotCompleteTaskDTO));
TenantContextHolder.setTenantId(1L);
String robotDoingActionKey = RobotTaskChcheConstant.ROBOT_QUERY_DOING_ACTION + robotCompleteTaskDTO.getMac();
@ -193,7 +193,7 @@ public class RobotTaskStatusApiImpl implements RobotTaskStatusApi {
, null);
if (PathTaskTypeEnum.AUTO_CHARGE.getType().equals(robotCompleteTaskDTO.getOrderType())
|| PathTaskTypeEnum.CHARGE.getType().equals(robotCompleteTaskDTO.getOrderType()) ) {
|| PathTaskTypeEnum.CHARGE.getType().equals(robotCompleteTaskDTO.getOrderType())) {
chargeDoing(robotCompleteTaskDTO);
}
}
@ -206,6 +206,12 @@ public class RobotTaskStatusApiImpl implements RobotTaskStatusApi {
* @param orderId
*/
public void sendStartDoActionToPP(RobotCommandStateDTO commandStatus, String mac, String orderId) {
if (ObjectUtil.isNotEmpty(commandStatus)
|| CommandTypeEnum.WORK_PICK_UP_GOODS_MOVE_TO_CHECK.getType().equals(commandStatus.getCommandType())
|| CommandTypeEnum.WORK_DROP_OFF_GOODS_MOVE_TO_CHECK.getType().equals(commandStatus.getCommandType())) {
log.info("不发作业");
return;
}
if (ObjectUtil.isNotEmpty(commandStatus) && RobotExecutionStateConstant.DOING.equals(commandStatus.getExecutionState())
&& !CommandTypeEnum.MOVE_POSES.getType().equals(commandStatus.getCommandType())) {
String robotNo = robotInformationService.getRobotNoByMac(mac);
@ -247,10 +253,10 @@ public class RobotTaskStatusApiImpl implements RobotTaskStatusApi {
} else if (PathTaskTypeEnum.TAKE_RELEASE.getType().equals(robotCompleteTaskDTO.getOrderType())) {
RobotTaskDetailDO robotTaskDetailDO = robotTaskDetailMapper.selectById(robotCompleteTaskDTO.getOrderId());
if (CommandTypeEnum.WORK_PICK_UP_GOODS.getType().equals(robotCompleteTaskDTO.getCommandStatus().getCommandType())) {
log.info("告诉路径规划任务完成 :{}, 状态: {}", robotCompleteTaskDTO.getOrderId(), PathIsReachEnum.END_WORK.getType());
log.info("告诉路径规划取货任务完成 :{}, 状态: {}", robotCompleteTaskDTO.getOrderId(), PathIsReachEnum.END_WORK.getType());
pathPlanningService.updateBehavior(String.valueOf(robotCompleteTaskDTO.getOrderId()), robotTaskDetailDO.getRobotNo()
, "", PathIsReachEnum.END_WORK.getType());
robotTaskDetailDO.setTaskStage(RobotTaskStageEnum.TAKEING.getType());
robotTaskDetailDO.setTaskStage(RobotTaskStageEnum.GO_RELEASE.getType());
robotTaskDetailMapper.updateById(robotTaskDetailDO);
return;
} else if (CommandTypeEnum.WORK_DROP_OFF_GOODS.getType().equals(robotCompleteTaskDTO.getCommandStatus().getCommandType())) {
@ -260,7 +266,7 @@ public class RobotTaskStatusApiImpl implements RobotTaskStatusApi {
if (PathTaskTypeEnum.AUTO_CHARGE.getType().equals(robotCompleteTaskDTO.getOrderType())
|| PathTaskTypeEnum.CHARGE.getType().equals(robotCompleteTaskDTO.getOrderType())) {
chargeLogMapper.updateChargStatusByTaskId(robotCompleteTaskDTO.getOrderId(),ChargeTaskStatusEnum.DONE.getType());
chargeLogMapper.updateChargStatusByTaskId(robotCompleteTaskDTO.getOrderId(), ChargeTaskStatusEnum.DONE.getType());
}
taskDetailActionLogMapper.updateActionStatus(robotCompleteTaskDTO.getOrderId(), ActionStatusEnum.DONE.getType(), LocalDateTime.now());
@ -289,7 +295,7 @@ public class RobotTaskStatusApiImpl implements RobotTaskStatusApi {
toWareHouseLocation.setLocationLock(LocationLockEnum.YES.getType());
toWareHouseLocation.setLocationUseStatus(LocationUseStatusEnum.YES.getType());
locationMapper.updateById(toWareHouseLocation);
pushWareLocation(toWareHouseLocation,robotCompleteTaskDTO.getMac(),ZeroOneEnum.ONE.getType());
pushWareLocation(toWareHouseLocation, robotCompleteTaskDTO.getMac(), ZeroOneEnum.ONE.getType());
}
/**
@ -345,7 +351,7 @@ public class RobotTaskStatusApiImpl implements RobotTaskStatusApi {
wareHouseLocationDO.setLocationLock(LocationLockEnum.YES.getType());
wareHouseLocationDO.setLocationUseStatus(LocationUseStatusEnum.NO.getType());
locationMapper.updateById(wareHouseLocationDO);
pushWareLocation(wareHouseLocationDO,robotCompleteTaskDTO.getMac(),ZeroOneEnum.ZERO.getType());
pushWareLocation(wareHouseLocationDO, robotCompleteTaskDTO.getMac(), ZeroOneEnum.ZERO.getType());
}
public void pushWareLocation(WareHouseLocationDO wareHouseLocationDO, String mac, Integer type) {
@ -393,10 +399,10 @@ public class RobotTaskStatusApiImpl implements RobotTaskStatusApi {
// taskService.closeTaskDetail(robotCompleteTaskDTO.getOrderId().toString(),robotCompleteTaskDTO.getMac());
String robotNo = robotInformationService.getRobotNoByMac(robotCompleteTaskDTO.getMac());
String msg = "";
String msg = null;
RobotTaskDetailDO robotTaskDetailDO = robotTaskDetailMapper.selectById(robotCompleteTaskDTO.getOrderId());
if (PathTaskTypeEnum.TAKE_RELEASE.getType().equals(robotCompleteTaskDTO.getOrderType())
|| PathTaskTypeEnum.TAKE.getType().equals(robotCompleteTaskDTO.getOrderType())) {
RobotTaskDetailDO robotTaskDetailDO = robotTaskDetailMapper.selectById(robotCompleteTaskDTO.getOrderId());
if (RobotTaskStageEnum.GO_TAKE.getType().equals(robotTaskDetailDO.getTaskStage())
|| RobotTaskStageEnum.UN_START.getType().equals(robotTaskDetailDO.getTaskStage())) {
robotTaskDetailDO.setTaskStatus(RobotTaskDetailStatusEnum.NEW.getType());
@ -439,8 +445,7 @@ public class RobotTaskStatusApiImpl implements RobotTaskStatusApi {
String solve = "";
String taskNo = "";
if (!PathTaskTypeEnum.AUTO_CHARGE.getType().equals(robotCompleteTaskDTO.getOrderType())
&& ObjectUtil.isEmpty(msg)) {
if (ObjectUtil.isEmpty(msg)) {
taskNo = taskDetailService.getTaskNoByDetailId(robotCompleteTaskDTO.getOrderId());
solve = " 并且到任务列表关闭任务 " + taskNo;
taskDetailService.setTaskDetailError(robotCompleteTaskDTO.getOrderId());
@ -478,7 +483,7 @@ public class RobotTaskStatusApiImpl implements RobotTaskStatusApi {
setTaskDone(robotCompleteTaskDTO);
}
chargeLogMapper.updateChargStatusByTaskId(robotCompleteTaskDTO.getOrderId(),ChargeTaskStatusEnum.CHARGEING.getType());
chargeLogMapper.updateChargStatusByTaskId(robotCompleteTaskDTO.getOrderId(), ChargeTaskStatusEnum.CHARGEING.getType());
}
public RobotTaskDetailDO setTaskDone(RobotCompleteTaskDTO robotCompleteTaskDTO) {

View File

@ -50,7 +50,7 @@ public class RobotUpdatePalletHeightApiImpl implements RobotUpdatePalletHeightAp
@Override
@Transactional(rollbackFor = Exception.class)
public void updatePalletHeight(String message) {
log.info("高度反馈 :{}", message);
log.info("111111高度反馈 :{}", message);
TenantContextHolder.setTenantId(1L);
RobotUpdatePalletHeightDTO data = JSON.parseObject(message, RobotUpdatePalletHeightDTO.class);
if (RobotCommandTypeEnum.WORK_DROP_OFF_GOODS.getType().equals(data.getCommandType())) {

View File

@ -34,7 +34,7 @@ public class RobotWorkStatusApiImpl implements RobotWorkStatusApi {
@Override
public void robotWorkStatus(String message) {
log.info("作业实时行为上报: {}", message);
log.info("111111作业实时行为上报: {}", message);
TenantContextHolder.setTenantId(1L);
RobotWorkStatusDTO data = JSON.parseObject(message, RobotWorkStatusDTO.class);

View File

@ -130,4 +130,11 @@ public class RobotTaskController {
return success(true);
}
@GetMapping("/getRobotTaskNum")
@Operation(summary = "获取这台车工作的任务总数")
@Parameter(name = "robotNo", description = "车辆编号", required = true, example = "1024")
@PreAuthorize("@ss.hasPermission('robot:task:getRobotTaskNum')")
public CommonResult<Integer> getRobotTaskNum(@RequestParam("robotNo") String robotNo) {
return success(taskService.getRobotTaskNum(robotNo));
}
}

View File

@ -84,6 +84,7 @@ public class PositionMapItemDO extends BaseDO {
/**
* AGV编号
*/
@TableField(updateStrategy = FieldStrategy.IGNORED)
private String robotNo;
}

View File

@ -27,4 +27,10 @@ public interface TaskCycleMapper extends BaseMapperX<TaskCycleDO> {
}
void deletByRobotTaskId(@Param("robotTaskId") Long robotTaskId);
/**
* 批量删除
* @param taskIds
*/
void deletByRobotTaskIds(@Param("taskIds") Set<Long> taskIds);
}

View File

@ -565,6 +565,7 @@ public class PathPlanningServiceImpl implements PathPlanningService {
public void updateBehavior(String orderId, String robotNo, String behaviorId, String isReach) {
TaskPathPlanningDTO build = TaskPathPlanningDTO.builder().orderId(orderId).robotNo(robotNo)
.behaviorId(behaviorId).isReach(isReach).build();
log.info("111111发给PP的数据 :{}",JSON.toJSONString(build));
commonApi.commonMethod(build, PathPlanningTopicConstant.UPDATE_BEHAVIOR);
}
@ -574,7 +575,7 @@ public class PathPlanningServiceImpl implements PathPlanningService {
*/
@Override
public void pathPlanningMovePose(String message) {
log.info("车辆即将行走的点位 :{}",message);
log.info("111111路径规划车辆即将行走的点位 :{}",message);
PathPlanningMovePoseVO robotStatusData = JSON.parseObject(message, PathPlanningMovePoseVO.class);
String mac = robotInformationService.getMacByRobotNo(robotStatusData.getRobotNo());
String floorAreaKey = RobotTaskChcheConstant.ROBOT_FLOOR_AREA + mac;

View File

@ -162,7 +162,7 @@ public class RobotInformationServiceImpl extends ServiceImpl<RobotInformationMap
@Value("${zn.is_simulation:false}")
private Boolean isSimulation;
@Value("${zn.restore_task_restart:true}")
@Value("${zn.restore_task_ restart:true}")
private Boolean restoreTaskRestart;
@Value("${zn.full_electricity:95}")
@ -369,6 +369,21 @@ public class RobotInformationServiceImpl extends ServiceImpl<RobotInformationMap
validateInformationExists(updateReqVO.getId());
RobotInformationDO robotInformationDO = informationMapper.selectById(updateReqVO.getId());
if (RobotStatusEnum.STAND_BY.getType().equals(robotInformationDO.getRobotStatus()) ) {
PositionMapItemDO positionMapItem = positionMapItemMapper.selectOne(new LambdaQueryWrapper<PositionMapItemDO>()
.eq(PositionMapItemDO::getRobotNo, robotInformationDO.getRobotNo())
.eq(PositionMapItemDO::getUseStatus, UseStatusEnum.USEING.getType())
.eq(PositionMapItemDO::getType, PositionMapItemEnum.STOP.getType())
.last("limit 1"));
if (ObjectUtil.isNotEmpty(positionMapItem) && ObjectUtil.isEmpty(updateReqVO.getFloorAreaJson())) {
log.info("车辆 :{} ,停靠在 :{},",robotInformationDO.getRobotNo(), positionMapItem.getPositionMapId());
throw exception(ROBOT_PART_AREA);
}else if (ObjectUtil.isNotEmpty(positionMapItem) && ObjectUtil.isNotEmpty(updateReqVO.getFloorAreaJson())
&& !updateReqVO.getFloorAreaJson().contains(positionMapItem.getPositionMapId())) {
throw exception(ROBOT_PART_AREA);
}
}
RemoteControllerInformationDO remoteControllerInformation = controllerInformationMapper.selectOne(new LambdaQueryWrapper<RemoteControllerInformationDO>()
.eq(RemoteControllerInformationDO::getRobotNo, robotInformationDO.getRobotNo())
.last("limit 1"));
@ -425,7 +440,7 @@ public class RobotInformationServiceImpl extends ServiceImpl<RobotInformationMap
checkIpAndPort(updateObj);
if (!updateReqVO.getRobotNo().equals(robotInformationDO.getRobotNo())) {
updateRobotNo(robotInformationDO.getRobotNo(),updateReqVO.getRobotNo());
updateRobotNo(robotInformationDO.getRobotNo(), updateReqVO.getRobotNo());
}
informationMapper.updateById(updateObj);
@ -483,15 +498,16 @@ public class RobotInformationServiceImpl extends ServiceImpl<RobotInformationMap
/**
* 跟新车辆编号
*
* @param oldRobotNo
* @param newRobotNo
*/
@Transactional(rollbackFor = Exception.class)
public void updateRobotNo(String oldRobotNo, String newRobotNo) {
deviceInformationMapper.updateRobotNo(oldRobotNo,newRobotNo);
deviceInformationMapper.updateRobotNo(oldRobotNo, newRobotNo);
controllerInformationMapper.updateRobotNo(oldRobotNo,newRobotNo);
controllerInformationMapper.updateRobotNo(oldRobotNo, newRobotNo);
RobotChargeLogDO robotChargeLog = chargeLogMapper.selectOne(new LambdaQueryWrapperX<RobotChargeLogDO>()
.eq(RobotChargeLogDO::getRobotNo, oldRobotNo)
@ -504,11 +520,11 @@ public class RobotInformationServiceImpl extends ServiceImpl<RobotInformationMap
//这表暂时不改
// robotWorkingHoursStatisticsMapper
mapStopMapper.updateRobotNo(oldRobotNo,newRobotNo);
mapStopMapper.updateRobotNo(oldRobotNo, newRobotNo);
moveToWaitMapper.updateRobotNo(oldRobotNo,newRobotNo);
moveToWaitMapper.updateRobotNo(oldRobotNo, newRobotNo);
positionMapItemMapper.updateRobotNo(oldRobotNo,newRobotNo);
positionMapItemMapper.updateRobotNo(oldRobotNo, newRobotNo);
}
@Override
@ -543,6 +559,16 @@ public class RobotInformationServiceImpl extends ServiceImpl<RobotInformationMap
// 删除
informationMapper.deleteById(id);
PositionMapItemDO positionMapItem = positionMapItemMapper.selectOne(new LambdaQueryWrapper<PositionMapItemDO>()
.eq(PositionMapItemDO::getRobotNo, robotInformationDO.getRobotNo())
.eq(PositionMapItemDO::getType, PositionMapItemEnum.STOP.getType())
.last("limit 1"));
if (ObjectUtil.isNotEmpty(positionMapItem)) {
positionMapItem.setRobotNo(null);
positionMapItem.setUseStatus(UseStatusEnum.FREE.getType());
positionMapItemMapper.updateById(positionMapItem);
}
//释放暂停记录
releaseRobotStop(robotInformationDO);
@ -668,7 +694,7 @@ public class RobotInformationServiceImpl extends ServiceImpl<RobotInformationMap
if (ObjectUtil.isNotEmpty(cargoDetected) && RobotStatusCodeConstant.CARGO_DETECTED.equals(Boolean.parseBoolean(String.valueOf(cargoDetected)))) {
//说明取货完成
v.setCargoDetected("有货");
}else {
} else {
v.setCargoDetected("空车");
}
if (RobotStatisticsTypeEnum.STANDBY.getType().equals(pageReqVO.getRobotStatisticsType())
@ -1318,7 +1344,7 @@ public class RobotInformationServiceImpl extends ServiceImpl<RobotInformationMap
wareHouseLocation.setLocationUseStatus(LocationUseStatusEnum.NO.getType());
wareHouseLocationMapper.updateById(wareHouseLocation);
}
}else {
} else {
takeCheck(robotTaskDetail.getFromLocationId(), robotTaskDetail.getRobotTaskId(), isRemote);
}
releaseCheck(robotTaskDetail.getToLocationId(), robotTaskDetail.getRobotTaskId());

View File

@ -246,6 +246,7 @@ public class RobotTaskDetailServiceImpl implements RobotTaskDetailService {
public void setTaskDetailError(Long id) {
RobotTaskDetailDO robotTaskDetailDO = new RobotTaskDetailDO();
robotTaskDetailDO.setId(id);
robotTaskDetailDO.setTaskStatus(RobotTaskStatusEnum.Exc.getType());
robotTaskDetailDO.setOccurError(ZeroOneEnum.ONE.getType());
taskDetailMapper.updateById(robotTaskDetailDO);
}

View File

@ -115,4 +115,11 @@ public interface RobotTaskService extends IService<RobotTaskDO> {
* @param robotNo
*/
void chargeDone(String robotNo);
/**
* 查询车辆的工作总数
* @param robotNo
* @return
*/
Integer getRobotTaskNum(String robotNo);
}

View File

@ -512,6 +512,8 @@ public class RobotTaskServiceImpl extends ServiceImpl<RobotTaskMapper, RobotTask
taskDetailMapper.updateById(taskDetailDOS);
taskCycleMapper.deletByRobotTaskId(robotTaskDO.getId());
if (ObjectUtil.isNotEmpty(locationIds)) {
locationMapper.releaseLocationLockList(locationIds, robotTaskDO.getId()
, LocationLockEnum.YES.getType());
@ -536,13 +538,11 @@ public class RobotTaskServiceImpl extends ServiceImpl<RobotTaskMapper, RobotTask
robotInformationDO.setRobotTaskModel(RobotTaskModelEnum.REJECTION.getType());
}*/
//因为机器人如果正在抬叉取货这时把任务取消如果货叉刚好伸到托盘底下还是需要人为控制
robotInformationDO.setRobotTaskModel(RobotTaskModelEnum.REJECTION.getType());
// robotInformationDO.setRobotTaskModel(RobotTaskModelEnum.REJECTION.getType());
robotInformationDO.setRobotStatus(RobotStatusEnum.STAND_BY.getType());
}
informationMapper.updateById(robotInformationDOS);
taskCycleMapper.deletByRobotTaskId(robotTaskDO.getId());
}
@Override
@ -582,7 +582,7 @@ public class RobotTaskServiceImpl extends ServiceImpl<RobotTaskMapper, RobotTask
*/
@Override
public void assignTasks(String message) {
log.info("PP分配任务,开始更新任务状态 :{}", message);
log.info("111111PP路径规划分配任务,开始更新任务状态 :{}", message);
TaskAssignDTO taskAssignDTO = JSON.parseObject(message, TaskAssignDTO.class);
String mac = robotInformationService.getMacByRobotNo(taskAssignDTO.getRobotNo());
@ -818,6 +818,7 @@ public class RobotTaskServiceImpl extends ServiceImpl<RobotTaskMapper, RobotTask
taskDetailMapper.updateById(taskDetailDO);
RobotTaskDO task = new RobotTaskDO();
task.setId(taskDetailDO.getRobotTaskId());
task.setStartTime(LocalDateTime.now());
task.setTaskStatus(RobotTaskStatusEnum.DOING.getType());
taskMapper.updateById(task);
String taskNo = taskDetailMapper.getTaskNoByDetailId(detailId);
@ -1622,6 +1623,15 @@ public class RobotTaskServiceImpl extends ServiceImpl<RobotTaskMapper, RobotTask
}
}
@Override
public Integer getRobotTaskNum(String robotNo) {
List<RobotTaskDetailDO> taskDetailDOS = taskDetailMapper.selectList(new LambdaQueryWrapperX<RobotTaskDetailDO>()
.eq(RobotTaskDetailDO::getRobotNo, robotNo)
.ne(RobotTaskDetailDO::getTaskStatus, RobotTaskStatusEnum.NEW.getType()));
return ObjectUtil.isEmpty(taskDetailDOS) ? 0 : taskDetailDOS.size();
}
/**
* 任务日志分页
*

View File

@ -7,6 +7,7 @@ import cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder;
import cn.iocoder.yudao.module.system.controller.admin.robot.vo.RobotTaskDetailAddVO;
import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotTaskDO;
import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotTaskDetailDO;
import cn.iocoder.yudao.module.system.dal.mysql.cycle.TaskCycleMapper;
import cn.iocoder.yudao.module.system.dal.mysql.houselocation.WareHouseLocationMapper;
import cn.iocoder.yudao.module.system.dal.mysql.robot.RobotTaskDetailMapper;
import cn.iocoder.yudao.module.system.dal.mysql.robot.RobotTaskMapper;
@ -59,6 +60,9 @@ public class CycleServiceImpl implements CycleService {
@Resource
private RobotTaskService robotTaskService;
@Resource
private TaskCycleMapper taskCycleMapper;
/**
* 创建循环任务
*/
@ -120,6 +124,7 @@ public class CycleServiceImpl implements CycleService {
taskDetailMap.forEach((k,v) ->{
robotTaskService.addCycle(k,v);
});
taskCycleMapper.deletByRobotTaskIds(taskIds);
}
private List<RobotTaskDetailDO> getTaskDetailData(RobotTaskDO taskData, Map<Long,

View File

@ -205,6 +205,8 @@ public class RobotPathPlanningServiceImpl implements RobotPathPlanningService {
return;
}
Map<Long, Long> sortMap = positionMapItems.stream().collect(Collectors.toMap(PositionMapItemDO::getId, PositionMapItemDO::getSortNum));
List<String> inStopPointRobotNos = new ArrayList<>();
for (PositionMapItemDO positionMapItem : positionMapItems) {
if (UseStatusEnum.USEING.getType().equals(positionMapItem.getUseStatus()) && ObjectUtil.isNotEmpty(positionMapItem.getRobotNo())) {
@ -285,8 +287,6 @@ public class RobotPathPlanningServiceImpl implements RobotPathPlanningService {
return;
}
Map<Long, Long> sortMap = positionMapItems.stream().collect(Collectors.toMap(PositionMapItemDO::getId, PositionMapItemDO::getSortNum));
//机器人不能行走的区域
List<TaskRobotNoLimittationAreaDTO> robotNoLimitationArea = getRobotNoLimitationArea(robots);
Map<String, TaskRobotNoLimittationAreaDTO> robotNoLimittationAreaDTOMap =
@ -484,15 +484,15 @@ public class RobotPathPlanningServiceImpl implements RobotPathPlanningService {
String cargoDetectedKey = RobotTaskChcheConstant.ROBOT_CARGO_DETECTED + mac;
Object cargoDetected = redisUtil.get(cargoDetectedKey);
log.info("传感器是否按下 :{}", cargoDetected);
if (ObjectUtil.isEmpty(cargoDetected) || (RobotStatusCodeConstant.CARGO_DETECTED.equals(Boolean.parseBoolean(String.valueOf(cargoDetected)))
/* if (ObjectUtil.isNotEmpty(cargoDetected) && (RobotStatusCodeConstant.CARGO_DETECTED.equals(Boolean.parseBoolean(String.valueOf(cargoDetected)))
&& !RobotTaskTypeEnum.RELEASE.getType().equals(taskDetailDO.getTaskType()))) {
log.info("车机上报传感器为空, 或者 被按下且任务非仅放货任务 :{} ,任务id {}", taskDetailDO.getRobotNo(), taskDetailDO.getId());
continue;
} else if (!RobotStatusCodeConstant.CARGO_DETECTED.equals(Boolean.parseBoolean(String.valueOf(cargoDetected)))
} else if (ObjectUtil.isNotEmpty(cargoDetected) && !RobotStatusCodeConstant.CARGO_DETECTED.equals(Boolean.parseBoolean(String.valueOf(cargoDetected)))
&& RobotTaskTypeEnum.RELEASE.getType().equals(taskDetailDO.getTaskType())) {
log.info("仅放货任务,传感器未被按下,所以不执行任务 :{}, 任务id {}", taskDetailDO.getRobotNo(), taskDetailDO.getId());
continue;
}
}*/
List<TaskRobotNoLimittationAreaDTO> robotNoLimitions = null;
if (ObjectUtil.isEmpty(taskDetailDO.getRobotNo())) {
@ -550,7 +550,7 @@ public class RobotPathPlanningServiceImpl implements RobotPathPlanningService {
}
if (ObjectUtil.isNotEmpty(pathPlanningList)) {
log.info("作业任务下发给PP :{}", JSON.toJSONString(pathPlanningList));
log.info("111111作业任务下发给PP :{}", JSON.toJSONString(pathPlanningList));
commonApi.commonMethod(pathPlanningList, PathPlanningTopicConstant.TASK_ASSIGNMENT_REQUEST);
}
}
@ -578,7 +578,7 @@ public class RobotPathPlanningServiceImpl implements RobotPathPlanningService {
Integer locationStorey = toLocation.getLocationStorey() - 1;
double height = locationStorey * defaultTrayHeight;
log.info("放货设置默认高度 :{}", pathPlanning.getReleaseHeight());
log.info("放货设置默认高度 :{}", height);
pathPlanning.setReleaseHeight(height);
}

View File

@ -12,4 +12,12 @@
<delete id="deletByRobotTaskId">
delete from robot_task_cycle where robot_task_id = #{robotTaskId}
</delete>
<delete id="deletByRobotTaskIds">
delete from robot_task_cycle
where robot_task_id in
<foreach collection="taskIds" item="robotTaskId" index="index" open="(" close=")"
separator=",">
#{robotTaskId}
</foreach>
</delete>
</mapper>