diff --git a/yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/banner/core/BannerApplicationRunner.java b/yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/banner/core/BannerApplicationRunner.java index 6c01b9497..d08f91dff 100644 --- a/yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/banner/core/BannerApplicationRunner.java +++ b/yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/banner/core/BannerApplicationRunner.java @@ -29,22 +29,6 @@ public class BannerApplicationRunner implements ApplicationRunner { "https://cloud.iocoder.cn", "https://t.zsxq.com/02Yf6M7Qn"); - // 数据报表 - System.out.println("[报表模块 yudao-module-report 教程][参考 https://cloud.iocoder.cn/report/ 开启]"); - // 工作流 - System.out.println("[工作流模块 yudao-module-bpm 教程][参考 https://cloud.iocoder.cn/bpm/ 开启]"); - // 商城系统 - System.out.println("[商城系统 yudao-module-mall 教程][参考 https://cloud.iocoder.cn/mall/build/ 开启]"); - // ERP 系统 - System.out.println("[ERP 系统 yudao-module-erp - 教程][参考 https://cloud.iocoder.cn/erp/build/ 开启]"); - // CRM 系统 - System.out.println("[CRM 系统 yudao-module-crm - 教程][参考 https://cloud.iocoder.cn/crm/build/ 开启]"); - // 微信公众号 - System.out.println("[微信公众号 yudao-module-mp 教程][参考 https://cloud.iocoder.cn/mp/build/ 开启]"); - // 支付平台 - System.out.println("[支付系统 yudao-module-pay - 教程][参考 https://cloud.iocoder.cn/pay/build/ 开启]"); - // AI 大模型 - System.out.println("[AI 大模型 yudao-module-ai - 教程][参考 https://cloud.iocoder.cn/ai/build/ 开启]"); }); } diff --git a/yudao-module-mqtt/yudao-module-mqtt-api/src/main/java/cn/iocoder/yudao/module/mqtt/api/task/dto/RobotSimulationPoseDTO.java b/yudao-module-mqtt/yudao-module-mqtt-api/src/main/java/cn/iocoder/yudao/module/mqtt/api/task/dto/RobotSimulationPoseDTO.java new file mode 100644 index 000000000..e51d7adeb --- /dev/null +++ b/yudao-module-mqtt/yudao-module-mqtt-api/src/main/java/cn/iocoder/yudao/module/mqtt/api/task/dto/RobotSimulationPoseDTO.java @@ -0,0 +1,9 @@ +package cn.iocoder.yudao.module.mqtt.api.task.dto; + +import lombok.Data; + +@Data +public class RobotSimulationPoseDTO { + private String commandType; + private RobotSimulationPoseDataDTO pose2d; +} diff --git a/yudao-module-mqtt/yudao-module-mqtt-api/src/main/java/cn/iocoder/yudao/module/mqtt/api/task/dto/RobotSimulationPoseDataDTO.java b/yudao-module-mqtt/yudao-module-mqtt-api/src/main/java/cn/iocoder/yudao/module/mqtt/api/task/dto/RobotSimulationPoseDataDTO.java new file mode 100644 index 000000000..3fb9622cb --- /dev/null +++ b/yudao-module-mqtt/yudao-module-mqtt-api/src/main/java/cn/iocoder/yudao/module/mqtt/api/task/dto/RobotSimulationPoseDataDTO.java @@ -0,0 +1,10 @@ +package cn.iocoder.yudao.module.mqtt.api.task.dto; + +import lombok.Data; + +@Data +public class RobotSimulationPoseDataDTO { + private Double x; + private Double y; + private Double yaw; +} diff --git a/yudao-module-mqtt/yudao-module-mqtt-biz/src/main/java/cn/iododer/yudao/module/mqtt/config/MqttCallBack.java b/yudao-module-mqtt/yudao-module-mqtt-biz/src/main/java/cn/iododer/yudao/module/mqtt/config/MqttCallBack.java index cf0a7cc20..46406e7b3 100644 --- a/yudao-module-mqtt/yudao-module-mqtt-biz/src/main/java/cn/iododer/yudao/module/mqtt/config/MqttCallBack.java +++ b/yudao-module-mqtt/yudao-module-mqtt-biz/src/main/java/cn/iododer/yudao/module/mqtt/config/MqttCallBack.java @@ -43,7 +43,7 @@ public class MqttCallBack implements MqttCallback { mqttService.analysisMessage(msg); } catch (Exception e) { log.info("消费失败的消息主题 :{},消息内容 :{}", topic, msg); - log.info("消费消息异常 :{}", e.getMessage()); + log.info("消费消息异常 :{}", e); } } diff --git a/yudao-module-mqtt/yudao-module-mqtt-biz/src/main/resources/application-dev.yaml b/yudao-module-mqtt/yudao-module-mqtt-biz/src/main/resources/application-dev.yaml index aaafda1cf..b72803406 100644 --- a/yudao-module-mqtt/yudao-module-mqtt-biz/src/main/resources/application-dev.yaml +++ b/yudao-module-mqtt/yudao-module-mqtt-biz/src/main/resources/application-dev.yaml @@ -37,7 +37,8 @@ mqtt: password: adminuser qos: 0 clientId: mqttx_b82345a52 - maxInflight: 10 + # 表示允许同时在传输中的最大消息数量 + maxInflight: 1000 timeout: 10 keepalive: 20 diff --git a/yudao-module-mqtt/yudao-module-mqtt-biz/src/main/resources/application-local.yaml b/yudao-module-mqtt/yudao-module-mqtt-biz/src/main/resources/application-local.yaml index 603192e98..c229258e5 100644 --- a/yudao-module-mqtt/yudao-module-mqtt-biz/src/main/resources/application-local.yaml +++ b/yudao-module-mqtt/yudao-module-mqtt-biz/src/main/resources/application-local.yaml @@ -37,7 +37,8 @@ mqtt: password: adminuser qos: 2 clientId: mqttx_b82345a52 - maxInflight: 10 + # 表示允许同时在传输中的最大消息数量 + maxInflight: 1000 timeout: 10 keepalive: 20 diff --git a/yudao-module-mqtt/yudao-module-mqtt-biz/src/main/resources/application-test.yaml b/yudao-module-mqtt/yudao-module-mqtt-biz/src/main/resources/application-test.yaml index ab0c360bf..3e04ea507 100644 --- a/yudao-module-mqtt/yudao-module-mqtt-biz/src/main/resources/application-test.yaml +++ b/yudao-module-mqtt/yudao-module-mqtt-biz/src/main/resources/application-test.yaml @@ -37,7 +37,8 @@ mqtt: password: adminuser qos: 0 clientId: mqttx_b82345a52 - maxInflight: 10 + # 表示允许同时在传输中的最大消息数量 + maxInflight: 1000 timeout: 10 keepalive: 20 diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/api/path/PathApiImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/api/path/PathApiImpl.java index d3d4f8047..1dbc60d71 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/api/path/PathApiImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/api/path/PathApiImpl.java @@ -83,6 +83,7 @@ public class PathApiImpl implements PathApi { public void ppDistributionTaskFail(String message) { TenantContextHolder.setTenantId(1L); warnMsgService.addWarnMsg(message); + warnMsgService.sendWarnMsgToWebsocket(message); } @Override 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 51bbe723d..41fbffba2 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 @@ -269,8 +269,8 @@ public class RobotTaskStatusApiImpl implements RobotTaskStatusApi { */ @Transactional(rollbackFor = Exception.class) public void closeTask(RobotCompleteTaskDTO robotCompleteTaskDTO) { - /*PPCloseOrder(robotCompleteTaskDTO); - taskService.closeTaskDetail(robotCompleteTaskDTO.getOrderId().toString(),robotCompleteTaskDTO.getMac());*/ + PPCloseOrder(robotCompleteTaskDTO); +// taskService.closeTaskDetail(robotCompleteTaskDTO.getOrderId().toString(),robotCompleteTaskDTO.getMac()); String robotNo = robotInformationService.getRobotNoByMac(robotCompleteTaskDTO.getMac()); //先不释放库位状态 @@ -302,12 +302,19 @@ public class RobotTaskStatusApiImpl implements RobotTaskStatusApi { DeviceUseStatusEnum.IDLE.getType(), ZeroOneEnum.ZERO.getType()); }*/ + String solve = ""; + if (!PathTaskTypeEnum.MOVE_TO_WAIT.getType().equals(robotCompleteTaskDTO.getOrderType()) + && !PathTaskTypeEnum.AUTO_CHARGE.getType().equals(robotCompleteTaskDTO.getOrderType()) ) { + String taskNo= taskDetailService.getTaskNoByDetailId(robotCompleteTaskDTO.getOrderId()); + solve = " 并且到任务列表关闭任务 " + taskNo; + } + RobotWarnMsgDO warnMsg = RobotWarnMsgDO.builder().warnLevel(4) .warnCode(robotCompleteTaskDTO.getStatusCode()) .robotNo(robotNo) .warnType(RobotWarnType.ROBOT_WARN.getType()) .warnMsg(robotNo + "_" + robotCompleteTaskDTO.getMessage()) - .warnSolve(robotCompleteTaskDTO.getSolution()) + .warnSolve(robotCompleteTaskDTO.getSolution() + solve) .build(); warnMsgMapper.insert(warnMsg); diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/config/SystemApplicationRunner.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/config/SystemApplicationRunner.java new file mode 100644 index 000000000..1861dd11e --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/config/SystemApplicationRunner.java @@ -0,0 +1,23 @@ +package cn.iocoder.yudao.module.system.config; + +import cn.iocoder.yudao.module.system.service.tool.ToolsService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.ApplicationArguments; +import org.springframework.boot.ApplicationRunner; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; + + +@Slf4j +@Component +public class SystemApplicationRunner implements ApplicationRunner { + + @Resource + private ToolsService toolsService; + + @Override + public void run(ApplicationArguments args) { + toolsService.simulationPose(); + } +} diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/constant/robot/RobotTopicConstant.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/constant/robot/RobotTopicConstant.java index 1ae9ff31c..350c1a4b2 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/constant/robot/RobotTopicConstant.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/constant/robot/RobotTopicConstant.java @@ -24,4 +24,9 @@ public class RobotTopicConstant { * 让机器人同步告警码值映射的topic (拼接mac地址) */ public static String WARN_WAIT_TIME_TOPIC = "WARN_WAIT_TIME"; + + /** + * 仿真初始化点位信息 + */ + public static String ROBOT_COMMAND_TOPIC = "ROBOT_COMMAND_"; } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/tool/ToolsController.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/tool/ToolsController.java index cb040cfef..15eba3e08 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/tool/ToolsController.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/tool/ToolsController.java @@ -47,4 +47,12 @@ public class ToolsController { public CommonResult updateWarnCode() { return success(toolsService.updateWarnCode()); } + + @PostMapping("/robot/simulationPose") + @Operation(summary = "机器人---仿真环境--初始化点位") + @PermitAll + public CommonResult simulationPose() { + toolsService.simulationPose(); + return success("同步完成"); + } } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/houselocation/WareHouseLocationMapper.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/houselocation/WareHouseLocationMapper.java index 72cd11dbd..31dcf0462 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/houselocation/WareHouseLocationMapper.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/houselocation/WareHouseLocationMapper.java @@ -142,4 +142,22 @@ public interface WareHouseLocationMapper extends BaseMapperX queryUpperLevelsByMapItemId(@Param("mapItemId") Long mapItemId, + @Param("locationStorey") Integer locationStorey); + + /** + * 查询此库位的下层,是否没货 + * @param mapItemId + * @param locationStorey + * @return + */ + List queryLowerLevelsByMapItemId(@Param("mapItemId") Long mapItemId, + @Param("locationStorey") Integer locationStorey); } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/robot/RobotTaskDetailMapper.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/robot/RobotTaskDetailMapper.java index 88674e812..3f3efbbf8 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/robot/RobotTaskDetailMapper.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/robot/RobotTaskDetailMapper.java @@ -122,4 +122,11 @@ public interface RobotTaskDetailMapper extends BaseMapperX { * @return */ List getDoingTaskDetailByLocationIds(@Param("ids") List ids); + + /** + * 查询任务明细对应的任务编号 + * @param taskDetailId + * @return + */ + String getTaskNoByDetailId(@Param("taskDetailId") Long taskDetailId); } \ No newline at end of file diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/enums/robot/task/RobotCommandTypeEnum.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/enums/robot/task/RobotCommandTypeEnum.java index 9b8987cda..00e05fcda 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/enums/robot/task/RobotCommandTypeEnum.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/enums/robot/task/RobotCommandTypeEnum.java @@ -9,7 +9,8 @@ public enum RobotCommandTypeEnum { MOVE_POSES("MOVE_POSES","移动"), WORK_START_CHARGE("WORK_START_CHARGE","充电"), WORD_PICK_UP_GOODS("WORD_PICK_UP_GOODS","取货"), - WORD_DROP_OFF_GOODS("WORD_DROP_OFF_GOODS","放货"); + WORD_DROP_OFF_GOODS("WORD_DROP_OFF_GOODS","放货"), + MOVE_POSE("MOVE_POSE","仿真移动点位"); /** * 类型 */ diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/information/DeviceInformationServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/information/DeviceInformationServiceImpl.java index 37d8a4ee3..9c6c1eca8 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/information/DeviceInformationServiceImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/information/DeviceInformationServiceImpl.java @@ -37,6 +37,7 @@ import cn.iocoder.yudao.module.system.util.redis.RedisUtil; import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.google.gson.Gson; import com.serotonin.modbus4j.ModbusMaster; import com.serotonin.modbus4j.exception.ModbusInitException; import com.serotonin.modbus4j.exception.ModbusTransportException; @@ -143,11 +144,19 @@ public class DeviceInformationServiceImpl extends ServiceImpl map = new HashMap(); + map = gson.fromJson(dataJson, map.getClass()); + map.put("deviceType",updateObj.getDeviceType()); + map.put("deviceNo",updateObj.getDeviceNo()); + map.put("mapImageUrl",updateObj.getMapImageUrl()); + + positionMapItem.setDataJson(JSON.toJSONString(map)); positionMapItemService.updateById(positionMapItem); } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/RobotTaskDetailService.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/RobotTaskDetailService.java index e28d5e497..82ccc0ec1 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/RobotTaskDetailService.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/RobotTaskDetailService.java @@ -80,4 +80,11 @@ public interface RobotTaskDetailService { * @return */ List getDoingTaskDetailByLocationIds(List ids); + + /** + * 获取任务编号 + * @param orderId + * @return + */ + String getTaskNoByDetailId(Long orderId); } \ 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/robot/RobotTaskDetailServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/RobotTaskDetailServiceImpl.java index a2ed8b77d..67e39311a 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/RobotTaskDetailServiceImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/RobotTaskDetailServiceImpl.java @@ -168,4 +168,9 @@ public class RobotTaskDetailServiceImpl implements RobotTaskDetailService { public List getDoingTaskDetailByLocationIds(List ids) { return taskDetailMapper.getDoingTaskDetailByLocationIds(ids); } + + @Override + public String getTaskNoByDetailId(Long taskDetailId) { + return taskDetailMapper.getTaskNoByDetailId(taskDetailId); + } } \ 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/robot/RobotTaskServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/RobotTaskServiceImpl.java index 6f577bf33..7f4a1a39b 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/RobotTaskServiceImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/RobotTaskServiceImpl.java @@ -91,8 +91,6 @@ import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*; @Validated public class RobotTaskServiceImpl extends ServiceImpl implements RobotTaskService { - private final String RESULT = "SUCCESS"; - @Resource private RobotTaskMapper taskMapper; @@ -179,10 +177,9 @@ public class RobotTaskServiceImpl extends ServiceImpl locations = locationMapper.queryLowerLevelsByMapItemId(locationDO.getMapItemId(),locationDO.getLocationStorey()); + if (ObjectUtil.isNotEmpty(locations)) { + log.error("此放货库位的下层库位无货,请先放下层库位 :{}", locationDO.getLocationNo()); + throw exception0(TASK_CREATE_FAIL.getCode(), "此放货库位的下层库位无货,请先放下层库位 " + locationDO.getLocationNo()); + } + } + /** * 设置取货库位 * @@ -1086,6 +1090,7 @@ public class RobotTaskServiceImpl extends ServiceImpl locations = locationMapper.queryUpperLevelsByMapItemId(locationDO.getMapItemId(),locationDO.getLocationStorey()); + if (ObjectUtil.isNotEmpty(locations)) { + log.error("此取货库位的上层库位有货,请先取上层库位的货物 :{}", locationDO.getLocationNo()); + throw exception0(TASK_CREATE_FAIL.getCode(), "此取货库位的上层库位有货,请先取上层库位的货物 " + locationDO.getLocationNo()); + } + } + /** * 取放 * diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/RobotWarnMsgServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/RobotWarnMsgServiceImpl.java index 09087d380..2240d4c28 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/RobotWarnMsgServiceImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/RobotWarnMsgServiceImpl.java @@ -115,6 +115,9 @@ public class RobotWarnMsgServiceImpl extends ServiceImpl 200 ) { + message = message.substring(0,200); + } RobotWarnMsgDO warnMsg = RobotWarnMsgDO.builder().warnLevel(4) .warnCode("PP") .robotNo("") diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/tool/ToolsService.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/tool/ToolsService.java index dda5e710b..90ca55065 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/tool/ToolsService.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/tool/ToolsService.java @@ -12,4 +12,6 @@ public interface ToolsService { String closeTaskDetail(String taskDetailId); String updateWarnCode(); + + void simulationPose(); } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/tool/ToolsServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/tool/ToolsServiceImpl.java index 662e57c0c..d6534478d 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/tool/ToolsServiceImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/tool/ToolsServiceImpl.java @@ -2,8 +2,11 @@ package cn.iocoder.yudao.module.system.service.tool; import cn.hutool.core.util.ObjectUtil; import cn.hutool.json.JSONUtil; +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.task.dto.RobotAcceptTaskDTO; +import cn.iocoder.yudao.module.mqtt.api.task.dto.RobotSimulationPoseDTO; +import cn.iocoder.yudao.module.mqtt.api.task.dto.RobotSimulationPoseDataDTO; 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.constant.path.PathPlanningTopicConstant; @@ -12,21 +15,30 @@ import cn.iocoder.yudao.module.system.controller.admin.config.dto.TaskOrderConfi import cn.iocoder.yudao.module.system.controller.admin.config.vo.CommonConfigVO; import cn.iocoder.yudao.module.system.controller.admin.tool.dto.CleanAgvDTO; import cn.iocoder.yudao.module.system.dal.dataobject.config.CommonConfigDO; +import cn.iocoder.yudao.module.system.dal.dataobject.positionmap.PositionMapDO; +import cn.iocoder.yudao.module.system.dal.dataobject.positionmap.PositionMapItemDO; import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotInformationDO; import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotWarnMsgDO; 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.enums.config.CommandConfigTypeEnum; +import cn.iocoder.yudao.module.system.enums.item.PositionMapItemEnum; import cn.iocoder.yudao.module.system.enums.robot.RobotWarnType; +import cn.iocoder.yudao.module.system.enums.robot.task.RobotCommandTypeEnum; +import cn.iocoder.yudao.module.system.service.config.CommonConfigService; +import cn.iocoder.yudao.module.system.service.positionmap.PositionMapItemService; +import cn.iocoder.yudao.module.system.service.positionmap.PositionMapService; import cn.iocoder.yudao.module.system.service.robot.RobotInformationService; import cn.iocoder.yudao.module.system.service.robot.RobotWarnMsgService; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; import javax.annotation.Resource; +import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -53,6 +65,18 @@ public class ToolsServiceImpl implements ToolsService { @Autowired private RobotInformationService robotInformationService; + @Resource + private PositionMapItemService positionMapItemService; + + /*@Resource + private CommonConfigService configService;*/ + + @Resource + private PositionMapService positionMapService; + + @Value("${zn.is_simulation:false}") + private Boolean isSimulation; + /** * 发送时间、优先级、距离的权重给PP * @@ -156,6 +180,70 @@ public class ToolsServiceImpl implements ToolsService { return "同步完成"; } + @Override + public void simulationPose() { + if (!isSimulation) { + log.info("非仿真环境不需要同步默认的节点数据"); + } + + TenantContextHolder.setTenantId(1L); + +// CommonConfigDO config = configService.getConfig(CommandConfigTypeEnum.SIMULATION_CONFIG.getType().longValue()); + + CommonConfigDO config = configMapper.selectOne(new LambdaQueryWrapper() + .eq(CommonConfigDO::getConfigType, CommandConfigTypeEnum.SIMULATION_CONFIG.getType().longValue())); + + PositionMapDO positionMap = null; + if (ObjectUtil.isEmpty(config) || ObjectUtil.isEmpty(config.getConfigStr())) { + List maps = positionMapService.getAllMap(); + if (ObjectUtil.isEmpty(maps)) { + return; + } + positionMap = maps.get(0); + } else { + positionMap = positionMapService.getPositionMap(Long.valueOf(config.getConfigStr())); + } + if (ObjectUtil.isEmpty(positionMap)) { + log.info("仿真环境没有地图信息"); + return; + } + + List robots = robotInformationService.getAllRobot(); + + if (ObjectUtil.isEmpty(robots)) { + log.info("仿真环境没有机器人信息"); + return; + } + + List itemDOList = new ArrayList<>(); + List items = positionMapItemService.getPositionMapItemByMapAndType(positionMap.getId(), PositionMapItemEnum.WAIT.getType()); + if (ObjectUtil.isEmpty(items) || items.size() < robots.size()) { + List itemPoses = positionMapItemService.getPositionMapItemByMapAndType(positionMap.getId(), PositionMapItemEnum.PATH.getType()); + itemDOList.addAll(itemPoses); + } else { + itemDOList = items; + } + + + int i = 0; + for (RobotInformationDO robot : robots) { + RobotSimulationPoseDataDTO poseData = new RobotSimulationPoseDataDTO(); + RobotSimulationPoseDTO simulationPoseDTO = new RobotSimulationPoseDTO(); + if (itemDOList.size() <= i) { + continue; + } + + poseData.setX(Double.valueOf(itemDOList.get(i).getActualLocationX())); + poseData.setY(Double.valueOf(itemDOList.get(i).getActualLocationY())); + poseData.setYaw(Double.valueOf(itemDOList.get(i).getLocationYaw())); + simulationPoseDTO.setPose2d(poseData); + simulationPoseDTO.setCommandType(RobotCommandTypeEnum.MOVE_POSE.getType()); + commonApi.commonMethod(simulationPoseDTO, RobotTopicConstant.ROBOT_COMMAND_TOPIC + robot.getMacAddress()); + log.info("仿真环境发送机器人默认点位信息"); + i++; + } + } + public void addWarnMsg() { RobotWarnMsgDO warnMsg = RobotWarnMsgDO.builder().warnLevel(4) 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 dd1677a73..fded5b16a 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 @@ -187,8 +187,24 @@ justauth: zn: task-no: ZN #任务号开头 do_cycle: true #是否开启循环 - init_height: 0.0 #初始化高度 - scan_height: 0.4 #扫描高度 - parm: 5000 #等待时间 - lift_height: 0.1 #抬高托盘高度 - move_height: 0.1 #行走高度 + lane_auto_move: true #线库是否自动移库 true:线库执行自动移库 、false:线库关闭执行自动移库 + robot_position_cache_time: 10 #机器人上报点位存储时间(秒) + cycle_do_auto_move: true #存在循环的任务,是否开启自动移库. true:存在循环任务,开启自动移库; false:有循环任务不自动移库 + full_electricity: 100 #机器人充满电的电量 + task_need_single: false #机器人对同一线库/点位是不是只能有一台机器人做任务 (true:一个点位/线库,只有一台机器人) + location_number_reduce: 100000000 #库位排序的差值(下发取货任务,将库位排序减去此值,然后取绝对值) + robot_doing_action: # 机器人正在做的动作 + action_entity_cache_time: 172800 #机器人所有动作缓存时间 8小时 + doing_action_cache_time: 172800 #单个动作缓存时间 8小时 + robot_chearg: #机器人充电的配置 + release_location_number_config: 50 #同一组序号,越大越先执行 + priority_config: 50 #优先级 + task: #任务相关的配置 + check_sku_info: true #校验物料信息 + robot_config: #机器人取放货默认配置 + offset_height: 0.1 #叉起货需要在原来高度基础上偏移的高度 + default_tray_height: 1.1 #默认每层高度 + open_rate_limiter: true #是否开启限流 + path_planning: + task_chche_time: 604800 #任务缓存的时间, 默认一星期 + is_simulation: 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 420b74245..dc368f91c 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 @@ -226,7 +226,7 @@ zn: robot_position_cache_time: 10 #机器人上报点位存储时间(秒) cycle_do_auto_move: true #存在循环的任务,是否开启自动移库. true:存在循环任务,开启自动移库; false:有循环任务不自动移库 full_electricity: 100 #机器人充满电的电量 - task_need_single: true #机器人对同一线库/点位是不是只能有一台机器人做任务 (true:一个点位/线库,只有一台机器人) + task_need_single: false #机器人对同一线库/点位是不是只能有一台机器人做任务 (true:一个点位/线库,只有一台机器人) location_number_reduce: 100000000 #库位排序的差值(下发取货任务,将库位排序减去此值,然后取绝对值) robot_doing_action: # 机器人正在做的动作 action_entity_cache_time: 172800 #机器人所有动作缓存时间 8小时 @@ -242,3 +242,8 @@ zn: open_rate_limiter: true #是否开启限流 path_planning: task_chche_time: 604800 #任务缓存的时间, 默认一星期 + is_simulation: true # 是否为仿真环境 + +logging: + file: + name: D:/project/rcs/logs/${spring.application.name}.log \ No newline at end of file diff --git a/yudao-module-system/yudao-module-system-biz/src/main/resources/application-test.yaml b/yudao-module-system/yudao-module-system-biz/src/main/resources/application-test.yaml index 3e8586429..79976c0a8 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/resources/application-test.yaml +++ b/yudao-module-system/yudao-module-system-biz/src/main/resources/application-test.yaml @@ -217,8 +217,7 @@ zn: robot_position_cache_time: 10 #机器人上报点位存储时间(秒) cycle_do_auto_move: true #存在循环的任务,是否开启自动移库. true:存在循环任务,开启自动移库; false:有循环任务不自动移库 full_electricity: 100 #机器人充满电的电量 - robot_error_level_time: 30 #机器人异常存储时间(秒) - task_need_single: true #机器人对同一线库/点位是不是只能有一台机器人做任务 (true:一个点位/线库,只有一台机器人) + task_need_single: false #机器人对同一线库/点位是不是只能有一台机器人做任务 (true:一个点位/线库,只有一台机器人) location_number_reduce: 100000000 #库位排序的差值(下发取货任务,将库位排序减去此值,然后取绝对值) robot_doing_action: # 机器人正在做的动作 action_entity_cache_time: 172800 #机器人所有动作缓存时间 8小时 @@ -231,6 +230,10 @@ zn: robot_config: #机器人取放货默认配置 offset_height: 0.1 #叉起货需要在原来高度基础上偏移的高度 default_tray_height: 1.1 #默认每层高度 + open_rate_limiter: true #是否开启限流 + path_planning: + task_chche_time: 604800 #任务缓存的时间, 默认一星期 + is_simulation: 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 0c82c6a5b..b5fb362b4 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 @@ -542,6 +542,7 @@ from ware_house_location t1 + t1.deleted = '0' AND t1.location_use_status = #{locationUseStatus} @@ -840,6 +841,8 @@ and t2.location_number < t1.location_number and t2.location_use_status = '1' + and t1.deleted = '0' + and t2.deleted = '0' and t2.id not in @@ -849,4 +852,35 @@ limit 1 + + + + + diff --git a/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/robot/RobotTaskDetailMapper.xml b/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/robot/RobotTaskDetailMapper.xml index 405df8e18..d870bbae3 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/robot/RobotTaskDetailMapper.xml +++ b/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/robot/RobotTaskDetailMapper.xml @@ -272,6 +272,20 @@ + + + update robot_task_detail