障碍物 信号上报

This commit is contained in:
cbs 2025-05-13 09:04:49 +08:00
parent 8e8643c23a
commit 6966fe9b4c
19 changed files with 237 additions and 13 deletions

View File

@ -147,6 +147,8 @@ public class MqttFactory {
return BeanUtils.getBean(RobotUpdatePalletHeightServiceImpl.class);
case ROBOT_OBSTACLES_STATUS:
return BeanUtils.getBean(RobotObstaclesStatusServiceImpl.class);
case ROBOT_WIRELESS_SIGNAL_STATUS:
return BeanUtils.getBean(RobotWirelessSignalStatusServiceImpl.class);
case PLANNING_INIT_DATA:
return BeanUtils.getBean(PathPlanningInitDataServiceImpl.class);
case PLANNING_DISTRIBUTION_TASK:

View File

@ -22,6 +22,7 @@ public enum DefineSubTopicEnum {
ROBOT_WORK_STATUS("ROBOT_WORK_STATUS", 2,"作业实时行为上报"),
ROBOT_UPDATE_PALLET_HEIGHT("UPDATE_PALLET_HEIGHT", 2,"放货后货物高度反馈和取货后货物高度反馈"),
ROBOT_OBSTACLES_STATUS("ROBOT_OBSTACLES_STATUS", 2,"障碍物状态上报"),
ROBOT_WIRELESS_SIGNAL_STATUS("ROBOT_WIRELESS_SIGNAL_STATUS", 2,"信号强度上报"),
PLANNING_INIT_DATA("SYNCHRONOUS_ALL_MAP_REQUEST", 2,"路径规划需要初始数据上报"),
PLANNING_DISTRIBUTION_TASK("TASK_ASSIGNMENT_FEEDBACK", 2,"路径规划任务分配上报"),
PLANNING_DISTRIBUTION_FAIL("TASK_ASSIGNMENT_FAIL", 2,"路径规划失败上报"),

View File

@ -0,0 +1,22 @@
package cn.iododer.yudao.module.mqtt.service;
import cn.iocoder.yudao.module.remote.api.path.RemotePathApi;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
@Slf4j
@Service
public class RobotWirelessSignalStatusServiceImpl implements MqttService{
@Resource
private RemotePathApi remotePathApi;
@Override
public void analysisMessage(String message) {
log.info("车辆信号上报 :{}",message);
remotePathApi.wirelessSignalStatus(message);
}
}

View File

@ -16,4 +16,7 @@ public interface RemotePathApi {
@Operation(summary = "远遥同步车辆导航行走路程信息")
void remoteDistanceInformation(@RequestParam("message") String message);
@PostMapping(PREFIX + "/wirelessSignalStatus")
@Operation(summary = "车辆信号信息")
void wirelessSignalStatus(@RequestParam("message") String message);
}

View File

@ -0,0 +1,15 @@
package cn.iocoder.yudao.module.remote.api.path.dto;
import lombok.Data;
@Data
public class RemoteRobotWirelessSignalDTO {
private String mac;
/**
* 整型单位dBm
*/
private String wirelessSignal;
}

View File

@ -1,6 +1,7 @@
package cn.iocoder.yudao.module.remote.api.path;
import cn.iocoder.yudao.module.remote.api.path.dto.RemoteRobotDistanceInformationDTO;
import cn.iocoder.yudao.module.remote.api.path.dto.RemoteRobotWirelessSignalDTO;
import cn.iocoder.yudao.module.remote.service.robot.RemoteRobotService;
import cn.iocoder.yudao.module.remote.util.redis.RedisUtil;
import com.alibaba.fastjson.JSON;
@ -31,5 +32,15 @@ public class RemotePathApiImpl implements RemotePathApi{
remoteRobotService.remoteDistanceInformation(data);
}
/**
* 车辆信号信息
* @param message
*/
@Override
public void wirelessSignalStatus(String message) {
RemoteRobotWirelessSignalDTO data = JSON.parseObject(message, RemoteRobotWirelessSignalDTO.class);
remoteRobotService.sendRobotWirelessSignalStatus(data);
}
}

View File

@ -8,4 +8,6 @@ public class RobotTaskChcheConstant {
//机器人编号和mac地址映射(通过机器人编号查询mac地址) (拼接的是机器人编号)
public static String ROBOT_GET_MAC_BY_NO = "robot:information:getMac:ByNo";
//机器人mac地址和机器人编号映射(通过mac地址查询机器人编号) (拼接的是mac地址)
public static String ROBOT_GET_ROBOTNO_BY_MAC = "robot:information:getRobotNo:ByMac";
}

View File

@ -1,6 +1,7 @@
package cn.iocoder.yudao.module.remote.service.robot;
import cn.iocoder.yudao.module.remote.api.path.dto.RemoteRobotDistanceInformationDTO;
import cn.iocoder.yudao.module.remote.api.path.dto.RemoteRobotWirelessSignalDTO;
import cn.iocoder.yudao.module.remote.controller.admin.robot.dto.PositionMapRespDTO;
import cn.iocoder.yudao.module.remote.controller.admin.robot.dto.RemoteRobotChangeModeDTO;
import cn.iocoder.yudao.module.remote.controller.admin.robot.dto.RemoteRobotTaskDoneDTO;
@ -76,4 +77,10 @@ public interface RemoteRobotService {
* @param data
*/
void remoteDistanceInformation(RemoteRobotDistanceInformationDTO data);
/**
* 上报车辆信号信息
* @param data
*/
void sendRobotWirelessSignalStatus(RemoteRobotWirelessSignalDTO data);
}

View File

@ -5,6 +5,7 @@ import cn.hutool.json.JSONUtil;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder;
import cn.iocoder.yudao.module.remote.api.path.dto.RemoteRobotDistanceInformationDTO;
import cn.iocoder.yudao.module.remote.api.path.dto.RemoteRobotWirelessSignalDTO;
import cn.iocoder.yudao.module.remote.api.robot.RemoteControllerProcessor;
import cn.iocoder.yudao.module.remote.api.webSocket.RequestProcessor;
import cn.iocoder.yudao.module.remote.constant.robot.RobotTaskChcheConstant;
@ -207,6 +208,21 @@ public class RemoteRobotServiceImpl implements RemoteRobotService {
mac, JSONUtil.toJsonStr(build));
}
/**
* 上报车辆信息信息
* @param data
*/
@Override
public void sendRobotWirelessSignalStatus(RemoteRobotWirelessSignalDTO data) {
TenantContextHolder.setTenantId(1L);
String robotNo = (String) redisUtil.get(RobotTaskChcheConstant.ROBOT_GET_ROBOTNO_BY_MAC + data.getMac());
if (ObjectUtil.isEmpty(robotNo)) {
robotNo = remoteRobotApi.getRobotNoByMac(data.getMac());
}
log.info("车辆编号 :{}",robotNo);
}
/**
* 组装
*

View File

@ -62,4 +62,8 @@ public interface RemoteRobotApi {
@PostMapping(PREFIX + "/getMacByRobotNo")
@Operation(summary = "根据车辆编号获取MAC地址")
String getMacByRobotNo( @RequestParam(value = "robotNo") String robotNo);
@PostMapping(PREFIX + "/getRobotNoByMac")
@Operation(summary = "根据车辆MAC地址获取车辆编号")
String getRobotNoByMac( @RequestParam(value = "mac") String mac);
}

View File

@ -14,4 +14,29 @@ public class RobotObstaclesStatusDTO {
* true表示有障碍物false表示没有障碍物
*/
public Boolean obstacles;
/**
* 左前方障碍物距离 float单位是米
*/
private String frontLeft;
/**
* 右前方障碍物距离 float单位是米
*/
private String frontRight;
/**
* 左后方障碍物距离 float单位是米
*/
private String reaLeft;
/**
* 右后方障碍物距离 float单位是米
*/
private String reaRight;
/**
* 正后方障碍物距离 float单位是米
*/
private String rearCenter;
}

