库位编号和避障

This commit is contained in:
cbs 2025-07-04 16:35:39 +08:00
parent 6185142197
commit 7a11ac04bd
11 changed files with 63 additions and 7 deletions

View File

@ -111,6 +111,7 @@ public class PositionMapLineDTO {
@Schema(description = "发送给路径规划 车头朝向(0正 1反 2随)", example = "15890")
private Integer ppToward;
private Integer collisionAvoidanceFlag;
private static final List<Integer> ANTI_LIST = Arrays.asList(1, 3, 6);
private static final List<Integer> WHATEVER_LIST = Arrays.asList(4, 7, 8);

View File

@ -71,8 +71,8 @@ public class MqttUtils {
return;
}
if (message.length() > 510) {
log.info("111111发送的主题 :{}, 内容 :{}",topic, message.substring(0, 500));
if (message.length() > 1010) {
log.info("111111发送的主题 :{}, 内容 :{}",topic, message.substring(0, 1000));
}else {
log.info("111111发送的主题 :{}, 内容 :{}",topic, message);
}

View File

@ -36,4 +36,7 @@ public class PositionMapPageReqVO extends PageParam {
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] createTime;
@Schema(description = "库位编号排序")
private Long locationNoSort;
}

View File

@ -40,4 +40,7 @@ public class PositionMapRespVO {
@ExcelProperty("创建时间")
private LocalDateTime createTime;
@Schema(description = "库位编号排序")
private Long locationNoSort;
}

View File

@ -25,4 +25,6 @@ public class PositionMapSaveReqVO {
@Schema(description = "AGV地图yaml路径")
private String yamlUrl;
@Schema(description = "库位编号排序")
private Long locationNoSort;
}

View File

@ -47,4 +47,9 @@ public class PositionMapDO extends BaseDO {
*/
private String yamlUrl;
/**
* 库位编号排序
*/
private Long locationNoSort;
}

View File

@ -8,8 +8,10 @@ import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
import cn.iocoder.yudao.module.system.controller.admin.houselocation.vo.WareHouseLocationRespVO;
import cn.iocoder.yudao.module.system.controller.admin.positionmap.dto.NodeBaseDTO;
import cn.iocoder.yudao.module.system.dal.dataobject.houselocation.WareHouseLocationDO;
import cn.iocoder.yudao.module.system.dal.dataobject.positionmap.PositionMapDO;
import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotTaskDetailDO;
import cn.iocoder.yudao.module.system.service.houselocation.HouseLocationService;
import cn.iocoder.yudao.module.system.service.positionmap.PositionMapService;
import cn.iocoder.yudao.module.system.service.robot.RobotTaskDetailService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
@ -28,6 +30,7 @@ import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionU
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList;
import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*;
import static com.baomidou.mybatisplus.core.toolkit.IdWorker.getId;
@Slf4j
@Component
public class HouseLocationStrategyImpl implements NodeProcessingStrategy {
@ -38,6 +41,9 @@ public class HouseLocationStrategyImpl implements NodeProcessingStrategy {
@Lazy
private RobotTaskDetailService taskDetailService;
@Resource
private PositionMapService positionMapService;
//库位编号格式 - 第一个通配符为地图id 第二个通配符为随机数四位最后一个通配符为库位点层数
private static final String KW_NO_FORMAT = "KW-%s-%s-%s";
@ -47,6 +53,9 @@ public class HouseLocationStrategyImpl implements NodeProcessingStrategy {
// -- 将data里面的json 数据转为实体类 - 再对比节点id - 然后做新增删除修改操作
List<WareHouseLocationDO> newList = new ArrayList<>();
PositionMapDO positionMap = positionMapService.getPositionMap(positionMapId);
Long locationNoSort = positionMap.getLocationNoSort();
for (NodeBaseDTO item : nodeBaseDTOS) {
if (item.getId() == null) {
item.setId(getId());
@ -55,11 +64,30 @@ public class HouseLocationStrategyImpl implements NodeProcessingStrategy {
// -- 如果是库位点 - 可能是一对多情况 - 需要将多个库位点的id set进去
List<WareHouseLocationDO> wareHouseLocationDOS = JSONUtil.toList(item.getDataJson(), WareHouseLocationDO.class);
// -- 筛选出 库位编号不为空 - 并且第最后一组数据 最大的值 - 如果没有则为0
int max = wareHouseLocationDOS.stream().map(WareHouseLocationDO::getLocationNo).filter(StrUtil::isNotEmpty)
.mapToInt(s -> Integer.parseInt(s.substring(s.length() - 1))).max().orElse(1);
boolean isNew = wareHouseLocationDOS.stream().allMatch(v -> ObjectUtil.isEmpty(v.getLocationNo()));
// int max = wareHouseLocationDOS.stream().map(WareHouseLocationDO::getLocationNo).filter(StrUtil::isNotEmpty)
// .mapToInt(s -> Integer.parseInt(s.substring(s.length() - 1))).max().orElse(1);
// boolean isNew = wareHouseLocationDOS.stream().allMatch(v -> ObjectUtil.isEmpty(v.getLocationNo()));
int max = 1;
boolean isNew = true;
Long randomNumber = locationNoSort;
for (WareHouseLocationDO wareHouseLocation : wareHouseLocationDOS) {
if (ObjectUtil.isEmpty(wareHouseLocation.getLocationNo())) {
continue;
}
isNew = false;
int i = Integer.parseInt(wareHouseLocation.getLocationNo().substring(wareHouseLocation.getLocationNo().length() - 1));
if (i > max) {
max = i;
}
String[] split = wareHouseLocation.getLocationNo().split("-");
randomNumber = Long.valueOf(split[split.length - 2]);
}
if (!isNew) {
max = max + 1;
} else {
locationNoSort = locationNoSort + 1L;
}
Long locationNumber = null;
if (ObjectUtil.isNotEmpty(item.getLocationNumber())) {
@ -79,7 +107,8 @@ public class HouseLocationStrategyImpl implements NodeProcessingStrategy {
if (StrUtil.isEmpty(wareHouseLocationDO.getLocationNo())) {
wareHouseLocationDO.setLocationStorey(max);
// -- 生成库位编号 -
String locationNo = String.format(KW_NO_FORMAT, positionMapId, RandomUtil.randomNumbers(4), max++);
// String locationNo = String.format(KW_NO_FORMAT, positionMapId, RandomUtil.randomNumbers(4), max++);
String locationNo = String.format(KW_NO_FORMAT, positionMapId, randomNumber, max++);
wareHouseLocationDO.setLocationNo(locationNo);
}
wareHouseLocationDO.setMapId(positionMapId);
@ -101,6 +130,7 @@ public class HouseLocationStrategyImpl implements NodeProcessingStrategy {
checkLocationHaveDoingTask(list);
}*/
positionMapService.updateNoSort(positionMap.getId(),locationNoSort);
houseLocationService.batchSaveOrEditOrDel(positionMapId, list);
}

View File

@ -741,6 +741,7 @@ public class PathPlanningServiceImpl implements PathPlanningService {
.actualEndPointY(positionMapLineDO.getActualStartPointY())
.actualStartPointX(positionMapLineDO.getActualEndPointX())
.actualStartPointY(positionMapLineDO.getActualEndPointY())
.collisionAvoidanceFlag(positionMapLineDO.getCollisionAvoidanceFlag())
.build();
return build;
}

View File

@ -125,4 +125,6 @@ public interface PositionMapService extends IService<PositionMapDO> {
* @return
*/
String getMapFileNameByFloorAndAreaName(Long floor, String areaId);
void updateNoSort(Long id, Long locationNoSort);
}

View File

@ -577,6 +577,14 @@ public class PositionMapServiceImpl extends ServiceImpl<PositionMapMapper, Posit
return pngUrl.substring(start, end);
}
@Override
public void updateNoSort(Long id, Long locationNoSort) {
PositionMapDO data = new PositionMapDO();
data.setId(id);
data.setLocationNoSort(locationNoSort);
positionMapMapper.updateById(data);
}
private List<RemoteRobotDTO> getRemoteSingleMapInfomation(Map<String, RobotInformationDO> robotMap, List<String> robotNos,
Map<String, RobotDoingTaskDTO> robotDoingTaskMap,
Map<String, RemoteControllerInformationDO> remoteMap) {

View File

@ -152,7 +152,8 @@
actual_begin_control_x,
actual_begin_control_y,
actual_end_control_x,
actual_end_control_y
actual_end_control_y,
collision_avoidance_flag
</sql>
<!--统计总行数-->