From 0b517511ea16ff4aeb29bd0eed65d114027d5f50 Mon Sep 17 00:00:00 2001 From: cbs <18617195505@163.com> Date: Tue, 14 Jan 2025 16:25:03 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BB=BB=E5=8A=A1=E4=B8=8B=E5=8F=91=E6=A0=A1?= =?UTF-8?q?=E9=AA=8C=E5=A4=A7=E5=8C=BA=E5=9F=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/type/JsonLongSetTypeHandler.java | 35 +++ .../module/mqtt/api/task/dto/Pose2ds.java | 8 +- .../api/task/dto/RobotAcceptTaskData.java | 1 + .../module/mqtt/config/MqttCallBack.java | 2 +- .../RobotGenericsStatusServiceImpl.java | 2 +- .../mqtt/service/RobotStatusServiceImpl.java | 2 +- .../src/main/resources/application-local.yaml | 2 +- .../system/enums/ErrorCodeConstants.java | 2 + .../api/robot/RobotTaskStatusApiImpl.java | 10 +- .../robot/RobotTaskChcheConstant.java | 6 + .../vo/WareHouseLocationPageReqVO.java | 3 + .../vo/WareHouseLocationRespVO.java | 3 + .../vo/WareHouseLocationSaveReqVO.java | 3 + .../robot/RobotInformationController.java | 14 +- .../robot/vo/RobotInformationPageReqVO.java | 3 +- .../robot/vo/RobotInformationRespVO.java | 17 +- .../robot/vo/RobotInformationSaveReqVO.java | 7 +- .../vo/RobotInformationStatisticsVO.java | 18 ++ .../admin/robot/vo/RobotPositionMapVO.java | 18 ++ .../houselocation/WareHouseLocationDO.java | 13 +- .../dataobject/robot/RobotInformationDO.java | 8 +- .../WareHouseLocationMapper.java | 7 +- .../mysql/positionmap/PositionMapMapper.java | 11 + .../mysql/robot/RobotInformationMapper.java | 21 ++ .../mysql/robot/RobotTaskDetailMapper.java | 12 +- ...eTypeEnum.java => RobotCacheLockEnum.java} | 5 +- .../enums/robot/RobotTaskModelEnum.java | 15 ++ .../module/system/job/robot/RobotJob.java | 5 +- .../robot/RobotInformationService.java | 11 +- .../robot/RobotInformationServiceImpl.java | 105 ++++++++- .../service/robot/RobotTaskServiceImpl.java | 82 +++++-- .../robot/job/DistributeTasksServiceImpl.java | 42 ++-- .../houselocation/WareHouseLocationMapper.xml | 14 ++ .../mapper/positionmap/PositionMapMapper.xml | 221 ++++++++++++++++++ .../mapper/robot/RobotInformationMapper.xml | 41 +++- .../mapper/robot/RobotTaskDetailMapper.xml | 14 +- 36 files changed, 681 insertions(+), 102 deletions(-) create mode 100644 yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/type/JsonLongSetTypeHandler.java create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/constant/robot/RobotTaskChcheConstant.java create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/robot/vo/RobotInformationStatisticsVO.java create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/robot/vo/RobotPositionMapVO.java rename yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/enums/redis/{RobotCacheTypeEnum.java => RobotCacheLockEnum.java} (93%) create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/enums/robot/RobotTaskModelEnum.java diff --git a/yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/type/JsonLongSetTypeHandler.java b/yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/type/JsonLongSetTypeHandler.java new file mode 100644 index 000000000..8dfad7ebd --- /dev/null +++ b/yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/type/JsonLongSetTypeHandler.java @@ -0,0 +1,35 @@ +package cn.iocoder.yudao.framework.mybatis.core.type; + +import cn.iocoder.yudao.framework.common.util.json.JsonUtils; +import com.baomidou.mybatisplus.extension.handlers.AbstractJsonTypeHandler; +import com.fasterxml.jackson.core.type.TypeReference; + +import java.util.Set; + +/** + * 参考 {@link com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler} 实现 + * 在我们将字符串反序列化为 Set 并且泛型为 Long 时,如果每个元素的数值太小,会被处理成 Integer 类型,导致可能存在隐性的 BUG。 + * + * 例如说哦,SysUserDO 的 postIds 属性 + * + + */ +public class JsonLongSetTypeHandler extends AbstractJsonTypeHandler { + + private static final TypeReference> TYPE_REFERENCE = new TypeReference>(){}; + + public JsonLongSetTypeHandler(Class type) { + super(type); + } + + @Override + public Object parse(String json) { + return JsonUtils.parseObject(json, TYPE_REFERENCE); + } + + @Override + public String toJson(Object obj) { + return JsonUtils.toJsonString(obj); + } + +} diff --git a/yudao-module-mqtt/yudao-module-mqtt-api/src/main/java/cn/iocoder/yudao/module/mqtt/api/task/dto/Pose2ds.java b/yudao-module-mqtt/yudao-module-mqtt-api/src/main/java/cn/iocoder/yudao/module/mqtt/api/task/dto/Pose2ds.java index 07e270325..aae820b05 100644 --- a/yudao-module-mqtt/yudao-module-mqtt-api/src/main/java/cn/iocoder/yudao/module/mqtt/api/task/dto/Pose2ds.java +++ b/yudao-module-mqtt/yudao-module-mqtt-api/src/main/java/cn/iocoder/yudao/module/mqtt/api/task/dto/Pose2ds.java @@ -2,9 +2,11 @@ package cn.iocoder.yudao.module.mqtt.api.task.dto; import lombok.Data; +import java.math.BigDecimal; + @Data public class Pose2ds { - private String x; - private String y; - private String yaw; + private Double x; + private Double y; + private Double yaw; } diff --git a/yudao-module-mqtt/yudao-module-mqtt-api/src/main/java/cn/iocoder/yudao/module/mqtt/api/task/dto/RobotAcceptTaskData.java b/yudao-module-mqtt/yudao-module-mqtt-api/src/main/java/cn/iocoder/yudao/module/mqtt/api/task/dto/RobotAcceptTaskData.java index beed83b17..f457ccd9a 100644 --- a/yudao-module-mqtt/yudao-module-mqtt-api/src/main/java/cn/iocoder/yudao/module/mqtt/api/task/dto/RobotAcceptTaskData.java +++ b/yudao-module-mqtt/yudao-module-mqtt-api/src/main/java/cn/iocoder/yudao/module/mqtt/api/task/dto/RobotAcceptTaskData.java @@ -10,6 +10,7 @@ public class RobotAcceptTaskData { private String command_id; private String command_type; private List pose2ds; + private Pose2ds pose2d; private String target_height; private String parm; } 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 a3ca7c36e..01ad94da6 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 @@ -36,7 +36,7 @@ public class MqttCallBack implements MqttCallback { @Override public void messageArrived(String topic, MqttMessage mqttMessage) throws Exception { String msg = new String(mqttMessage.getPayload()); - log.info("[MQTT]接收当前消息为 :{}", msg); +// log.info("[MQTT]接收当前消息为 :{}", msg); MqttService mqttService = MqttFactory.getMqttFactory(topic); mqttService.analysisMessage(msg); diff --git a/yudao-module-mqtt/yudao-module-mqtt-biz/src/main/java/cn/iododer/yudao/module/mqtt/service/RobotGenericsStatusServiceImpl.java b/yudao-module-mqtt/yudao-module-mqtt-biz/src/main/java/cn/iododer/yudao/module/mqtt/service/RobotGenericsStatusServiceImpl.java index a8d0386d5..33e81c8ec 100644 --- a/yudao-module-mqtt/yudao-module-mqtt-biz/src/main/java/cn/iododer/yudao/module/mqtt/service/RobotGenericsStatusServiceImpl.java +++ b/yudao-module-mqtt/yudao-module-mqtt-biz/src/main/java/cn/iododer/yudao/module/mqtt/service/RobotGenericsStatusServiceImpl.java @@ -10,6 +10,6 @@ public class RobotGenericsStatusServiceImpl implements MqttService{ @Override public void analysisMessage(String message) { - log.info("处理RobotGenericsStatusServiceImpl的消息 :{}",message); +// log.info("处理RobotGenericsStatusServiceImpl的消息 :{}",message); } } diff --git a/yudao-module-mqtt/yudao-module-mqtt-biz/src/main/java/cn/iododer/yudao/module/mqtt/service/RobotStatusServiceImpl.java b/yudao-module-mqtt/yudao-module-mqtt-biz/src/main/java/cn/iododer/yudao/module/mqtt/service/RobotStatusServiceImpl.java index 87c3ad543..995218f99 100644 --- a/yudao-module-mqtt/yudao-module-mqtt-biz/src/main/java/cn/iododer/yudao/module/mqtt/service/RobotStatusServiceImpl.java +++ b/yudao-module-mqtt/yudao-module-mqtt-biz/src/main/java/cn/iododer/yudao/module/mqtt/service/RobotStatusServiceImpl.java @@ -18,6 +18,6 @@ public class RobotStatusServiceImpl implements MqttService{ */ @Override public void analysisMessage(String message) { - log.info("处理RobotStatusServiceImpl的消息 :{}",message); +// log.info("处理RobotStatusServiceImpl的消息 :{}",message); } } 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 f994d369c..d3fb3d846 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 @@ -31,7 +31,7 @@ management: # MQTT mqtt: - host: tcp://127.0.0.1:1883 + host: tcp://192.168.0.116:1883 username: adminuser password: adminuser qos: 1 diff --git a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/ErrorCodeConstants.java b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/ErrorCodeConstants.java index 37e0b1e62..7ea92facd 100644 --- a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/ErrorCodeConstants.java +++ b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/ErrorCodeConstants.java @@ -182,6 +182,8 @@ public interface ErrorCodeConstants { // ========== 车辆信息 1-002-034-000 ========== ErrorCode ROBOT_INFORMATION_NOT_EXISTS = new ErrorCode(1-002-034-001, "车辆信息不存在"); + ErrorCode ROBOT_MAC_ADDRESS_EXISTS = new ErrorCode(1-002-034-002, "MAC地址重复"); + ErrorCode ROBOT_ROBOT_NO_EXISTS = new ErrorCode(1-002-034-003, "机器人编号重复"); // ========== 机器人任务主表 1-002-035-000 ========== ErrorCode TASK_NOT_EXISTS = new ErrorCode(1-002-035-001, "机器人任务主表不存在"); 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 283523dd7..a924c8187 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 @@ -14,6 +14,7 @@ import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.RestController; +import java.time.LocalDateTime; import java.util.List; @Slf4j @@ -37,8 +38,13 @@ public class RobotTaskStatusApiImpl implements RobotTaskStatusApi { public CommonResult robotDoneTask(RobotCompleteTaskDTO robotCompleteTaskDTO) { log.info("机器人完成任务上报 :{}", JSON.toJSONString(robotCompleteTaskDTO)); TenantContextHolder.setTenantId(1L); - robotTaskDetailMapper.updateRobotDetailStatus(robotCompleteTaskDTO.getOrder_id(), - robotCompleteTaskDTO.getExecution_state()); + + RobotTaskDetailDO detailDO = new RobotTaskDetailDO(); + detailDO.setId(robotCompleteTaskDTO.getOrder_id()); + detailDO.setEndTime(LocalDateTime.now()); + detailDO.setTaskStatus(robotCompleteTaskDTO.getExecution_state()); + robotTaskDetailMapper.updateRobotDetailById(detailDO); + RobotTaskDetailDO robotTaskDetailDO = robotTaskDetailMapper.selectById(robotCompleteTaskDTO.getOrder_id()); List taskDetails = robotTaskDetailMapper.queryByTaskId(robotTaskDetailDO.getRobotTaskId()); boolean b = diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/constant/robot/RobotTaskChcheConstant.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/constant/robot/RobotTaskChcheConstant.java new file mode 100644 index 000000000..cce69f5f9 --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/constant/robot/RobotTaskChcheConstant.java @@ -0,0 +1,6 @@ +package cn.iocoder.yudao.module.system.constant.robot; + +public class RobotTaskChcheConstant { + //机器人电量 + public static String ROBOT_ELECTRICITY = "robot:information:electricity"; +} diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/houselocation/vo/WareHouseLocationPageReqVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/houselocation/vo/WareHouseLocationPageReqVO.java index fce831776..7434cf14f 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/houselocation/vo/WareHouseLocationPageReqVO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/houselocation/vo/WareHouseLocationPageReqVO.java @@ -99,4 +99,7 @@ public class WareHouseLocationPageReqVO extends PageParam { @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) private LocalDateTime[] createTime; + @Schema(description = "ware_position_map的id", example = "1") + private Long mapId; + } \ 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/houselocation/vo/WareHouseLocationRespVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/houselocation/vo/WareHouseLocationRespVO.java index 3fd720ba0..e76824b9f 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/houselocation/vo/WareHouseLocationRespVO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/houselocation/vo/WareHouseLocationRespVO.java @@ -125,4 +125,7 @@ public class WareHouseLocationRespVO { @ExcelProperty("创建时间") private LocalDateTime createTime; + @Schema(description = "ware_position_map的id", example = "1") + @ExcelProperty("ware_position_map的id") + private Long mapId; } \ 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/houselocation/vo/WareHouseLocationSaveReqVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/houselocation/vo/WareHouseLocationSaveReqVO.java index 12209ffc6..e4e865680 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/houselocation/vo/WareHouseLocationSaveReqVO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/houselocation/vo/WareHouseLocationSaveReqVO.java @@ -1,5 +1,6 @@ package cn.iocoder.yudao.module.system.controller.admin.houselocation.vo; +import com.alibaba.excel.annotation.ExcelProperty; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; import java.util.*; @@ -91,4 +92,6 @@ public class WareHouseLocationSaveReqVO { @Schema(description = "最后一次执行任务robot_task的id", example = "23816") private Long taskId; + @Schema(description = "ware_position_map的id", example = "1") + private Long mapId; } \ 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/RobotInformationController.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/robot/RobotInformationController.java index 3378213db..dc38ddbcc 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/robot/RobotInformationController.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/robot/RobotInformationController.java @@ -3,6 +3,7 @@ package cn.iocoder.yudao.module.system.controller.admin.robot; import cn.iocoder.yudao.module.system.controller.admin.robot.vo.RobotInformationPageReqVO; import cn.iocoder.yudao.module.system.controller.admin.robot.vo.RobotInformationRespVO; import cn.iocoder.yudao.module.system.controller.admin.robot.vo.RobotInformationSaveReqVO; +import cn.iocoder.yudao.module.system.controller.admin.robot.vo.RobotInformationStatisticsVO; import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotInformationDO; import cn.iocoder.yudao.module.system.service.robot.RobotInformationService; import org.springframework.web.bind.annotation.*; @@ -68,7 +69,7 @@ public class RobotInformationController { @Parameter(name = "id", description = "编号", required = true, example = "1024") @PreAuthorize("@ss.hasPermission('robot:information:query')") public CommonResult getInformation(@RequestParam("id") Long id) { - RobotInformationDO information = informationService.getInformation(id); + RobotInformationRespVO information = informationService.getInformation(id); return success(BeanUtils.toBean(information, RobotInformationRespVO.class)); } @@ -76,7 +77,7 @@ public class RobotInformationController { @Operation(summary = "获得车辆信息分页") @PreAuthorize("@ss.hasPermission('robot:information:query')") public CommonResult> getInformationPage(@Valid RobotInformationPageReqVO pageReqVO) { - PageResult pageResult = informationService.getInformationPage(pageReqVO); + PageResult pageResult = informationService.getInformationPage(pageReqVO); return success(BeanUtils.toBean(pageResult, RobotInformationRespVO.class)); } @@ -87,10 +88,17 @@ public class RobotInformationController { public void exportInformationExcel(@Valid RobotInformationPageReqVO pageReqVO, HttpServletResponse response) throws IOException { pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); - List list = informationService.getInformationPage(pageReqVO).getList(); + List list = informationService.getInformationPage(pageReqVO).getList(); // 导出 Excel ExcelUtils.write(response, "车辆信息.xls", "数据", RobotInformationRespVO.class, BeanUtils.toBean(list, RobotInformationRespVO.class)); } + @PostMapping("/statistics") + @Operation(summary = "统计车辆待命/任务中/离线") + @PreAuthorize("@ss.hasPermission('robot:information:statistics')") + public CommonResult statisticsInformation() { + return success(informationService.statisticsInformation()); + } + } \ 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/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 cdd846b00..6587f94ae 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 @@ -5,6 +5,7 @@ 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 java.util.Set; import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; @@ -36,7 +37,7 @@ public class RobotInformationPageReqVO extends PageParam { private Integer robotStatus; @Schema(description = "楼层/区域(json)") - private String floorAreaJson; + private Set floorAreaJson; @Schema(description = "创建时间") @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) 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 997fe2e54..d1fd10f45 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 @@ -1,9 +1,13 @@ package cn.iocoder.yudao.module.system.controller.admin.robot.vo; +import cn.iocoder.yudao.framework.mybatis.core.type.LongListTypeHandler; +import com.baomidou.mybatisplus.annotation.TableField; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; import java.time.LocalDateTime; import com.alibaba.excel.annotation.*; +import java.util.List; +import java.util.Set; @Schema(description = "管理后台 - 车辆信息 Response VO") @Data @@ -42,12 +46,21 @@ public class RobotInformationRespVO { @ExcelProperty("AGV状态(0:暂停且无任务、1:暂停(有处理中的任务)、2:任务中、3:待命)") private Integer robotStatus; - @Schema(description = "楼层/区域(json)") + @TableField(typeHandler = LongListTypeHandler.class) @ExcelProperty("楼层/区域(json)") - private String floorAreaJson; + private Set floorAreaJson; @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) @ExcelProperty("创建时间") private LocalDateTime createTime; + @Schema(description = "楼层/区域(json)") + @ExcelProperty("楼层/区域(json)") + public List positionMapList; + + @Schema(description = "电量") + @ExcelProperty("电量") + private String electricity; + + } \ 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 7fa4ad52b..c645e67bd 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 @@ -4,6 +4,8 @@ import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; import javax.validation.constraints.NotEmpty; +import java.util.Set; +import javax.validation.constraints.NotNull; @Schema(description = "管理后台 - 车辆信息新增/修改 Request VO") @Data @@ -13,7 +15,7 @@ public class RobotInformationSaveReqVO { private Long id; @Schema(description = "车辆类型表id", example = "28234") - @NotEmpty(message = "车辆类型不能为空") + @NotNull(message = "车辆类型不能为空") private Long robotModelId; @Schema(description = "车辆类型") @@ -25,7 +27,6 @@ public class RobotInformationSaveReqVO { private String robotNo; @Schema(description = "任务模式(0:拒收任务、1:正常)", requiredMode = Schema.RequiredMode.REQUIRED) - @NotEmpty(message = "任务模式不能为空") private Integer robotTaskModel; @Schema(description = "mac地址") @@ -40,6 +41,6 @@ public class RobotInformationSaveReqVO { @Schema(description = "楼层/区域(json)") @NotEmpty(message = "楼层/区域不能为空") - private String floorAreaJson; + private Set floorAreaJson; } \ 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/RobotInformationStatisticsVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/robot/vo/RobotInformationStatisticsVO.java new file mode 100644 index 000000000..d2effd394 --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/robot/vo/RobotInformationStatisticsVO.java @@ -0,0 +1,18 @@ +package cn.iocoder.yudao.module.system.controller.admin.robot.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +@Data +public class RobotInformationStatisticsVO { + + @Schema(description = "待命") + private Integer standby; + @Schema(description = "任务中") + private Integer inTask; + @Schema(description = "充电中") + private Integer charge; + @Schema(description = "离线") + private Integer offline; + +} diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/robot/vo/RobotPositionMapVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/robot/vo/RobotPositionMapVO.java new file mode 100644 index 000000000..4b1742cc7 --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/robot/vo/RobotPositionMapVO.java @@ -0,0 +1,18 @@ +package cn.iocoder.yudao.module.system.controller.admin.robot.vo; + +import lombok.Data; + +/** + * 机器人楼层、区域信息 + */ +@Data +public class RobotPositionMapVO { + /** + * 楼层 + */ + private String floor; + /** + * 区域 + */ + private String area; +} diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/houselocation/WareHouseLocationDO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/houselocation/WareHouseLocationDO.java index 305277047..4d6fc5aa5 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/houselocation/WareHouseLocationDO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/houselocation/WareHouseLocationDO.java @@ -1,15 +1,7 @@ package cn.iocoder.yudao.module.system.dal.dataobject.houselocation; import lombok.*; -import java.util.*; import java.math.BigDecimal; -import java.math.BigDecimal; -import java.math.BigDecimal; -import java.math.BigDecimal; -import java.math.BigDecimal; -import java.math.BigDecimal; -import java.time.LocalDateTime; -import java.time.LocalDateTime; import com.baomidou.mybatisplus.annotation.*; import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; @@ -137,5 +129,8 @@ public class WareHouseLocationDO extends BaseDO { * 最后一次执行任务robot_task的id */ private Long taskId; - + /** + * ware_position_map的id + */ + private Long mapId; } \ No newline at end of file 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 df7395930..6ab04d348 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 @@ -1,15 +1,18 @@ package cn.iocoder.yudao.module.system.dal.dataobject.robot; +import cn.iocoder.yudao.framework.mybatis.core.type.JsonLongSetTypeHandler; import lombok.*; import com.baomidou.mybatisplus.annotation.*; import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; +import java.util.Set; + /** * 车辆信息 DO * * @author 陈宾顺 */ -@TableName("robot_information") +@TableName(value = "robot_information" , autoResultMap = true) @KeySequence("robot_information_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 @Data @EqualsAndHashCode(callSuper = true) @@ -55,6 +58,7 @@ public class RobotInformationDO extends BaseDO { /** * 楼层/区域(json) */ - private String floorAreaJson; + @TableField(typeHandler = JsonLongSetTypeHandler.class) + private Set floorAreaJson; } \ No newline at end of file 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 98a515e4e..0e3542989 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 @@ -10,6 +10,7 @@ import org.apache.ibatis.annotations.Param; import javax.validation.constraints.NotNull; import java.util.List; +import java.util.Set; /** * 库位 Mapper @@ -60,7 +61,8 @@ public interface WareHouseLocationMapper extends BaseMapperX locationIds); + @Param("locationIds") List locationIds, + @Param("mapIds") Set mapIds); /** * 普通查询(未删除) @@ -85,7 +87,8 @@ public interface WareHouseLocationMapper extends BaseMapperX selectLocations(@Param("query") WareHouseLocationDO query, - @Param("locationIds") List locationIds); + @Param("locationIds") List locationIds, + @Param("mapIds") Set mapIds); void updateLocationLockList( @Param("locationIds") List locationIds, @Param("taskId") Long taskId); diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/positionmap/PositionMapMapper.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/positionmap/PositionMapMapper.java index eb7199849..bd88c35e2 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/positionmap/PositionMapMapper.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/positionmap/PositionMapMapper.java @@ -4,8 +4,13 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; import cn.iocoder.yudao.module.system.controller.admin.positionmap.vo.PositionMapPageReqVO; +import cn.iocoder.yudao.module.system.controller.admin.robot.vo.RobotPositionMapVO; import cn.iocoder.yudao.module.system.dal.dataobject.positionmap.PositionMapDO; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Set; /** * 仓库点位地图 Mapper @@ -26,4 +31,10 @@ public interface PositionMapMapper extends BaseMapperX { .orderByDesc(PositionMapDO::getId)); } + /** + * 根据id查询 + * @param ids + * @return + */ + List selectByIds(@Param("ids") Set ids); } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/robot/RobotInformationMapper.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/robot/RobotInformationMapper.java index 235cf507d..137aae922 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/robot/RobotInformationMapper.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/robot/RobotInformationMapper.java @@ -6,6 +6,7 @@ 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 cn.iocoder.yudao.module.system.controller.admin.robot.vo.RobotInformationPageReqVO; +import cn.iocoder.yudao.module.system.controller.admin.robot.vo.RobotInformationStatisticsVO; import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotInformationDO; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; @@ -43,4 +44,24 @@ public interface RobotInformationMapper extends BaseMapperX * @param robotStatus */ void updateRobotStatus(@Param("robotNo") String robotNo, @Param("robotStatus") Integer robotStatus); + + /** + * 查询 + * @param query + * @return + */ + List queryAllByLimit(RobotInformationDO query); + + /** + * 统计车辆任务 + * @return + */ + RobotInformationStatisticsVO statisticsInformation(); + + /** + * 根据机器人编号查询 + * @param robotNos + * @return + */ + List selectByRobotNos(@Param("robotNos") Set robotNos); } \ No newline at end of file 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 0b5f35859..a26d3e8d9 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 @@ -60,12 +60,12 @@ public interface RobotTaskDetailMapper extends BaseMapperX { */ List getUnDoTask(); - /** - * 更新任务状态 - * @param id - * @param taskStatus - */ - void updateRobotDetailStatus(@Param("id") Long id, @Param("taskStatus") Integer taskStatus); List queryByTaskId(@Param("robotTaskId") Long robotTaskId); + + /** + * 更新 + * @param detailDO + */ + void updateRobotDetailById(RobotTaskDetailDO detailDO); } \ 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/redis/RobotCacheTypeEnum.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/enums/redis/RobotCacheLockEnum.java similarity index 93% rename from yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/enums/redis/RobotCacheTypeEnum.java rename to yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/enums/redis/RobotCacheLockEnum.java index d189675ee..7ff482451 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/enums/redis/RobotCacheTypeEnum.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/enums/redis/RobotCacheLockEnum.java @@ -3,9 +3,12 @@ package cn.iocoder.yudao.module.system.enums.redis; import lombok.AllArgsConstructor; import lombok.Getter; +/** + * redis锁的key + */ @Getter @AllArgsConstructor -public enum RobotCacheTypeEnum { +public enum RobotCacheLockEnum { TASK_NO("task:robot:no", "任务号"), ROBOT_TASK_ADD_LOCK("robot:task:add:lock", "所有创建机器人任务的锁"), diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/enums/robot/RobotTaskModelEnum.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/enums/robot/RobotTaskModelEnum.java new file mode 100644 index 000000000..50ea957d8 --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/enums/robot/RobotTaskModelEnum.java @@ -0,0 +1,15 @@ +package cn.iocoder.yudao.module.system.enums.robot; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +public enum RobotTaskModelEnum { + REJECTION(0),//拒收任务 + NORMAL(1); //正常 + /** + * 类型 + */ + private final Integer type; +} diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/job/robot/RobotJob.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/job/robot/RobotJob.java index 1963f58ae..a5010a8ce 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/job/robot/RobotJob.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/job/robot/RobotJob.java @@ -1,7 +1,7 @@ package cn.iocoder.yudao.module.system.job.robot; import cn.iocoder.yudao.framework.tenant.core.job.TenantJob; -import cn.iocoder.yudao.module.system.enums.redis.RobotCacheTypeEnum; +import cn.iocoder.yudao.module.system.enums.redis.RobotCacheLockEnum; import cn.iocoder.yudao.module.system.service.robot.job.DistributeTasksService; import cn.iocoder.yudao.module.system.util.redis.RedissonUtils; import com.xxl.job.core.handler.annotation.XxlJob; @@ -11,7 +11,6 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import javax.annotation.Resource; -import java.util.concurrent.TimeUnit; @Component @@ -29,7 +28,7 @@ public class RobotJob { @TenantJob public void distributeTasksJob() throws InterruptedException { log.info("----下发任务给车机----"); - RLock lock = redissonUtils.getLock(RobotCacheTypeEnum.ROBOT_TASK_DISTRIBUTE_LOCK.getKey()); + RLock lock = redissonUtils.getLock(RobotCacheLockEnum.ROBOT_TASK_DISTRIBUTE_LOCK.getKey()); if (lock.tryLock()){ try { distributeTasksService.distributeTasks(); diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/RobotInformationService.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/RobotInformationService.java index a1a63e318..453c022ea 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/RobotInformationService.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/RobotInformationService.java @@ -5,7 +5,9 @@ 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.robot.vo.RobotInformationPageReqVO; +import cn.iocoder.yudao.module.system.controller.admin.robot.vo.RobotInformationRespVO; import cn.iocoder.yudao.module.system.controller.admin.robot.vo.RobotInformationSaveReqVO; +import cn.iocoder.yudao.module.system.controller.admin.robot.vo.RobotInformationStatisticsVO; import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotInformationDO; /** @@ -43,7 +45,7 @@ public interface RobotInformationService { * @param id 编号 * @return 车辆信息 */ - RobotInformationDO getInformation(Long id); + RobotInformationRespVO getInformation(Long id); /** * 获得车辆信息分页 @@ -51,6 +53,11 @@ public interface RobotInformationService { * @param pageReqVO 分页查询 * @return 车辆信息分页 */ - PageResult getInformationPage(RobotInformationPageReqVO pageReqVO); + PageResult getInformationPage(RobotInformationPageReqVO pageReqVO); + /** + * 统计车辆待命/任务中/离线 + * @return + */ + RobotInformationStatisticsVO statisticsInformation(); } \ 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/RobotInformationServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/RobotInformationServiceImpl.java index 0015b5865..90da1a77d 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 @@ -1,9 +1,14 @@ package cn.iocoder.yudao.module.system.service.robot; -import cn.iocoder.yudao.module.system.controller.admin.robot.vo.RobotInformationPageReqVO; -import cn.iocoder.yudao.module.system.controller.admin.robot.vo.RobotInformationSaveReqVO; +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.iocoder.yudao.module.system.constant.robot.RobotTaskChcheConstant; +import cn.iocoder.yudao.module.system.controller.admin.robot.vo.*; +import cn.iocoder.yudao.module.system.dal.dataobject.positionmap.PositionMapDO; import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotInformationDO; +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.util.redis.RedisUtil; import org.springframework.stereotype.Service; import javax.annotation.Resource; import org.springframework.validation.annotation.Validated; @@ -14,7 +19,7 @@ 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.ROBOT_INFORMATION_NOT_EXISTS; +import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*; /** * 车辆信息 Service 实现类 @@ -28,8 +33,28 @@ public class RobotInformationServiceImpl implements RobotInformationService { @Resource private RobotInformationMapper informationMapper; + @Resource + private PositionMapMapper positionMapMapper; + + @Resource + private RedisUtil redisUtil; + @Override public Long createInformation(RobotInformationSaveReqVO createReqVO) { + //判断mac地址是否重复 + RobotInformationDO query = new RobotInformationDO(); + query.setMacAddress(createReqVO.getMacAddress()); + List existRobotMac = informationMapper.queryAllByLimit(query); + if (ObjectUtil.isNotEmpty(existRobotMac)) { + throw exception(ROBOT_MAC_ADDRESS_EXISTS); + } + //判断机器人编号 + query.setMacAddress(null); + query.setRobotNo(createReqVO.getRobotNo()); + List existRobotNo = informationMapper.queryAllByLimit(query); + if (ObjectUtil.isNotEmpty(existRobotNo)) { + throw exception(ROBOT_ROBOT_NO_EXISTS); + } // 插入 RobotInformationDO information = BeanUtils.toBean(createReqVO, RobotInformationDO.class); informationMapper.insert(information); @@ -41,6 +66,24 @@ public class RobotInformationServiceImpl implements RobotInformationService { public void updateInformation(RobotInformationSaveReqVO updateReqVO) { // 校验存在 validateInformationExists(updateReqVO.getId()); + //校验MAC地址 + RobotInformationDO query = new RobotInformationDO(); + query.setMacAddress(updateReqVO.getMacAddress()); + List existRobot = informationMapper.queryAllByLimit(query); + boolean exist = existRobot.stream().anyMatch(v -> (v.getMacAddress().equals(updateReqVO.getMacAddress()) + && !v.getId().equals(updateReqVO.getId()))); + if (exist) { + throw exception(ROBOT_MAC_ADDRESS_EXISTS); + } + //校验机器人编号 + query.setMacAddress(null); + query.setRobotNo(updateReqVO.getRobotNo()); + List existRobotNo = informationMapper.queryAllByLimit(query); + boolean robotNoExist = existRobotNo.stream().anyMatch(v -> (v.getRobotNo().equals(updateReqVO.getRobotNo()) + && !v.getId().equals(updateReqVO.getId()))); + if (robotNoExist) { + throw exception(ROBOT_ROBOT_NO_EXISTS); + } // 更新 RobotInformationDO updateObj = BeanUtils.toBean(updateReqVO, RobotInformationDO.class); informationMapper.updateById(updateObj); @@ -61,13 +104,61 @@ public class RobotInformationServiceImpl implements RobotInformationService { } @Override - public RobotInformationDO getInformation(Long id) { - return informationMapper.selectById(id); + public RobotInformationRespVO getInformation(Long id) { + RobotInformationDO robotInformationDO = informationMapper.selectById(id); + RobotInformationRespVO bean = BeanUtils.toBean(robotInformationDO, RobotInformationRespVO.class); + setPositionMapList(bean); + return bean; + } + + public void setPositionMapList(RobotInformationRespVO bean) { + Set ids = bean.getFloorAreaJson(); + if (ObjectUtil.isNotEmpty(ids)) { + List list = positionMapMapper.selectByIds(ids); + List targetList = BeanUtil.copyToList(list, RobotPositionMapVO.class); + bean.setPositionMapList(targetList); + } } @Override - public PageResult getInformationPage(RobotInformationPageReqVO pageReqVO) { - return informationMapper.selectPage(pageReqVO); + public PageResult getInformationPage(RobotInformationPageReqVO pageReqVO) { + PageResult pageResult = informationMapper.selectPage(pageReqVO); + + PageResult dataPage = new PageResult<>(); + dataPage.setTotal(pageResult.getTotal()); + List list = pageResult.getList(); + List targetList = BeanUtil.copyToList(list, RobotInformationRespVO.class); + targetList.stream().forEach(v -> { + setPositionMapList(v); + String electricity = (String)redisUtil.get(RobotTaskChcheConstant.ROBOT_ELECTRICITY + v.getRobotNo()); + v.setElectricity(electricity); + }); + dataPage.setList(targetList); + + return dataPage; + } + + /** + * 统计车辆待命/任务中/离线 + * @return + */ + @Override + public RobotInformationStatisticsVO statisticsInformation() { + RobotInformationStatisticsVO info = informationMapper.statisticsInformation(); + + RobotInformationDO query = new RobotInformationDO(); + List existRobot = informationMapper.queryAllByLimit(query); + int i = 0; + if (ObjectUtil.isNotEmpty(existRobot)) { + for (RobotInformationDO v : existRobot) { + String electricity = (String)redisUtil.get(RobotTaskChcheConstant.ROBOT_ELECTRICITY + v.getRobotNo()); + if (ObjectUtil.isEmpty(electricity)) { + i++; + } + } + } + info.setOffline(i); + return info; } } \ 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 fa2843bfd..28b49fda6 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 @@ -2,16 +2,19 @@ package cn.iocoder.yudao.module.system.service.robot; import cn.hutool.core.util.ObjectUtil; import cn.iocoder.yudao.framework.common.util.date.DateUtils; +import cn.iocoder.yudao.module.system.controller.admin.robot.vo.RobotInformationPageReqVO; import cn.iocoder.yudao.module.system.controller.admin.robot.vo.RobotTaskDetailAddVo; import cn.iocoder.yudao.module.system.controller.admin.robot.vo.RobotTaskPageReqVO; import cn.iocoder.yudao.module.system.controller.admin.robot.vo.RobotTaskSaveReqVO; import cn.iocoder.yudao.module.system.dal.dataobject.houselocation.WareHouseLocationDO; +import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotInformationDO; import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotTaskDO; import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotTaskDetailDO; import cn.iocoder.yudao.module.system.dal.mysql.houselocation.WareHouseLocationMapper; +import cn.iocoder.yudao.module.system.dal.mysql.robot.RobotInformationMapper; import cn.iocoder.yudao.module.system.dal.mysql.robot.RobotTaskDetailMapper; import cn.iocoder.yudao.module.system.dal.mysql.robot.RobotTaskMapper; -import cn.iocoder.yudao.module.system.enums.redis.RobotCacheTypeEnum; +import cn.iocoder.yudao.module.system.enums.redis.RobotCacheLockEnum; import cn.iocoder.yudao.module.system.enums.robot.*; import cn.iocoder.yudao.module.system.util.redis.RedisUtil; import cn.iocoder.yudao.module.system.util.redis.RedissonUtils; @@ -28,7 +31,6 @@ import org.springframework.validation.annotation.Validated; import java.util.*; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; -import java.util.stream.Stream; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; @@ -37,6 +39,7 @@ 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.framework.common.exception.util.ServiceExceptionUtil.exception0; import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*; +import static org.apache.groovy.util.concurrent.concurrentlinkedhashmap.Weighers.map; /** * 机器人任务主表 Service 实现类 @@ -68,6 +71,9 @@ public class RobotTaskServiceImpl implements RobotTaskService { @Resource private RobotTaskDetailService robotTaskDetailService; + @Resource + private RobotInformationMapper informationMapper; + @Value("${zn.task-no:ZN}") private String taskNo; @Value("${zn.do_cycle:true}") @@ -81,11 +87,11 @@ public class RobotTaskServiceImpl implements RobotTaskService { //设置任务号 if (ObjectUtil.isEmpty(createReqVO.getTaskNo())) { - String incrementByKey = redisUtil.getIncrementByKey(RobotCacheTypeEnum.TASK_NO.getKey()); + String incrementByKey = redisUtil.getIncrementByKey(RobotCacheLockEnum.TASK_NO.getKey()); createReqVO.setTaskNo(taskNo+ DateUtils.getYearMonthDay()+incrementByKey); } //获取库位id - RLock lock = redissonUtils.getLock(RobotCacheTypeEnum.ROBOT_TASK_ADD_LOCK.getKey()); + RLock lock = redissonUtils.getLock(RobotCacheLockEnum.ROBOT_TASK_ADD_LOCK.getKey()); String addResult = ""; if (lock.tryLock(30l,TimeUnit.MINUTES)){ @@ -134,6 +140,22 @@ public class RobotTaskServiceImpl implements RobotTaskService { throw exception(TASK_ONLY_CHOOSE_LOCATION); } } + //校验机器人是否禁用 + Set robotNos = createReqVO.getTaskDetailList() + .stream() + .map(RobotTaskDetailAddVo::getRobotNo) + .collect(Collectors.toSet()); + if (ObjectUtil.isNotEmpty(robotNos)) { + List robots = informationMapper.selectByRobotNos(robotNos); + String robotNo = robots.stream() + .filter(v -> RobotTaskModelEnum.REJECTION.getType().equals(v.getRobotTaskModel())) + .map(RobotInformationDO::getRobotNo) + .collect(Collectors.joining(" ")); + + if (ObjectUtil.isNotEmpty(robotNo)) { + throw exception0(TASK_CHECK_EXCEPTION.getCode(), "以下机器人已被禁用 ",robotNo); + } + } } /** @@ -175,6 +197,16 @@ public class RobotTaskServiceImpl implements RobotTaskService { List toLocationIds = new ArrayList<>(); //被此次任务锁定的空库位id List fromLocationIds = new ArrayList<>(); //被此次任务锁定的有货库位id for (RobotTaskDetailAddVo robotTaskVo : taskDetailList) { + Set mapIds = new HashSet<>(); + if (ObjectUtil.isNotEmpty(robotTaskVo.getRobotNo())) { + RobotInformationPageReqVO pageReqVO = new RobotInformationPageReqVO(); + pageReqVO.setRobotNo(robotTaskVo.getRobotNo()); + mapIds = informationMapper.selectPage(pageReqVO).getList() + .stream() + .findFirst() + .map(RobotInformationDO::getFloorAreaJson) + .orElse(new HashSet<>()); + } //查找有货且非锁定的库位 WareHouseLocationDO query = null; if (ReleaseTakeEnum.TO_LANE.getType().equals(robotTaskVo.getTakeType())) { @@ -193,9 +225,10 @@ public class RobotTaskServiceImpl implements RobotTaskService { .build(); } - List stockList = locationMapper.selectLocations(query,toLocationIds); + List stockList = locationMapper.selectLocations(query,toLocationIds,mapIds); if (ObjectUtil.isEmpty(stockList)) { - throw new RuntimeException("取货线库/区域为空或者已锁定"); + log.error("取货线库/区域为空或者已锁定或者机器人取放货区域受限制 :{}",robotTaskVo.toString()); + throw new RuntimeException("取货线库/区域为空或者已锁定或者机器人取放货区域受限制"); } //判断取货库位是否存在未完成的任务 Set stockLocationIds = stockList.stream().map(WareHouseLocationDO::getId).collect(Collectors.toSet()); @@ -221,9 +254,10 @@ public class RobotTaskServiceImpl implements RobotTaskService { .build(); } - List releaseStockList = locationMapper.selectLocations(releaseQuery,toLocationIds); + List releaseStockList = locationMapper.selectLocations(releaseQuery,toLocationIds,mapIds); if (ObjectUtil.isEmpty(releaseStockList) || releaseStockList.size() < stockList.size()) { - throw new RuntimeException("放货线库/区域库位数量不足"); + log.error("放货线库/区域库位数量不足或者机器人取放货区域受限制 :{}",robotTaskVo.toString()); + throw new RuntimeException("放货线库/区域库位数量不足或者机器人取放货区域受限制"); } //赋值数据 List addTaskDetailList = getTaskDatail(stockList,releaseStockList,toLocationIds, @@ -292,6 +326,17 @@ public class RobotTaskServiceImpl implements RobotTaskService { public void setSingleLocationIdNo(List taskDetailList, Long taskId){ List locationIds = new ArrayList<>(); for (RobotTaskDetailAddVo robotTaskVo : taskDetailList) { + Set mapIds = new HashSet<>(); + if (ObjectUtil.isNotEmpty(robotTaskVo.getRobotNo())) { + RobotInformationPageReqVO pageReqVO = new RobotInformationPageReqVO(); + pageReqVO.setRobotNo(robotTaskVo.getRobotNo()); + mapIds = informationMapper.selectPage(pageReqVO).getList() + .stream() + .findFirst() + .map(RobotInformationDO::getFloorAreaJson) + .orElse(new HashSet<>()); + } + //校验放货库位 if (ReleaseTakeEnum.TO_LOCATION.getType().equals(robotTaskVo.getReleaseType())) { WareHouseLocationDO query = WareHouseLocationDO.builder().id(robotTaskVo.getReleaseId()).build(); @@ -299,12 +344,17 @@ public class RobotTaskServiceImpl implements RobotTaskService { robotTaskVo.setToLocationNo(locationDO.getLocationNo()); robotTaskVo.setToLocationId(robotTaskVo.getReleaseId()); robotTaskVo.setToLocationStorey(locationDO.getLocationStorey()); + if (ObjectUtil.isNotEmpty(mapIds) && !mapIds.contains(locationDO.getMapId())) { + log.error("机器人不能在此放货库位放货 :{}, 机器人编号 :{}", locationDO.getLocationNo(),robotTaskVo.getRobotNo()); + throw new RuntimeException("机器人不能在此放货库位放货 "+ robotTaskVo.getReleaseId()); + } } else { WareHouseLocationDO wareHouseLocationDO = locationMapper.selectByTypeAndId(LocationUseStatusEnum.NO.getType(), robotTaskVo.getReleaseType() - ,robotTaskVo.getReleaseId(),locationIds); + ,robotTaskVo.getReleaseId(),locationIds,mapIds); if (ObjectUtil.isEmpty(wareHouseLocationDO)) { - throw new RuntimeException("放货库位为空或者已锁定 "+ robotTaskVo.getReleaseId()); + log.error("放货库位为空或者已锁定或者机器人取放货区域受限制 :{}", robotTaskVo.getReleaseId()); + throw new RuntimeException("放货库位为空或者已锁定或者机器人取放货区域受限制 "+ robotTaskVo.getReleaseId()); } robotTaskVo.setToLocationNo(wareHouseLocationDO.getLocationNo()); robotTaskVo.setToLocationId(wareHouseLocationDO.getId()); @@ -319,12 +369,17 @@ public class RobotTaskServiceImpl implements RobotTaskService { robotTaskVo.setFromLocationNo(locationDO.getLocationNo()); robotTaskVo.setFromLocationId(robotTaskVo.getTakeId()); robotTaskVo.setFromLocationStorey(locationDO.getLocationStorey()); + if (ObjectUtil.isNotEmpty(mapIds) && !mapIds.contains(locationDO.getMapId())) { + log.error("机器人不能在此取货库位取货 :{}, 机器人编号 :{}", locationDO.getLocationNo(),robotTaskVo.getRobotNo()); + throw new RuntimeException("机器人不能在此取货库位取货 "+ robotTaskVo.getTakeId()); + } } else { WareHouseLocationDO wareHouseLocationDO = locationMapper.selectByTypeAndId(LocationUseStatusEnum.YES.getType(),robotTaskVo.getTakeType(), - robotTaskVo.getTakeId(),locationIds); + robotTaskVo.getTakeId(),locationIds,mapIds); if (ObjectUtil.isEmpty(wareHouseLocationDO)) { - throw new RuntimeException("取货库位为空或者已锁定 "+ robotTaskVo.getTakeId()); + log.error("取货库位为空或者已锁定或者机器人取放货区域受限制 :{}", robotTaskVo.getTakeId()); + throw new RuntimeException("取货库位为空或者已锁定或者机器人取放货区域受限制 "+ robotTaskVo.getTakeId()); } robotTaskVo.setFromLocationNo(wareHouseLocationDO.getLocationNo()); robotTaskVo.setFromLocationId(wareHouseLocationDO.getId()); @@ -333,9 +388,10 @@ public class RobotTaskServiceImpl implements RobotTaskService { locationIds.add(robotTaskVo.getFromLocationId()); //验证取货库位是否存在未完成的任务 Set set = new HashSet<>(); - set.add(robotTaskVo.getToLocationId()); + set.add(robotTaskVo.getFromLocationId()); List doingTasks = taskDetailMapper.queryDoingTaskByIds(set); if (ObjectUtil.isNotEmpty(doingTasks)) { + log.error("取货库位,存在未完成的任务 :{}", robotTaskVo.getTakeId()); throw new RuntimeException("取货库位,存在未完成的任务"); } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/job/DistributeTasksServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/job/DistributeTasksServiceImpl.java index 402c5d368..56f199377 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/job/DistributeTasksServiceImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/job/DistributeTasksServiceImpl.java @@ -1,5 +1,6 @@ package cn.iocoder.yudao.module.system.service.robot.job; +import cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder; 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; @@ -16,7 +17,9 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; +import java.time.LocalDateTime; import java.util.ArrayList; +import java.util.Date; import java.util.List; @Service @@ -41,6 +44,7 @@ public class DistributeTasksServiceImpl implements DistributeTasksService { @Override @Transactional(rollbackFor = Exception.class) public void distributeTasks() { + TenantContextHolder.setTenantId(1L); List robots = robotInformationMapper.selectFreeRobot(); if (robots.isEmpty()) { log.info("暂无空闲的机器人"); @@ -69,7 +73,7 @@ public class DistributeTasksServiceImpl implements DistributeTasksService { List robotTaskDOS = new ArrayList<>(); int i = 0; for (RobotTaskDetailDO taskDetailDO : taskDetailDOS) { - if (robots.size() < i) { + if (robots.size() <= i) { break; } @@ -86,13 +90,13 @@ public class DistributeTasksServiceImpl implements DistributeTasksService { List pose2ds = new ArrayList<>(); Pose2ds pose2d = new Pose2ds(); - pose2d.setX("21.02"); - pose2d.setY("11.02"); - pose2d.setYaw("2.0"); - pose2ds.add(pose2d); - taskOne.setPose2ds(pose2ds); + pose2d.setX(-0.700); + pose2d.setY(-0.678); + pose2d.setYaw(-0.193); +// pose2ds.add(pose2d); + taskOne.setPose2d(pose2d); - RobotAcceptTaskData taskTwo = new RobotAcceptTaskData(); + /* RobotAcceptTaskData taskTwo = new RobotAcceptTaskData(); taskTwo.setSerial("1"); taskTwo.setCommand_id(taskDetailDO.getId().toString()); taskTwo.setCommand_type(CommandTypeEnum.FORK.getType()); @@ -110,9 +114,9 @@ public class DistributeTasksServiceImpl implements DistributeTasksService { taskFour.setCommand_type(CommandTypeEnum.MOVE_POSE.getType()); List pose2ds4 = new ArrayList<>(); Pose2ds pose2d4 = new Pose2ds(); - pose2d4.setX("33.02"); - pose2d4.setY("33.02"); - pose2d4.setYaw("3.0"); + pose2d4.setX(33.02); + pose2d4.setY(33.02); + pose2d4.setYaw(3.0); pose2ds4.add(pose2d4); taskFour.setPose2ds(pose2ds4); @@ -128,9 +132,9 @@ public class DistributeTasksServiceImpl implements DistributeTasksService { taskSix.setCommand_type(CommandTypeEnum.FORK.getType()); List pose2ds5 = new ArrayList<>(); Pose2ds pose2d5 = new Pose2ds(); - pose2d5.setX("55.02"); - pose2d5.setY("55.02"); - pose2d5.setYaw("5.0"); + pose2d5.setX(55.02); + pose2d5.setY(55.02); + pose2d5.setYaw(5.0); pose2ds5.add(pose2d5); taskSix.setPose2ds(pose2ds5); @@ -138,15 +142,15 @@ public class DistributeTasksServiceImpl implements DistributeTasksService { taskSeven.setSerial("4"); taskSeven.setCommand_id(taskDetailDO.getId().toString()); taskSeven.setCommand_type(CommandTypeEnum.FORK.getType()); - taskSeven.setTarget_height("0.0"); + taskSeven.setTarget_height("0.0");*/ data.add(taskOne); - data.add(taskTwo); + /*data.add(taskTwo); data.add(taskThree); data.add(taskFour); data.add(taskFive); data.add(taskSix); - data.add(taskSeven); + data.add(taskSeven);*/ robotTaskDO.setData(data); robotTaskDOS.add(robotTaskDO); @@ -161,7 +165,11 @@ public class DistributeTasksServiceImpl implements DistributeTasksService { @Transactional(rollbackFor = Exception.class) public void updateTaskStatus(RobotInformationDO robotInformationDO, RobotTaskDetailDO taskDetailDO) { robotInformationMapper.updateRobotStatus(robotInformationDO.getRobotNo(), RobotStatusEnum.DOING.getType()); - robotTaskDetailMapper.updateRobotDetailStatus(taskDetailDO.getId(), RobotTaskDetailStatusEnum.DOING.getType()); + RobotTaskDetailDO detailDO = new RobotTaskDetailDO(); + detailDO.setId(taskDetailDO.getId()); + detailDO.setStartTime(LocalDateTime.now()); + detailDO.setTaskStatus(RobotTaskDetailStatusEnum.DOING.getType()); + robotTaskDetailMapper.updateRobotDetailById(detailDO); robotTaskMapper.updateRobotStatus(taskDetailDO.getRobotTaskId(), RobotTaskStatusEnum.DOING.getType()); } 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 05caabee8..5c9a1cc0b 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 @@ -533,6 +533,13 @@ #{id} + + AND map_id in + + #{mapId} + + AND location_enable = '1' AND location_lock = '1' @@ -639,6 +646,13 @@ #{item} + + and map_id in + + #{mapId} + + diff --git a/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/positionmap/PositionMapMapper.xml b/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/positionmap/PositionMapMapper.xml index f8b51f2c5..69a95a9e7 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/positionmap/PositionMapMapper.xml +++ b/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/positionmap/PositionMapMapper.xml @@ -9,4 +9,225 @@ 文档可见:https://www.iocoder.cn/MyBatis/x-plugins/ --> + + + + + + + + + + + + + + + + + + id, + floor, + area, + yaml_json, + png_url, + yaml_url, + creator, + create_time, + updater, + update_time, + deleted, + tenant_id + + + + + + + + + + + + + + + insert into ware_position_map(floor, area, yml_json, png_url, yaml_url,creator, create_time, updater, update_time, deleted, + tenant_id) + values (#{floor}, #{area}, #{ymlJson}, #{pngUrl},#{yamlUrl}, #{creator}, #{createTime}, #{updater}, #{updateTime}, #{deleted}, + #{tenantId}) + + + + insert into ware_position_map(floor, area, yml_json, png_url,yaml_url, creator, create_time, updater, update_time, deleted, + tenant_id) + values + + (#{entity.floor}, #{entity.area}, #{entity.ymlJson}, #{entity.pngUrl},#{entity.yamlUrl}, #{entity.creator}, #{entity.createTime}, + #{entity.updater}, #{entity.updateTime}, #{entity.deleted}, #{entity.tenantId}) + + + + + insert into ware_position_map(floor, area, yml_json, png_url,yaml_url, creator, create_time, updater, update_time, deleted, + tenant_id) + values + + (#{entity.floor}, #{entity.area}, #{entity.ymlJson}, #{entity.pngUrl}, #{entity.yamlUrl},#{entity.creator}, #{entity.createTime}, + #{entity.updater}, #{entity.updateTime}, #{entity.deleted}, #{entity.tenantId}) + + on duplicate key update + floor = values(floor), + area = values(area), + yml_json = values(yml_json), + png_url = values(png_url), + yaml_url = values(yaml_url), + creator = values(creator), + create_time = values(create_time), + updater = values(updater), + update_time = values(update_time), + deleted = values(deleted), + tenant_id = values(tenant_id) + + + + + update ware_position_map + + + floor = #{floor}, + + + area = #{area}, + + + yml_json = #{ymlJson}, + + + and png_url = #{pngUrl} + + + and yaml_url = #{yamlUrl} + + + creator = #{creator}, + + + create_time = #{createTime}, + + + updater = #{updater}, + + + update_time = #{updateTime}, + + + deleted = #{deleted}, + + + tenant_id = #{tenantId}, + + + where id = #{id} + + \ No newline at end of file diff --git a/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/robot/RobotInformationMapper.xml b/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/robot/RobotInformationMapper.xml index 1aba5ceef..7aaa1c32a 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/robot/RobotInformationMapper.xml +++ b/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/robot/RobotInformationMapper.xml @@ -19,6 +19,7 @@ + @@ -37,6 +38,7 @@ url, robot_status, creator, + floor_area_json, create_time, updater, update_time, @@ -47,8 +49,7 @@ @@ -199,7 +196,7 @@ - + update robot_information @@ -268,7 +265,33 @@ robot_information where robot_task_model = '1' + and deleted = '0' and robot_status = '3' order by update_time asc + + + + \ No newline at end of file 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 f151c5770..421828df5 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 @@ -292,7 +292,7 @@ - + update robot_task_detail @@ -358,22 +358,10 @@ deleted = #{deleted}, - - tenant_id = #{tenantId}, - where id = #{id} - - update - robot_task_detail - set - task_status = #{taskStatus} - where - id = #{id} - - delete