From 612dcce81f6024fe2731f6ffa90ad4762b580c56 Mon Sep 17 00:00:00 2001 From: aikai Date: Wed, 11 Jun 2025 10:57:50 +0800 Subject: [PATCH] =?UTF-8?q?feat(positionmap):=20=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E7=BA=BF=E8=B7=AF=E4=BF=9D=E5=AD=98=E6=97=B6=E8=87=AA=E5=8A=A8?= =?UTF-8?q?=E5=A1=AB=E5=85=85=E7=82=B9=E4=BD=8D=E5=BA=8F=E5=8F=B7=E5=8A=9F?= =?UTF-8?q?=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在 PositionMapItemMapper 中添加 selectSortNumByIds 方法,用于批量获取点位序号- 在 PositionMapLineSaveReqVO 中注释掉不必要的字段 - 在 PositionMapLineServiceImpl 中实现自动填充点位序号的逻辑 --- .../vo/PositionMapLineSaveReqVO.java | 22 ++++++------ .../positionmap/PositionMapItemMapper.java | 10 ++++++ .../PositionMapLineServiceImpl.java | 34 +++++++++++++++++-- .../positionmap/PositionMapItemMapper.xml | 12 +++++++ 4 files changed, 65 insertions(+), 13 deletions(-) diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/positionmap/vo/PositionMapLineSaveReqVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/positionmap/vo/PositionMapLineSaveReqVO.java index e37e9f4ba..532646b87 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/positionmap/vo/PositionMapLineSaveReqVO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/positionmap/vo/PositionMapLineSaveReqVO.java @@ -87,17 +87,17 @@ public class PositionMapLineSaveReqVO { @Schema(description = "膨胀区域右", example = "15890") private BigDecimal expansionZoneRight; - @Schema(description = "起点宽") - private BigDecimal beginWidth; - - @Schema(description = "起点高") - private BigDecimal beginHigh; - - @Schema(description = "终点宽") - private BigDecimal endWidth; - - @Schema(description = "终点高") - private BigDecimal endHigh; +// @Schema(description = "起点宽") +// private BigDecimal beginWidth; +// +// @Schema(description = "起点高") +// private BigDecimal beginHigh; +// +// @Schema(description = "终点宽") +// private BigDecimal endWidth; +// +// @Schema(description = "终点高") +// private BigDecimal endHigh; @Schema(description = "行走方法 0.直线 1.曲线") private Integer method; diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/positionmap/PositionMapItemMapper.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/positionmap/PositionMapItemMapper.java index ff6e9dfb0..9cfc0a128 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/positionmap/PositionMapItemMapper.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/positionmap/PositionMapItemMapper.java @@ -8,10 +8,12 @@ import cn.iocoder.yudao.module.mqtt.api.task.dto.Pose2ds; import cn.iocoder.yudao.module.system.controller.admin.positionmap.dto.RobotPositionMapDTO; import cn.iocoder.yudao.module.system.controller.admin.positionmap.vo.PositionMapItemPageReqVO; import cn.iocoder.yudao.module.system.dal.dataobject.positionmap.PositionMapItemDO; +import org.apache.ibatis.annotations.MapKey; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import java.util.List; +import java.util.Map; /** * 仓库点位地图子表 Mapper @@ -87,4 +89,12 @@ public interface PositionMapItemMapper extends BaseMapperX { * @param robotNo */ void clearRobotNo(@Param("robotNo") String robotNo); + + /** + * + * @param ids + * @return + */ + @MapKey("id") + Map selectSortNumByIds(@Param("ids") List ids); } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/positionmap/PositionMapLineServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/positionmap/PositionMapLineServiceImpl.java index a88859c7f..f30a5a0c1 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/positionmap/PositionMapLineServiceImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/positionmap/PositionMapLineServiceImpl.java @@ -1,5 +1,7 @@ package cn.iocoder.yudao.module.system.service.positionmap; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.map.MapUtil; import cn.hutool.core.util.ObjectUtil; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; @@ -7,6 +9,7 @@ import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.module.system.controller.admin.positionmap.vo.PositionMapLinePageReqVO; import cn.iocoder.yudao.module.system.controller.admin.positionmap.vo.PositionMapLineSaveReqVO; import cn.iocoder.yudao.module.system.dal.dataobject.positionmap.PositionMapLineDO; +import cn.iocoder.yudao.module.system.dal.mysql.positionmap.PositionMapItemMapper; import cn.iocoder.yudao.module.system.dal.mysql.positionmap.PositionMapLineMapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -14,7 +17,8 @@ import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; import javax.annotation.Resource; -import java.util.List; +import java.util.*; +import java.util.stream.Collectors; import static cn.hutool.core.collection.CollUtil.isNotEmpty; import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList; @@ -30,6 +34,8 @@ public class PositionMapLineServiceImpl extends ServiceImpl createReqVO) { List newList = BeanUtils.toBean(createReqVO, PositionMapLineDO.class); - newList.forEach(a -> a.setPositionMapId(positionMapId)); + // 获取到所有新增的并且(没有起始点位或者没有结束点位序号)的数据 + List addList = newList.stream().filter(a -> a.getId() == null + && (a.getStartingSortNum() == null || a.getEndPointSortNum() == null)).collect(Collectors.toList()); + Map map = new HashMap<>(); + if (CollUtil.isNotEmpty(addList)) { + List startPointIds = addList.stream().map(PositionMapLineDO::getStartingPointId).collect(Collectors.toList()); + List endPointIds = addList.stream().map(PositionMapLineDO::getEndPointId).collect(Collectors.toList()); + //合并startPointIds 和 endPointIds 并且去重 + Set pointIds = CollUtil.unionDistinct(startPointIds, endPointIds); + map = positionMapItemMapper.selectSortNumByIds(new ArrayList<>(pointIds)); + } + for (PositionMapLineDO positionMapLineDO : newList) { + positionMapLineDO.setPositionMapId(positionMapId); + if (MapUtil.isNotEmpty(map) && positionMapLineDO.getId() == null && + (positionMapLineDO.getStartingSortNum() == null || positionMapLineDO.getEndPointSortNum() == null)) { + Long startingSortNum = map.get(positionMapLineDO.getStartingPointId()); + Long endPointSortNum = map.get(positionMapLineDO.getEndPointId()); + if (startingSortNum != null) { + positionMapLineDO.setStartingSortNum(startingSortNum.intValue()); + } + if (endPointSortNum != null) { + positionMapLineDO.setEndPointSortNum(endPointSortNum.intValue()); + } + } + } // todo 判断是否有重复数据 List oldList = this.getByMapId(positionMapId); List> list = CollectionUtils.compareLists(oldList, newList, diff --git a/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/positionmap/PositionMapItemMapper.xml b/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/positionmap/PositionMapItemMapper.xml index 790378994..0675c6503 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/positionmap/PositionMapItemMapper.xml +++ b/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/positionmap/PositionMapItemMapper.xml @@ -86,6 +86,18 @@ (#{item.positionMapId}, #{item.actualLocationX}, #{item.actualLocationY}, #{item.type}) +