View File

@ -142,5 +142,10 @@ public class RemoteRobotApiImpl implements RemoteRobotApi {
return robotInformationService.getMacByRobotNo(robotNo);
}
@Override
public String getRobotNoByMac(String mac) {
return robotInformationService.getRobotNoByMac(mac);
}
}

View File

@ -51,7 +51,6 @@ public class RobotObstaclesStatusApiImpl implements RobotObstaclesStatusApi{
Object floorAreaObject = redisUtil.get(floorAreaKey);
FloorZoneDTO floorZoneDTO = JSONUtil.toBean((String) floorAreaObject, FloorZoneDTO.class);
String robotNo = robotInformationService.getRobotNoByMac(data.getMac());
RobotWarnMsgSaveReqVO warnMsg = new RobotWarnMsgSaveReqVO();

View File

@ -6,10 +6,7 @@ import cn.iocoder.yudao.framework.common.pojo.PageParam;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
import cn.iocoder.yudao.module.system.controller.admin.houselocation.vo.WareHouseLocationPageReqVO;
import cn.iocoder.yudao.module.system.controller.admin.houselocation.vo.WareHouseLocationRespVO;
import cn.iocoder.yudao.module.system.controller.admin.houselocation.vo.WareHouseLocationSaveReqVO;
import cn.iocoder.yudao.module.system.controller.admin.houselocation.vo.WareHouseLocationVO;
import cn.iocoder.yudao.module.system.controller.admin.houselocation.vo.*;
import cn.iocoder.yudao.module.system.dal.dataobject.houselocation.WareHouseLocationDO;
import cn.iocoder.yudao.module.system.service.houselocation.HouseLocationService;
import io.swagger.v3.oas.annotations.Operation;
@ -123,4 +120,12 @@ public class WareHouseLocationController {
houseLocationService.updateHouseLocationList(list);
return success(true);
}
@GetMapping("/getLocationsXYByMapId")
@Operation(summary = "根据地图id查询此地图对应的所有库位,包括库位坐标")
@Parameter(name = "mapId", description = "地图id", required = true, example = "1024")
public CommonResult<List<WareHouseLocationItemRespVO>> getLocationsXYByMapId(@RequestParam("mapId") Long mapId) {
List<WareHouseLocationItemRespVO> list = houseLocationService.getLocationsXYByMapId(mapId);
return success(list);
}
}

