Compare commits
4 Commits
4beceefef7
...
59c24c1a7e
Author | SHA1 | Date | |
---|---|---|---|
![]() |
59c24c1a7e | ||
![]() |
2f9c8a38bc | ||
![]() |
4f6fd7d807 | ||
![]() |
fc8c96e5c2 |
@ -1,6 +1,7 @@
|
||||
package cn.iododer.yudao.module.mqtt.api.common;
|
||||
|
||||
import cn.iocoder.yudao.module.mqtt.api.common.CommonApi;
|
||||
import cn.iododer.yudao.module.mqtt.config.MqttFactory;
|
||||
import cn.iododer.yudao.module.mqtt.util.MqttUtils;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
@ -23,9 +24,9 @@ public class CommonApiImpl implements CommonApi {
|
||||
String str = JSON.toJSONString(obj);
|
||||
mqttUtils.pub(topic, JSON.toJSONString(obj));
|
||||
if (str.length() > 510) {
|
||||
// log.info("MQTT消息发送成功topic :{}, 内容 :{}",topic, str.substring(0, 500));
|
||||
log.info("MQTT消息发送成功topic :{}, 内容 :{}",topic, str.substring(0, 500));
|
||||
}else {
|
||||
// log.info("MQTT消息发送成功topic :{}, 内容 :{}",topic, str);
|
||||
log.info("MQTT消息发送成功topic :{}, 内容 :{}",topic, str);
|
||||
}
|
||||
} catch (MqttException e) {
|
||||
log.info("MQTT消息发送异常 :{}",e);
|
||||
@ -37,9 +38,9 @@ public class CommonApiImpl implements CommonApi {
|
||||
try {
|
||||
mqttUtils.pub(topic, str);
|
||||
if (str.length() > 510) {
|
||||
// log.info("MQTT消息发送成功topic :{}, 内容 :{}",topic, str.substring(0, 500));
|
||||
log.info("MQTT消息发送成功topic :{}, 内容 :{}",topic, str.substring(0, 500));
|
||||
}else {
|
||||
// log.info("MQTT消息发送成功topic :{}, 内容 :{}",topic, str);
|
||||
log.info("MQTT消息发送成功topic :{}, 内容 :{}",topic, str);
|
||||
}
|
||||
} catch (MqttException e) {
|
||||
log.info("MQTT消息发送异常 :{}",e);
|
||||
|
@ -35,6 +35,7 @@ management:
|
||||
mqtt:
|
||||
# host: tcp://123.57.12.40:1883
|
||||
host: tcp://127.0.0.1:1883
|
||||
# host: tcp://10.10.7.195:1883
|
||||
username: adminuser
|
||||
password: adminuser
|
||||
qos: 2
|
||||
|
@ -19,4 +19,9 @@ public class RobotSkuInfoDTO {
|
||||
* 物料数量
|
||||
*/
|
||||
private Long skuNumber;
|
||||
|
||||
/**
|
||||
* 层数
|
||||
*/
|
||||
private Integer locationStorey;
|
||||
}
|
||||
|
@ -236,11 +236,11 @@ public interface ErrorCodeConstants {
|
||||
ErrorCode PATH_PLANNING_DOING_DISTRIBUTE = new ErrorCode(1-002-037-002, "有正在分配的PP任务!");
|
||||
|
||||
// ========== 地图信息 1-002-038-000 ==========
|
||||
ErrorCode AGV_UPLOAD_INFORMATION_DOES_NOT_INCLUDE_FLOOR_OR_AREA_INFORMATION = new ErrorCode(1_002_038_001, "AGV上传信息未包含楼层或区域信息");
|
||||
ErrorCode AGV_FILE_UPLOAD_CONTENT_IS_EMPTY = new ErrorCode(1_002_038_002, "AGV文件上传内容为空");
|
||||
ErrorCode AGV_UPLOAD_INFORMATION_DOES_NOT_INCLUDE_FLOOR_OR_AREA_INFORMATION = new ErrorCode(1_002_038_001, "车辆上传信息未包含楼层或区域信息");
|
||||
ErrorCode AGV_FILE_UPLOAD_CONTENT_IS_EMPTY = new ErrorCode(1_002_038_002, "车辆文件上传内容为空");
|
||||
ErrorCode PLEASE_UPLOAD_PNG_AND_YAML_FILES = new ErrorCode(1_002_038_003, "请上传png和yaml两个文件并且文件内容不为空");
|
||||
ErrorCode AGV_MAP_NOT_FOUND = new ErrorCode(1_002_038_004, "找不到AGV地图信息");
|
||||
ErrorCode AGV_IMAGE_CONVERSION_TO_BASE64_FAILED = new ErrorCode(1_002_038_005, "AGV图片转base64失败");
|
||||
ErrorCode AGV_MAP_NOT_FOUND = new ErrorCode(1_002_038_004, "找不到车辆地图信息");
|
||||
ErrorCode AGV_IMAGE_CONVERSION_TO_BASE64_FAILED = new ErrorCode(1_002_038_005, "车辆图片转base64失败");
|
||||
ErrorCode THE_LINE_LIBRARY_POINTS_ARE_NOT_LOCATED_IN_THE_SAME_AREA = new ErrorCode(1_002_038_006, "线库点位不在同一区域内");
|
||||
ErrorCode THERE_ARE_ALREADY_STORAGE_LOCATIONS_IN_OTHER_LINE_WAREHOUSES = new ErrorCode(1_002_038_007, "已有库位在其他线库内");
|
||||
ErrorCode THERE_ARE_ALREADY_STORAGE_LOCATIONS_IN_OTHER_STORAGE_AREAS = new ErrorCode(1_002_038_008, "已有库位在其它区域内");
|
||||
|
@ -88,7 +88,6 @@ public class PathApiImpl implements PathApi {
|
||||
} finally {
|
||||
MDC.clear();
|
||||
}
|
||||
// taskService.ppDistributionTask(message); 废弃了
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -49,9 +49,6 @@ public class RobotStatusApiImpl implements RobotStatusApi {
|
||||
|
||||
private static final ExecutorService executorService = Executors.newFixedThreadPool(5);
|
||||
|
||||
/*@Autowired
|
||||
private ThreadPoolTaskExecutor taskExecutor;
|
||||
*/
|
||||
@Resource
|
||||
private CommonApi commonApi;
|
||||
|
||||
|
@ -338,6 +338,7 @@ public class RobotTaskStatusApiImpl implements RobotTaskStatusApi {
|
||||
robotSkuInfo.setHaveSku(ZeroOneEnum.ONE.getType());
|
||||
robotSkuInfo.setSkuNumber(wareHouseLocationDO.getSkuNumber());
|
||||
robotSkuInfo.setSkuInfo(wareHouseLocationDO.getSkuInfo());
|
||||
robotSkuInfo.setLocationStorey(wareHouseLocationDO.getLocationStorey());
|
||||
redisUtil.set(RobotTaskChcheConstant.ROBOT_TASK_SKU_INFO + robotCompleteTaskDTO.getMac(), JSON.toJSONString(robotSkuInfo));
|
||||
wareHouseLocationDO.setSkuInfo(null);
|
||||
wareHouseLocationDO.setSkuNumber(0L);
|
||||
|
@ -47,7 +47,7 @@ public class RequestProcessor {
|
||||
private void sendData(String map, Map<String, String> data) {
|
||||
// -- 发送给对应的websocket
|
||||
// System.out.println("key:" + map + "发送数据:" + data);
|
||||
// log.info("key:" + map + "发送数据:" + data);
|
||||
log.info("key:" + map + "发送数据:" + data);
|
||||
webSocketSenderApi.sendObject(map, WebSocketConstant.MAP_PUSH, data);
|
||||
}
|
||||
|
||||
|
@ -74,8 +74,8 @@ public class DeviceInformationPageReqVO extends PageParam {
|
||||
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
|
||||
private LocalDateTime[] createTime;
|
||||
|
||||
@Schema(description = "设备使用状态(IDLE:空闲、USEING:使用中)")
|
||||
private String deviceUseStatus;
|
||||
@Schema(description = "设备使用状态(0:空闲、1:使用中)")
|
||||
private Integer deviceUseStatus;
|
||||
|
||||
@Schema(description = "设备专有属性(1:自动充电类型充电桩、2:手动充电类型充电桩)")
|
||||
private Integer deviceAttribute;
|
||||
|
@ -91,9 +91,9 @@ public class DeviceInformationRespVO {
|
||||
@ExcelProperty("创建时间")
|
||||
private LocalDateTime createTime;
|
||||
|
||||
@Schema(description = "设备使用状态(IDLE:空闲、USEING:使用中)")
|
||||
@ExcelProperty("设备使用状态(IDLE:空闲、USEING:使用中)")
|
||||
private String deviceUseStatus;
|
||||
@Schema(description = "设备使用状态(0:空闲、1:使用中)")
|
||||
@ExcelProperty("设备使用状态(0:空闲、1:使用中)")
|
||||
private Integer deviceUseStatus;
|
||||
|
||||
@Schema(description = "设备专有属性(1:自动充电类型充电桩、2:手动充电类型充电桩)")
|
||||
@ExcelProperty("设备专有属性(1:自动充电类型充电桩、2:手动充电类型充电桩)")
|
||||
|
@ -72,8 +72,8 @@ public class DeviceInformationSaveReqVO {
|
||||
@Schema(description = "设备最后通讯时间")
|
||||
private LocalDateTime deviceLastTime;
|
||||
|
||||
@Schema(description = "设备使用状态(IDLE:空闲、USEING:使用中)")
|
||||
private String deviceUseStatus;
|
||||
@Schema(description = "设备使用状态(0:空闲、1:使用中)")
|
||||
private Integer deviceUseStatus;
|
||||
|
||||
@Schema(description = "设备专有属性(1:自动充电类型充电桩、2:手动充电类型充电桩)")
|
||||
private Integer deviceAttribute;
|
||||
|
@ -3,6 +3,7 @@ package cn.iocoder.yudao.module.system.controller.admin.tool;
|
||||
|
||||
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.robot.vo.RobotInformationSaveReqVO;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.tool.dto.SendMsgToMqttDTO;
|
||||
import cn.iocoder.yudao.module.system.service.tool.ToolsService;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
@ -55,4 +56,12 @@ public class ToolsController {
|
||||
toolsService.simulationPose();
|
||||
return success("同步完成");
|
||||
}
|
||||
|
||||
@PostMapping("/sendMsgToMQTT")
|
||||
@Operation(summary = "发送消息给MQTT")
|
||||
@PermitAll
|
||||
public CommonResult<String> sendMsgToMQTT( @RequestBody SendMsgToMqttDTO dto) {
|
||||
toolsService.sendMsgToMQTT(dto);
|
||||
return success("发送完成");
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,14 @@
|
||||
package cn.iocoder.yudao.module.system.controller.admin.tool.dto;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class SendMsgToMqttDTO {
|
||||
|
||||
@Schema(description = "消息")
|
||||
private String msg;
|
||||
|
||||
@Schema(description = "主题topic")
|
||||
private String topic;
|
||||
}
|
@ -112,9 +112,9 @@ public class DeviceInformationDO extends BaseDO {
|
||||
*/
|
||||
private LocalDateTime deviceLastTime;
|
||||
/**
|
||||
* 设备使用状态(IDLE:空闲、USEING:使用中)
|
||||
* 设备使用状态(0:空闲、1:使用中)
|
||||
*/
|
||||
private String deviceUseStatus;
|
||||
private Integer deviceUseStatus;
|
||||
/**
|
||||
* 设备专有属性(1:自动充电类型充电桩、2:手动充电类型充电桩)
|
||||
*/
|
||||
|
@ -39,7 +39,7 @@ public interface DeviceInformationMapper extends BaseMapperX<DeviceInformationDO
|
||||
* @param lastUser
|
||||
*/
|
||||
void updateDeviceUseStatus(@Param("deviceNo") String deviceNo,
|
||||
@Param("deviceUseStatus") String deviceUseStatus,
|
||||
@Param("deviceUseStatus") Integer deviceUseStatus,
|
||||
@Param("lastUser") String lastUser);
|
||||
|
||||
/**
|
||||
@ -47,11 +47,24 @@ public interface DeviceInformationMapper extends BaseMapperX<DeviceInformationDO
|
||||
* @param lastUser
|
||||
*/
|
||||
void setDeviceReleaseByLastUser(@Param("lastUser") String lastUser,
|
||||
@Param("deviceUseStatus") String deviceUseStatus);
|
||||
@Param("deviceUseStatus") Integer deviceUseStatus);
|
||||
|
||||
/**
|
||||
* 根据地图id删除
|
||||
* @param mapId
|
||||
*/
|
||||
void deleteDeviceByMapId(@Param("mapId") Long mapId);
|
||||
|
||||
/**
|
||||
* 更新车辆编号
|
||||
* @param oldRobotNo
|
||||
* @param newRobotNo
|
||||
*/
|
||||
void updateRobotNo(@Param("oldRobotNo") String oldRobotNo, @Param("newRobotNo") String newRobotNo);
|
||||
|
||||
/**
|
||||
* 清除车辆编号
|
||||
* @param robotNo
|
||||
*/
|
||||
void clearRobotNo(@Param("robotNo") String robotNo);
|
||||
}
|
@ -74,4 +74,17 @@ public interface PositionMapItemMapper extends BaseMapperX<PositionMapItemDO> {
|
||||
* @param mapId
|
||||
*/
|
||||
void deleteByMapId(@Param("mapId") Long mapId);
|
||||
|
||||
/**
|
||||
* 更新车辆编号
|
||||
* @param oldRobotNo
|
||||
* @param newRobotNo
|
||||
*/
|
||||
void updateRobotNo(@Param("oldRobotNo") String oldRobotNo, @Param("newRobotNo") String newRobotNo);
|
||||
|
||||
/**
|
||||
* 释放车辆
|
||||
* @param robotNo
|
||||
*/
|
||||
void clearRobotNo(@Param("robotNo") String robotNo);
|
||||
}
|
||||
|
@ -8,6 +8,7 @@ import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.remote.vo.RemoteControllerInformationPageReqVO;
|
||||
import cn.iocoder.yudao.module.system.dal.dataobject.remote.RemoteControllerInformationDO;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
/**
|
||||
* 远遥设备信息 Mapper
|
||||
@ -33,4 +34,12 @@ public interface RemoteControllerInformationMapper extends BaseMapperX<RemoteCon
|
||||
* @return
|
||||
*/
|
||||
List<String> getRemoteControllerRobotNos();
|
||||
|
||||
/**
|
||||
* 更新车辆编号
|
||||
* @param oldRobotNo
|
||||
* @param newRobotNo
|
||||
*/
|
||||
void updateRobotNo(@Param("oldRobotNo") String oldRobotNo, @Param("newRobotNo") String newRobotNo);
|
||||
|
||||
}
|
@ -38,4 +38,11 @@ public interface RobotMapStopMapper extends BaseMapperX<RobotMapStopDO> {
|
||||
* @param robotNos
|
||||
*/
|
||||
void deleteRobotMapStopByRobotNos(@Param("robotNos") List<String> robotNos);
|
||||
|
||||
/**
|
||||
* 更新车辆编号
|
||||
* @param oldRobotNo
|
||||
* @param newRobotNo
|
||||
*/
|
||||
void updateRobotNo(@Param("oldRobotNo") String oldRobotNo, @Param("newRobotNo") String newRobotNo);
|
||||
}
|
@ -9,6 +9,8 @@ import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
import cn.iocoder.yudao.module.system.controller.admin.wait.vo.*;
|
||||
import cn.iocoder.yudao.module.system.dal.dataobject.wait.MoveToWaitDO;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
/**
|
||||
* 车辆前往等待点记录 Mapper
|
||||
*
|
||||
@ -26,4 +28,10 @@ public interface MoveToWaitMapper extends BaseMapperX<MoveToWaitDO> {
|
||||
.orderByDesc(MoveToWaitDO::getId));
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新车辆编号
|
||||
* @param oldRobotNo
|
||||
* @param newRobotNo
|
||||
*/
|
||||
void updateRobotNo(@Param("oldRobotNo") String oldRobotNo, @Param("newRobotNo") String newRobotNo);
|
||||
}
|
@ -9,13 +9,13 @@ import lombok.Getter;
|
||||
@Getter
|
||||
@AllArgsConstructor
|
||||
public enum DeviceUseStatusEnum {
|
||||
IDLE("IDLE", "空闲"),
|
||||
USEING("USEING", "使用中");
|
||||
IDLE(0, "空闲"),
|
||||
USEING(1, "使用中");
|
||||
|
||||
/**
|
||||
* 类型
|
||||
*/
|
||||
private final String type;
|
||||
private final Integer type;
|
||||
/**
|
||||
* 说明
|
||||
*/
|
||||
|
@ -59,6 +59,7 @@ import java.time.LocalDateTime;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
@ -166,7 +167,7 @@ public class PathPlanningServiceImpl implements PathPlanningService {
|
||||
*/
|
||||
@Override
|
||||
public void synchronousAllItem(PositionMapSaveReqVO data) {
|
||||
log.info("synchronousAllItem----start");
|
||||
log.info("开始同步点位信息");
|
||||
List<PositionMapDO> positionMapDOS = positionMapMapper.selectList(new LambdaQueryWrapperX<PositionMapDO>()
|
||||
.eq(ObjectUtil.isNotEmpty(data.getFloor()), PositionMapDO::getFloor, data.getFloor())
|
||||
.eq(ObjectUtil.isNotEmpty(data.getArea()), PositionMapDO::getArea, data.getArea()));
|
||||
@ -186,11 +187,10 @@ public class PathPlanningServiceImpl implements PathPlanningService {
|
||||
relatedPathNode.setType(PathTypeEnum.INIT.getType());
|
||||
relatedPathNode.setControl_nodes(positionMapItemSynDTOS);
|
||||
|
||||
log.info("synchronousAllItem----doing :{}",JSON.toJSONString(relatedPathNode));
|
||||
commonApi.commonMethod(relatedPathNode, PathPlanningTopicConstant.SYNCHRONOUS_ALL_MAP_NODE);
|
||||
}
|
||||
|
||||
log.info("synchronousAllItem----end");
|
||||
log.info("同步点位信息结束");
|
||||
}
|
||||
|
||||
/**
|
||||
@ -499,6 +499,7 @@ public class PathPlanningServiceImpl implements PathPlanningService {
|
||||
*/
|
||||
@Override
|
||||
public void pathPlanningMovePose(String message) {
|
||||
log.info("车辆即将行走的点位 :{}",message);
|
||||
PathPlanningMovePoseVO robotStatusData = JSON.parseObject(message, PathPlanningMovePoseVO.class);
|
||||
String mac = robotInformationService.getMacByRobotNo(robotStatusData.getRobotNo());
|
||||
String floorAreaKey = RobotTaskChcheConstant.ROBOT_FLOOR_AREA + mac;
|
||||
@ -546,13 +547,14 @@ public class PathPlanningServiceImpl implements PathPlanningService {
|
||||
return;
|
||||
}
|
||||
|
||||
List<PositionMapItemDO> itemDOList = new ArrayList<>();
|
||||
List<PositionMapItemDO> itemDOList = new LinkedList<>();
|
||||
List<PositionMapItemDO> items = positionMapItemService.getPositionMapItemByMapAndType(positionMap.getId(), PositionMapItemEnum.STOP.getType());
|
||||
if (ObjectUtil.isEmpty(items) || items.size() < robots.size()) {
|
||||
if (ObjectUtil.isNotEmpty(items)) {
|
||||
itemDOList.addAll(items);
|
||||
}
|
||||
if ( itemDOList.size() < robots.size()) {
|
||||
List<PositionMapItemDO> itemPoses = positionMapItemService.getPositionMapItemByMapAndType(positionMap.getId(), PositionMapItemEnum.PATH.getType());
|
||||
itemDOList.addAll(itemPoses);
|
||||
} else {
|
||||
itemDOList = items;
|
||||
}
|
||||
|
||||
List<SimulationRobotPoseDTO> simulationList = new ArrayList<>();
|
||||
|
@ -174,7 +174,8 @@ public class PositionMapItemServiceImpl extends ServiceImpl<PositionMapItemMappe
|
||||
public List<PositionMapItemDO> getPositionMapItemByMapAndType(Long mapId, Integer type) {
|
||||
return positionMapItemMapper.selectList(new LambdaQueryWrapperX<PositionMapItemDO>()
|
||||
.eq(PositionMapItemDO::getPositionMapId, mapId)
|
||||
.eq(PositionMapItemDO::getType, type));
|
||||
.eq(PositionMapItemDO::getType, type)
|
||||
.orderByDesc(PositionMapItemDO::getId));
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -587,7 +587,6 @@ public class RemoteControllerInformationServiceImpl extends ServiceImpl<RemoteCo
|
||||
*/
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public RemoteRobotTransferDTO doRobotChangeMode(Integer remoteMode, String remoteIp, String robotNo,int remoteControllerPort,String remoteControllerIp) {
|
||||
log.info("切换模式的车辆 :{}", robotNo);
|
||||
|
||||
//后续判断下,如果协控中,能不能切换模式
|
||||
|
||||
|
@ -50,6 +50,8 @@ import cn.iocoder.yudao.module.system.dal.mysql.positionmap.PositionMapItemMappe
|
||||
import cn.iocoder.yudao.module.system.dal.mysql.positionmap.PositionMapMapper;
|
||||
import cn.iocoder.yudao.module.system.dal.mysql.remote.RemoteControllerInformationMapper;
|
||||
import cn.iocoder.yudao.module.system.dal.mysql.robot.*;
|
||||
import cn.iocoder.yudao.module.system.dal.mysql.statistics.RobotWorkingHoursStatisticsMapper;
|
||||
import cn.iocoder.yudao.module.system.dal.mysql.wait.MoveToWaitMapper;
|
||||
import cn.iocoder.yudao.module.system.enums.common.ZeroOneEnum;
|
||||
import cn.iocoder.yudao.module.system.enums.device.DeviceTypeEnum;
|
||||
import cn.iocoder.yudao.module.system.enums.device.DeviceUseStatusEnum;
|
||||
@ -172,6 +174,14 @@ public class RobotInformationServiceImpl extends ServiceImpl<RobotInformationMap
|
||||
@Resource
|
||||
private RobotCameraService cameraService;
|
||||
|
||||
@Resource
|
||||
private RobotChargeLogMapper chargeLogMapper;
|
||||
|
||||
@Resource
|
||||
private RobotWorkingHoursStatisticsMapper robotWorkingHoursStatisticsMapper;
|
||||
|
||||
@Resource
|
||||
private MoveToWaitMapper moveToWaitMapper;
|
||||
|
||||
@Resource
|
||||
private RemoteControllerInformationMapper controllerInformationMapper;
|
||||
@ -414,16 +424,12 @@ public class RobotInformationServiceImpl extends ServiceImpl<RobotInformationMap
|
||||
|
||||
checkIpAndPort(updateObj);
|
||||
|
||||
if (!updateReqVO.getRobotNo().equals(robotInformationDO.getRobotNo())) {
|
||||
updateRobotNo(robotInformationDO.getRobotNo(),updateReqVO.getRobotNo());
|
||||
}
|
||||
|
||||
informationMapper.updateById(updateObj);
|
||||
|
||||
if (!robotInformationDO.getRobotNo().equals(updateReqVO.getRobotNo())) {
|
||||
List<RobotMapStopDO> robotMapStops = mapStopMapper.selectList(new LambdaQueryWrapperX<RobotMapStopDO>()
|
||||
.eq(RobotMapStopDO::getRobotNo, robotInformationDO.getRobotNo()));
|
||||
if (ObjectUtil.isNotEmpty(robotMapStops)) {
|
||||
robotMapStops.forEach(v -> v.setRobotNo(updateReqVO.getRobotNo()));
|
||||
mapStopMapper.updateById(robotMapStops);
|
||||
}
|
||||
}
|
||||
|
||||
// 更新AGV于地图关系表 -----
|
||||
List<List<Long>> list = CollectionUtils.compareLists(
|
||||
@ -475,6 +481,36 @@ public class RobotInformationServiceImpl extends ServiceImpl<RobotInformationMap
|
||||
commonApi.commonMethod(RobotDimensions, PathPlanningTopicConstant.SEND_ROBOT_DIMENSIONS);
|
||||
}
|
||||
|
||||
/**
|
||||
* 跟新车辆编号
|
||||
* @param oldRobotNo
|
||||
* @param newRobotNo
|
||||
*/
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void updateRobotNo(String oldRobotNo, String newRobotNo) {
|
||||
|
||||
deviceInformationMapper.updateRobotNo(oldRobotNo,newRobotNo);
|
||||
|
||||
controllerInformationMapper.updateRobotNo(oldRobotNo,newRobotNo);
|
||||
|
||||
RobotChargeLogDO robotChargeLog = chargeLogMapper.selectOne(new LambdaQueryWrapperX<RobotChargeLogDO>()
|
||||
.eq(RobotChargeLogDO::getRobotNo, oldRobotNo)
|
||||
.orderByDesc(RobotChargeLogDO::getCreateTime)
|
||||
.last("limit 1"));
|
||||
if (ObjectUtil.isNotEmpty(robotChargeLog)) {
|
||||
robotChargeLog.setRobotNo(newRobotNo);
|
||||
chargeLogMapper.updateById(robotChargeLog);
|
||||
}
|
||||
|
||||
//这表暂时不改
|
||||
// robotWorkingHoursStatisticsMapper
|
||||
mapStopMapper.updateRobotNo(oldRobotNo,newRobotNo);
|
||||
|
||||
moveToWaitMapper.updateRobotNo(oldRobotNo,newRobotNo);
|
||||
|
||||
positionMapItemMapper.updateRobotNo(oldRobotNo,newRobotNo);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void deleteInformation(Long id) {
|
||||
@ -482,6 +518,13 @@ public class RobotInformationServiceImpl extends ServiceImpl<RobotInformationMap
|
||||
validateInformationExists(id);
|
||||
RobotInformationDO robotInformationDO = informationMapper.selectById(id);
|
||||
|
||||
RemoteControllerInformationDO remoteControllerInformation = controllerInformationMapper.selectOne(new LambdaQueryWrapper<RemoteControllerInformationDO>()
|
||||
.eq(RemoteControllerInformationDO::getRobotNo, robotInformationDO.getRobotNo())
|
||||
.last("limit 1"));
|
||||
if (ObjectUtil.isNotEmpty(remoteControllerInformation)) {
|
||||
throw exception(ROBOT_DOING_REMOTE);
|
||||
}
|
||||
|
||||
cameraService.deleteCameraByRobotNo(robotInformationDO.getRobotNo());
|
||||
|
||||
List<RobotTaskDO> list = taskMapper.selectDoingTaskByRobotNo(robotInformationDO.getRobotNo());
|
||||
@ -506,6 +549,9 @@ public class RobotInformationServiceImpl extends ServiceImpl<RobotInformationMap
|
||||
List<RobotDimensionsDTO> RobotDimensions = informationMapper.selectRobotDimensions();
|
||||
commonApi.commonMethod(RobotDimensions, PathPlanningTopicConstant.SEND_ROBOT_DIMENSIONS);
|
||||
|
||||
String pose2dKey = RobotTaskChcheConstant.ROBOT_INFORMATION_POSE_BAT + robotInformationDO.getMacAddress();
|
||||
redisUtil.del(pose2dKey);
|
||||
|
||||
redisUtil.del(key);
|
||||
//地图相关
|
||||
String floorAreaKey = RobotTaskChcheConstant.ROBOT_FLOOR_AREA + robotInformationDO.getMacAddress();
|
||||
@ -516,6 +562,13 @@ public class RobotInformationServiceImpl extends ServiceImpl<RobotInformationMap
|
||||
redisUtil.hdel(oldFloorArea, robotInformationDO.getRobotNo());
|
||||
redisUtil.del(floorAreaKey);
|
||||
}
|
||||
|
||||
deleteRobot(robotInformationDO.getRobotNo());
|
||||
}
|
||||
|
||||
private void deleteRobot(String robotNo) {
|
||||
deviceInformationMapper.clearRobotNo(robotNo);
|
||||
positionMapItemMapper.clearRobotNo(robotNo);
|
||||
}
|
||||
|
||||
public void releaseRobotStop(RobotInformationDO robotInformationDO) {
|
||||
|
@ -48,6 +48,7 @@ import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
@ -207,7 +208,7 @@ public class RobotTaskDetailServiceImpl implements RobotTaskDetailService {
|
||||
informationService.setRobotFree(robotTaskDetailDO.getRobotNo());
|
||||
|
||||
actionLog.setActionStatus(ActionStatusEnum.DONE.getType());
|
||||
taskDetailActionLogService.updateTaskDetailActionLogs(Arrays.asList(actionLog));
|
||||
taskDetailActionLogService.updateTaskDetailActionLogs(Collections.singletonList(actionLog));
|
||||
taskDetailActionLogService.setPreviousTaskDoneByOrderId(taskDetailId);
|
||||
|
||||
if (RobotTaskStageEnum.DONE.getType().equals(taskStage)
|
||||
|
@ -111,7 +111,7 @@ public class AutoChargeServiceImpl implements AutoChargeService {
|
||||
|
||||
List<DeviceInformationDO> deviceInformationDOS = deviceInformationMapper.selectList(new LambdaQueryWrapperX<DeviceInformationDO>()
|
||||
.eq(DeviceInformationDO::getDeviceEnable, ZeroOneEnum.ONE.getType())
|
||||
.eq(DeviceInformationDO::getDeviceUseStatus, DeviceUseStatusEnum.IDLE.getType())
|
||||
.eq(DeviceInformationDO::getDeviceUseStatus, ZeroOneEnum.ZERO.getType())
|
||||
.eq(DeviceInformationDO::getDeviceType, DeviceTypeEnum.CHARGING_STATION.getType()));
|
||||
|
||||
if (ObjectUtil.isEmpty(deviceInformationDOS)) {
|
||||
@ -131,7 +131,7 @@ public class AutoChargeServiceImpl implements AutoChargeService {
|
||||
}
|
||||
List<RobotInformationDO> moveToWaitRobots = getCanLeaveChargingRobots(chargeIngRobots, chargeConfig, robots.size());
|
||||
if (ObjectUtil.isEmpty(moveToWaitRobots)) {
|
||||
log.info("充电中的车辆未充满电");
|
||||
log.info("充电中的车辆未达到离开的阀值");
|
||||
return;
|
||||
}
|
||||
robotPathPlanningService.moveRobotToWait(moveToWaitRobots);
|
||||
@ -213,6 +213,7 @@ public class AutoChargeServiceImpl implements AutoChargeService {
|
||||
|
||||
Boolean adequateBatteryCapacity = remainingElectricityBigger(chargeConfig, robot);
|
||||
if (adequateBatteryCapacity) {
|
||||
robot.setRobotStatus(RobotStatusEnum.STAND_BY.getType());
|
||||
String socKey = RobotTaskChcheConstant.ROBOT_INFORMATION_SOC + robot.getMacAddress();
|
||||
Object o = redisUtil.get(socKey);
|
||||
Integer soc = ObjectUtil.isEmpty(o) ? 0 : Integer.parseInt(o.toString());
|
||||
|
@ -119,7 +119,6 @@ public class RobotPathPlanningServiceImpl implements RobotPathPlanningService {
|
||||
public void sendTaskToPP() {
|
||||
TenantContextHolder.setTenantId(1L);
|
||||
|
||||
log.info("-------循环任务开始查找车子和任务------");
|
||||
Pair<List<RobotInformationDO>, List<RobotTaskDetailDO>> robotAndTaskDetails =
|
||||
distributeTasksService.getRobotAndTaskDetails();
|
||||
|
||||
@ -218,19 +217,20 @@ public class RobotPathPlanningServiceImpl implements RobotPathPlanningService {
|
||||
List<PositionMapItemDO> robotMapItems = new ArrayList<>();
|
||||
if (ObjectUtil.isNotEmpty(existMapItems)) {
|
||||
|
||||
for (PositionMapItemDO positionMapItem : positionMapItems) {
|
||||
robotNos.removeIf(v -> v.equals(positionMapItem.getRobotNo()));
|
||||
if (UseStatusEnum.USEING.getType().equals(positionMapItem.getUseStatus())) {
|
||||
continue;
|
||||
for (PositionMapItemDO positionMapItem : existMapItems) {
|
||||
if (ObjectUtil.isEmpty(robots)) {
|
||||
break;
|
||||
}
|
||||
robotNos.removeIf(v -> v.equals(positionMapItem.getRobotNo()));
|
||||
positionMapItem.setUseStatus(UseStatusEnum.PRE_OCCUPANCY.getType());
|
||||
robotMapItems.add(positionMapItem);
|
||||
positionMapItems.removeIf(v -> v.getId().equals(positionMapItem.getId()));
|
||||
}
|
||||
}
|
||||
|
||||
if (ObjectUtil.isNotEmpty(robotNos)) {
|
||||
List<PositionMapItemDO> emptyMapItems = positionMapItems.stream()
|
||||
.filter(v -> ObjectUtil.isEmpty(v.getRobotNo()))
|
||||
.filter(v -> UseStatusEnum.FREE.getType().equals(v.getUseStatus()))
|
||||
.collect(Collectors.toList());
|
||||
if (ObjectUtil.isNotEmpty(emptyMapItems)) {
|
||||
for (PositionMapItemDO positionMapItem : emptyMapItems) {
|
||||
@ -250,11 +250,8 @@ public class RobotPathPlanningServiceImpl implements RobotPathPlanningService {
|
||||
return;
|
||||
}
|
||||
|
||||
Map<String, PositionMapItemDO> positionMap =
|
||||
robotMapItems.stream().collect(Collectors.toMap(PositionMapItemDO::getRobotNo, Function.identity()));
|
||||
Map<Long, Long> sortMap = positionMapItems.stream().collect(Collectors.toMap(PositionMapItemDO::getId, PositionMapItemDO::getSortNum));
|
||||
|
||||
|
||||
//机器人不能行走的区域
|
||||
List<TaskRobotNoLimittationAreaDTO> robotNoLimitationArea = getRobotNoLimitationArea(robots);
|
||||
Map<String, TaskRobotNoLimittationAreaDTO> robotNoLimittationAreaDTOMap =
|
||||
@ -296,7 +293,7 @@ public class RobotPathPlanningServiceImpl implements RobotPathPlanningService {
|
||||
.build();
|
||||
|
||||
TaskRobotNoLimittationAreaDTO taskRobotNoLimittationAreaDTO = robotNoLimittationAreaDTOMap.get(v.getRobotNo());
|
||||
List<TaskRobotNoLimittationAreaDTO> robotNoLimitions = Arrays.asList(taskRobotNoLimittationAreaDTO);
|
||||
List<TaskRobotNoLimittationAreaDTO> robotNoLimitions = Collections.singletonList(taskRobotNoLimittationAreaDTO);
|
||||
pathPlanning.setRobotNoLimitationAreaDTOS(robotNoLimitions);
|
||||
|
||||
String key = PathPlanningChcheConstant.PATH_PLANNING_TASK + pathPlanning.getOrderId();
|
||||
|
@ -1,5 +1,7 @@
|
||||
package cn.iocoder.yudao.module.system.service.tool;
|
||||
|
||||
import cn.iocoder.yudao.module.system.controller.admin.tool.dto.SendMsgToMqttDTO;
|
||||
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import javax.validation.Valid;
|
||||
import javax.validation.constraints.NotBlank;
|
||||
@ -14,4 +16,10 @@ public interface ToolsService {
|
||||
String updateWarnCode();
|
||||
|
||||
void simulationPose();
|
||||
|
||||
/**
|
||||
* 发送消息给MQTT
|
||||
* @param dto
|
||||
*/
|
||||
void sendMsgToMQTT(SendMsgToMqttDTO dto);
|
||||
}
|
||||
|
@ -14,6 +14,7 @@ import cn.iocoder.yudao.module.system.constant.robot.RobotTopicConstant;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.config.dto.TaskOrderConfigDTO;
|
||||
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.controller.admin.tool.dto.SendMsgToMqttDTO;
|
||||
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;
|
||||
@ -244,6 +245,11 @@ public class ToolsServiceImpl implements ToolsService {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendMsgToMQTT(SendMsgToMqttDTO dto) {
|
||||
commonApi.commonMethodStr(dto.getMsg(),dto.getTopic());
|
||||
}
|
||||
|
||||
|
||||
public void addWarnMsg() {
|
||||
RobotWarnMsgDO warnMsg = RobotWarnMsgDO.builder().warnLevel(4)
|
||||
|
@ -36,4 +36,26 @@
|
||||
where
|
||||
position_map_id = #{mapId}
|
||||
</update>
|
||||
|
||||
<update id="updateRobotNo">
|
||||
update
|
||||
device_information
|
||||
set
|
||||
last_user = #{newRobotNo}
|
||||
where
|
||||
last_user = #{oldRobotNo}
|
||||
and deleted = '0'
|
||||
and device_type = '1'
|
||||
</update>
|
||||
<update id="clearRobotNo">
|
||||
update
|
||||
device_information
|
||||
set
|
||||
last_user = '',
|
||||
device_use_status = '0'
|
||||
where
|
||||
last_user = #{robotNo}
|
||||
and deleted = '0'
|
||||
and device_type = '1'
|
||||
</update>
|
||||
</mapper>
|
@ -158,4 +158,24 @@
|
||||
set deleted = 1
|
||||
where position_map_id = #{mapId}
|
||||
</update>
|
||||
|
||||
<update id="updateRobotNo">
|
||||
update
|
||||
ware_position_map_item
|
||||
set
|
||||
robot_no = #{newRobotNo}
|
||||
where
|
||||
robot_no = #{oldRobotNo}
|
||||
and deleted = '0'
|
||||
</update>
|
||||
<update id="clearRobotNo">
|
||||
update
|
||||
ware_position_map_item
|
||||
set
|
||||
robot_no = '',
|
||||
use_status = '0'
|
||||
where
|
||||
robot_no = #{robotNo}
|
||||
and deleted = '0'
|
||||
</update>
|
||||
</mapper>
|
||||
|
@ -1,6 +1,15 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="cn.iocoder.yudao.module.system.dal.mysql.remote.RemoteControllerInformationMapper">
|
||||
<update id="updateRobotNo">
|
||||
update
|
||||
remote_controller_information
|
||||
set
|
||||
robot_no = #{newRobotNo}
|
||||
where
|
||||
robot_no = #{oldRobotNo}
|
||||
and deleted = '0'
|
||||
</update>
|
||||
|
||||
<!--
|
||||
一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
|
||||
|
@ -1,6 +1,15 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="cn.iocoder.yudao.module.system.dal.mysql.robot.RobotMapStopMapper">
|
||||
<update id="updateRobotNo">
|
||||
update
|
||||
robot_map_stop
|
||||
set
|
||||
robot_no = #{newRobotNo}
|
||||
where
|
||||
robot_no = #{oldRobotNo}
|
||||
and deleted = '0'
|
||||
</update>
|
||||
|
||||
<!--
|
||||
一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
|
||||
|
@ -9,4 +9,13 @@
|
||||
文档可见:https://www.iocoder.cn/MyBatis/x-plugins/
|
||||
-->
|
||||
|
||||
<update id="updateRobotNo">
|
||||
update
|
||||
robot_move_to_wait
|
||||
set
|
||||
robot_no = #{newRobotNo}
|
||||
where
|
||||
robot_no = #{oldRobotNo}
|
||||
and deleted = '0'
|
||||
</update>
|
||||
</mapper>
|
Loading…
Reference in New Issue
Block a user