From 5c4dc772691c9d574debe8001680436391abb306 Mon Sep 17 00:00:00 2001 From: cbs <18617195505@163.com> Date: Mon, 14 Apr 2025 10:38:08 +0800 Subject: [PATCH] =?UTF-8?q?=E8=BD=A6=E8=BE=86IP=E5=92=8C=E4=BB=BF=E7=9C=9F?= =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/robot/RobotTaskStatusApiImpl.java | 5 + .../robot/vo/RobotInformationPageReqVO.java | 6 + .../robot/vo/RobotInformationPageRespVO.java | 6 + .../robot/vo/RobotInformationRespVO.java | 6 + .../robot/vo/RobotInformationSaveReqVO.java | 10 ++ .../dataobject/robot/RobotInformationDO.java | 10 ++ .../service/path/PathPlanningServiceImpl.java | 7 ++ .../robot/RobotInformationServiceImpl.java | 25 +++- .../src/main/resources/application-dev.yaml | 1 + .../src/main/resources/application-local.yaml | 1 + .../houselocation/WareHouseLocationMapper.xml | 2 +- .../mapper/robot/RobotInformationMapper.xml | 111 ++---------------- .../robot/RobotTaskDetailActionLogMapper.xml | 1 + .../mapper/robot/RobotTaskMapper.xml | 2 +- 14 files changed, 90 insertions(+), 103 deletions(-) diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/api/robot/RobotTaskStatusApiImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/api/robot/RobotTaskStatusApiImpl.java index 4d8b1afbf..9c22ce69e 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/api/robot/RobotTaskStatusApiImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/api/robot/RobotTaskStatusApiImpl.java @@ -116,6 +116,11 @@ public class RobotTaskStatusApiImpl implements RobotTaskStatusApi { TenantContextHolder.setTenantId(1L); String robotDoingActionKey = RobotTaskChcheConstant.ROBOT_QUERY_DOING_ACTION + robotCompleteTaskDTO.getMac(); + if (ObjectUtil.isEmpty(robotCompleteTaskDTO.getOrderId())) { + log.info("没有任务id :{}",JSON.toJSONString(robotCompleteTaskDTO)); + return; + } + if (!RobotStatusCodeEnum.SUCCESS.getType().equals(robotCompleteTaskDTO.getStatusCode())) { log.info("车机上报异常 :{}", JSON.toJSONString(robotCompleteTaskDTO)); closeTask(robotCompleteTaskDTO);//todo 取不了和放不了的异常 diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/robot/vo/RobotInformationPageReqVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/robot/vo/RobotInformationPageReqVO.java index 717edb6ea..079709847 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/robot/vo/RobotInformationPageReqVO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/robot/vo/RobotInformationPageReqVO.java @@ -56,4 +56,10 @@ public class RobotInformationPageReqVO extends PageParam { @Schema(description = "robot_task_detail的id") private Long taskDetailId; + @Schema(description = "车辆IP") + private String robotIp; + + @Schema(description = "车辆端口") + private Long robotPort; + } \ No newline at end of file diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/robot/vo/RobotInformationPageRespVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/robot/vo/RobotInformationPageRespVO.java index a6f78d448..ea6c440bb 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/robot/vo/RobotInformationPageRespVO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/robot/vo/RobotInformationPageRespVO.java @@ -90,4 +90,10 @@ public class RobotInformationPageRespVO { @Schema(description = "robot_task_detail的id") private Long taskDetailId; + @Schema(description = "车辆IP") + private String robotIp; + + @Schema(description = "车辆端口") + private Long robotPort; + } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/robot/vo/RobotInformationRespVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/robot/vo/RobotInformationRespVO.java index 8d4eea53a..da80b1001 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/robot/vo/RobotInformationRespVO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/robot/vo/RobotInformationRespVO.java @@ -84,4 +84,10 @@ public class RobotInformationRespVO { @Schema(description = "robot_task_detail的id") private Long taskDetailId; + @Schema(description = "车辆IP") + private String robotIp; + + @Schema(description = "车辆端口") + private Long robotPort; + } \ No newline at end of file diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/robot/vo/RobotInformationSaveReqVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/robot/vo/RobotInformationSaveReqVO.java index 2f3bad512..abe0a1319 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/robot/vo/RobotInformationSaveReqVO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/robot/vo/RobotInformationSaveReqVO.java @@ -2,9 +2,11 @@ package cn.iocoder.yudao.module.system.controller.admin.robot.vo; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; +import org.hibernate.validator.constraints.Range; import javax.validation.constraints.NotEmpty; import javax.validation.constraints.NotNull; +import javax.validation.constraints.Size; import java.util.Set; @Schema(description = "管理后台 - 车辆信息新增/修改 Request VO") @@ -50,4 +52,12 @@ public class RobotInformationSaveReqVO { @Schema(description = "robot_task_detail的id") private Long taskDetailId; + + @Schema(description = "车辆IP") + @Size(min = 0, max = 20, message = "车辆IP长度超过限制") + private String robotIp; + + @Schema(description = "车辆端口") + @Range(min = 0, max = 6, message = "车辆端口长度超过限制") + private Long robotPort; } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/robot/RobotInformationDO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/robot/RobotInformationDO.java index 4800a9d33..6edc73fde 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/robot/RobotInformationDO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/robot/RobotInformationDO.java @@ -78,4 +78,14 @@ public class RobotInformationDO extends BaseDO { */ private Long taskDetailId; + /** + * 车辆IP + */ + private String robotIp; + + /** + * 车辆端口 + */ + private Long robotPort; + } \ No newline at end of file diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/path/PathPlanningServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/path/PathPlanningServiceImpl.java index 48706a568..fc78acb4f 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/path/PathPlanningServiceImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/path/PathPlanningServiceImpl.java @@ -524,6 +524,13 @@ public class PathPlanningServiceImpl implements PathPlanningService { simulationRobotPoseDTO.setLocationYaw(itemDOList.get(i).getLocationYaw()); simulationRobotPoseDTO.setFloor(positionMap.getFloor()+""); simulationRobotPoseDTO.setArea(positionMap.getArea()); + + String floorAreaKey = RobotTaskChcheConstant.ROBOT_FLOOR_AREA + robot.getMacAddress(); + FloorZoneDTO floorZoneDTO = new FloorZoneDTO(); + floorZoneDTO.setFloor(simulationRobotPoseDTO.getFloor()); + floorZoneDTO.setArea(simulationRobotPoseDTO.getArea()); + redisUtil.set(floorAreaKey, JSON.toJSONString(floorZoneDTO)); + simulationList.add(simulationRobotPoseDTO); i++; } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/RobotInformationServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/RobotInformationServiceImpl.java index f3a5a01cf..cddf3b3b8 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/RobotInformationServiceImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/RobotInformationServiceImpl.java @@ -12,6 +12,7 @@ import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils; import cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder; 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.dto.RobotDimensionsDTO; 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.task.dto.RobotAcceptTaskDTO; @@ -162,6 +163,9 @@ public class RobotInformationServiceImpl extends ServiceImpl list = informationMapper.selectRobotDimensions(); + pathPlanningApi.synchronousLineObject(list, PathPlanningTopicConstant.SEND_ROBOT_DIMENSIONS); + + redisUtil.del(key); // 返回 return information.getId(); } @@ -243,14 +252,16 @@ public class RobotInformationServiceImpl extends ServiceImpl> list = CollectionUtils.compareLists( (CollUtil.isEmpty(robotInformationDO.getFloorAreaJson()) ? Collections.emptyList() : new ArrayList<>(robotInformationDO.getFloorAreaJson())), (CollUtil.isEmpty(updateReqVO.getFloorAreaJson()) ? Collections.emptyList() : new ArrayList<>(updateReqVO.getFloorAreaJson())), ObjectUtil::equal); informationMapAssociationService.saveOrUpdateOrDel(updateReqVO.getId(), list); + redisUtil.set(RobotTaskChcheConstant.ROBOT_GET_ROBOTNO_BY_MAC + updateObj.getMacAddress(), updateObj.getRobotNo()); + redisUtil.set(RobotTaskChcheConstant.ROBOT_GET_MAC_BY_NO + updateObj.getRobotNo(), updateObj.getMacAddress()); + + redisUtil.del(key); String str = ""; if (!robotInformationDO.getRobotTaskModel().equals(updateReqVO.getRobotTaskModel()) @@ -265,6 +276,9 @@ public class RobotInformationServiceImpl extends ServiceImpl RobotDimensions = informationMapper.selectRobotDimensions(); + pathPlanningApi.synchronousLineObject(RobotDimensions, PathPlanningTopicConstant.SEND_ROBOT_DIMENSIONS); } @Override @@ -289,6 +303,11 @@ public class RobotInformationServiceImpl extends ServiceImpl RobotDimensions = informationMapper.selectRobotDimensions(); + pathPlanningApi.synchronousLineObject(RobotDimensions, PathPlanningTopicConstant.SEND_ROBOT_DIMENSIONS); + + redisUtil.del(key); } private void validateInformationExists(Long id) { @@ -866,7 +885,7 @@ public class RobotInformationServiceImpl extends ServiceImpl robotNoLimitions = Arrays.asList(taskRobotNoLimittationAreaDTO); pathPlanning.setRobotNoLimitationAreaDTOS(robotNoLimitions); - if (!isSimulation) { + if (!isSimulation || !restoreTaskRestart) { resendToPPData(pathPlanning,actionLog,robotInformationDO); } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/resources/application-dev.yaml b/yudao-module-system/yudao-module-system-biz/src/main/resources/application-dev.yaml index 58b66191e..b24a2ce2c 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/resources/application-dev.yaml +++ b/yudao-module-system/yudao-module-system-biz/src/main/resources/application-dev.yaml @@ -208,3 +208,4 @@ zn: path_planning: task_chche_time: 604800 #任务缓存的时间, 默认一星期 is_simulation: true # 是否为仿真环境 + restore_task_restart: true # 恢复任务是否全部重新执行 true:全部重新开始 diff --git a/yudao-module-system/yudao-module-system-biz/src/main/resources/application-local.yaml b/yudao-module-system/yudao-module-system-biz/src/main/resources/application-local.yaml index 20021e674..52ae73522 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/resources/application-local.yaml +++ b/yudao-module-system/yudao-module-system-biz/src/main/resources/application-local.yaml @@ -243,6 +243,7 @@ zn: path_planning: task_chche_time: 604800 #任务缓存的时间, 默认一星期 is_simulation: true # 是否为仿真环境 + restore_task_restart: true # 恢复任务是否全部重新执行 true:全部重新开始 logging: file: diff --git a/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/houselocation/WareHouseLocationMapper.xml b/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/houselocation/WareHouseLocationMapper.xml index 703a3e722..5867a4eb2 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/houselocation/WareHouseLocationMapper.xml +++ b/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/houselocation/WareHouseLocationMapper.xml @@ -188,7 +188,7 @@ tray_info, location_enable, location_lock, location_use_status, location_x, location_y, location_wide, location_deep, location_height, location_default_height, location_total_height, location_tray_height, location_storey, location_type, location_number, creator, create_time, updater, update_time, deleted, tenant_id - from zn_wcs.ware_house_location + from ware_house_location select id, robot_model_id, robot_model_number, robot_no, robot_task_model, mac_address, url, robot_status, creator, - create_time, updater, update_time, deleted, tenant_id,task_detail_id - from zn_wcs.robot_information - - - - - - update robot_information - - - robot_model_id = #{robotModelId}, - - - robot_model_number = #{robotModelNumber}, - - - robot_no = #{robotNo}, - - - robot_task_model = #{robotTaskModel}, - - - mac_address = #{macAddress}, - - - url = #{url}, - - - robot_status = #{robotStatus}, - - - creator = #{creator}, - - - create_time = #{createTime}, - - - updater = #{updater}, - - - update_time = #{updateTime}, - - - deleted = #{deleted}, - - - tenant_id = #{tenantId}, - - - where id = #{id} - update diff --git a/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/robot/RobotTaskDetailActionLogMapper.xml b/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/robot/RobotTaskDetailActionLogMapper.xml index a6f732a4e..c8c2184ef 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/robot/RobotTaskDetailActionLogMapper.xml +++ b/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/robot/RobotTaskDetailActionLogMapper.xml @@ -29,6 +29,7 @@ command_id = '-1' and deleted = '0' and action_status in ('0','1') + and create_time >= DATE_SUB(NOW(), INTERVAL 1 DAY) and command_type in diff --git a/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/robot/RobotTaskMapper.xml b/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/robot/RobotTaskMapper.xml index 4a010977b..997b4bf98 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/robot/RobotTaskMapper.xml +++ b/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/robot/RobotTaskMapper.xml @@ -148,7 +148,7 @@ id, montage_task, montage_number, sku_info, sku_batch, sku_number, priority, other_msg, do_cycle, do_move_all, cycle_number, remaining_cycle_number, task_no, task_status, task_stage, start_time, end_time, creator, create_time, updater, update_time, deleted, tenant_id - from zn_wcs.robot_task + from robot_task