View File

@ -0,0 +1,63 @@
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.Data;
import java.math.BigDecimal;
@Schema(description = "管理后台 - 库位和坐标 Response VO")
@Data
public class WareHouseLocationItemRespVO {
@Schema(description = "主键ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "31866")
private Long id;
@Schema(description = "库位编号")
private String locationNo;
@Schema(description = "物料信息")
private String skuInfo;
@Schema(description = "物料数量")
private Long skuNumber;
@Schema(description = "启用/禁用0禁用、1启用")
private Integer locationEnable;
@Schema(description = "锁定/正常0锁定、1正常")
private Integer locationLock;
@Schema(description = "状态0空闲、1占用", example = "2")
private Integer locationUseStatus;
@Schema(description = "宽度")
private BigDecimal locationWide;
@Schema(description = "长度")
private BigDecimal locationDeep;
@Schema(description = "层数")
private Integer locationStorey;
@Schema(description = "实际坐标x轴")
private String actualLocationX;
@Schema(description = "实际坐标y轴")
private String actualLocationY;
}

View File

@ -3,6 +3,7 @@ package cn.iocoder.yudao.module.system.dal.mysql.houselocation;
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.houselocation.vo.WareHouseLocationItemRespVO;
import cn.iocoder.yudao.module.system.controller.admin.houselocation.vo.WareHouseLocationPageReqVO;
import cn.iocoder.yudao.module.system.controller.admin.houselocation.vo.WareHouseLocationRespVO;
import cn.iocoder.yudao.module.system.controller.admin.houselocation.vo.WareHouseLocationVO;
@ -161,4 +162,11 @@ public interface WareHouseLocationMapper extends BaseMapperX<WareHouseLocationDO
*/
List<WareHouseLocationDO> queryLowerLevelsByMapItemId(@Param("mapItemId") Long mapItemId,
@Param("locationStorey") Integer locationStorey);
/**
* 获取这个地图对应的库位和坐标信息
* @param mapId
* @return
*/
List<WareHouseLocationItemRespVO> getLocationsXYByMapId(@Param("mapId") Long mapId);
}

View File

@ -1,10 +1,7 @@
package cn.iocoder.yudao.module.system.service.houselocation;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.system.controller.admin.houselocation.vo.WareHouseLocationPageReqVO;
import cn.iocoder.yudao.module.system.controller.admin.houselocation.vo.WareHouseLocationRespVO;
import cn.iocoder.yudao.module.system.controller.admin.houselocation.vo.WareHouseLocationSaveReqVO;
import cn.iocoder.yudao.module.system.controller.admin.houselocation.vo.WareHouseLocationVO;
import cn.iocoder.yudao.module.system.controller.admin.houselocation.vo.*;
import cn.iocoder.yudao.module.system.dal.dataobject.houselocation.WareHouseLocationDO;
import com.baomidou.mybatisplus.extension.service.IService;
@ -119,4 +116,11 @@ public interface HouseLocationService extends IService<WareHouseLocationDO> {
* @param id
*/
void updateLocationAreaNameEmptyByAreaId(Long areaId);
/**
* 获取这个地图对应的库位和坐标信息
* @param mapId
* @return
*/
List<WareHouseLocationItemRespVO> getLocationsXYByMapId(Long mapId);
}

View File

@ -6,10 +6,7 @@ import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
import cn.iocoder.yudao.module.system.api.robot.vo.RobotInformationVO;
import cn.iocoder.yudao.module.system.controller.admin.houselocation.vo.WareHouseLocationPageReqVO;
import cn.iocoder.yudao.module.system.controller.admin.houselocation.vo.WareHouseLocationRespVO;
import cn.iocoder.yudao.module.system.controller.admin.houselocation.vo.WareHouseLocationSaveReqVO;
import cn.iocoder.yudao.module.system.controller.admin.houselocation.vo.WareHouseLocationVO;
import cn.iocoder.yudao.module.system.controller.admin.houselocation.vo.*;
import cn.iocoder.yudao.module.system.controller.admin.log.vo.UserOperationLogSaveReqVO;
import cn.iocoder.yudao.module.system.dal.dataobject.houselocation.WareHouseLocationDO;
import cn.iocoder.yudao.module.system.dal.mysql.houselocation.WareHouseLocationMapper;
@ -186,6 +183,16 @@ public class HouseLocationServiceImpl extends ServiceImpl<WareHouseLocationMappe
houseLocationMapper.updateLocationAreaNameEmptyByAreaId(areaId);
}
/**
* 获取这个地图对应的库位和坐标信息
* @param mapId
* @return
*/
@Override
public List<WareHouseLocationItemRespVO> getLocationsXYByMapId(Long mapId) {
return houseLocationMapper.getLocationsXYByMapId(mapId);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void updateHouseLocationList(List<WareHouseLocationSaveReqVO> list) {

View File

@ -894,4 +894,29 @@
</where>
</select>
<select id="getLocationsXYByMapId"
resultType="cn.iocoder.yudao.module.system.controller.admin.houselocation.vo.WareHouseLocationItemRespVO">
SELECT
t1.id,
t1.location_no as locationNo,
t1.sku_info as skuInfo,
t1.sku_number as skuNumber,
t1.location_enable as locationEnable,
t1.location_lock as locationLock,
t1.location_use_status as locationUseStatus,
t1.location_wide as locationWide,
t1.location_deep as locationDeep,
t1.location_storey as locationStorey,
t2.actual_location_x as actualLocationX,
t2.actual_location_y as actualLocationY
FROM
ware_house_location t1
LEFT JOIN ware_position_map_item t2
on t1.map_item_id = t2.id
WHERE
t1.deleted = '0'
AND t2.deleted = '0'
AND t1.map_id = #{mapId}
</select>
</mapper>