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 fd8167954..663b6e0e9 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 @@ -64,7 +64,8 @@ public interface WareHouseLocationMapper extends BaseMapperX locationIds, - @Param("mapIds") Set mapIds); + @Param("mapIds") Set mapIds, + @Param("takeMapItemIds") List takeMapItemIds); /** * 普通查询(未删除) 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 522ef3a03..ef8a5c87d 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 @@ -92,4 +92,16 @@ public interface RobotTaskDetailMapper extends BaseMapperX { */ List getChargeTaskDetail(); + /** + * 取货中的map_item_id + * @return + */ + List selectTakeMapItemIds(); + + /** + * 放货中的map_item_id + * @return + */ + List selectReleaseMapItemIds(); + } \ 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 da4c4e315..5714e70fd 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 @@ -14,11 +14,15 @@ import cn.iocoder.yudao.module.system.controller.admin.robot.detail.RobotTaskDet import cn.iocoder.yudao.module.system.controller.admin.robot.detail.RobotTaskDetailLogVO; import cn.iocoder.yudao.module.system.controller.admin.robot.task.TaskPPDistribution; import cn.iocoder.yudao.module.system.controller.admin.robot.vo.*; +import cn.iocoder.yudao.module.system.dal.dataobject.housearea.HouseAreaDO; +import cn.iocoder.yudao.module.system.dal.dataobject.houselane.WareHouseLaneDO; import cn.iocoder.yudao.module.system.dal.dataobject.houselocation.WareHouseLocationDO; import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotChargeLogDO; 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.housearea.HouseAreaMapper; +import cn.iocoder.yudao.module.system.dal.mysql.houselane.WareHouseLaneMapper; import cn.iocoder.yudao.module.system.dal.mysql.houselocation.WareHouseLocationMapper; import cn.iocoder.yudao.module.system.dal.mysql.robot.RobotChargeLogMapper; import cn.iocoder.yudao.module.system.dal.mysql.robot.RobotInformationMapper; @@ -30,6 +34,7 @@ import cn.iocoder.yudao.module.system.service.robot.job.RobotCommonTaskService; import cn.iocoder.yudao.module.system.util.redis.RedisUtil; import cn.iocoder.yudao.module.system.util.redis.RedissonUtils; import com.alibaba.fastjson.JSON; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.google.common.collect.Lists; @@ -100,9 +105,19 @@ public class RobotTaskServiceImpl extends ServiceImpl taskDetailList = createReqVO.getTaskDetailList(); List newTaskDetailList = new ArrayList<>(); - List toLocationIds = new ArrayList<>(); //被此次任务锁定的空库位id - List fromLocationIds = new ArrayList<>(); //被此次任务锁定的有货库位id + //被此次任务锁定的空库位id + List toLocationIds = new ArrayList<>(); + //被此次任务锁定的有货库位id + List fromLocationIds = new ArrayList<>(); for (RobotTaskDetailAddVO robotTaskVo : taskDetailList) { Set mapIds = new HashSet<>(); if (ObjectUtil.isNotEmpty(robotTaskVo.getRobotNo())) { @@ -356,36 +373,64 @@ public class RobotTaskServiceImpl extends ServiceImpl setSingleLocationIdNo(List taskDetailList, RobotTaskDO task){ + public List setSingleLocationIdNo(List taskDetailList, RobotTaskDO task) { + //取货中的map_item_id, 此集合不能执行放货的任务 + List takeMapItemIds = taskDetailMapper.selectTakeMapItemIds(); + if (ObjectUtil.isEmpty(takeMapItemIds)) { + takeMapItemIds = new ArrayList<>(); + } + //放货中的map_item_id, 此集合不能执行取货的任务 + List releaseMapItemIds = taskDetailMapper.selectReleaseMapItemIds(); + if (ObjectUtil.isEmpty(releaseMapItemIds)) { + releaseMapItemIds = new ArrayList<>(); + } List locationIds = new ArrayList<>(); + + List laneIds = new ArrayList<>(); + List areaIds = new ArrayList<>(); + if (ObjectUtil.isNotEmpty(task.getSkuInfo()) && checkSkuInfo) { + List wareHouseLaneDOS = houseLaneMapper.selectList(new LambdaQueryWrapper() + .eq(WareHouseLaneDO::getLaneMsg, task.getSkuInfo())); + if (ObjectUtil.isNotEmpty(wareHouseLaneDOS)) { + laneIds = wareHouseLaneDOS.stream().map(WareHouseLaneDO::getId).collect(Collectors.toList()); + } + List houseAreaDOS = houseAreaMapper.selectList(new LambdaQueryWrapper() + .eq(HouseAreaDO::getSkuInfo, task.getSkuInfo())); + if (ObjectUtil.isNotEmpty(wareHouseLaneDOS)) { + areaIds = houseAreaDOS.stream().map(HouseAreaDO::getId).collect(Collectors.toList()); + } + } + for (RobotTaskDetailAddVO robotTaskVo : taskDetailList) { robotTaskVo.setRobotTaskId(task.getId()); robotTaskVo.setPriority(task.getPriority()); RobotTaskTypeEnum robotTaskType = RobotTaskTypeEnum.getRobotTaskType(robotTaskVo.getTaskType()); switch (robotTaskType){ case TAKE_RELEASE: - doTakeRelease(robotTaskVo,locationIds); + doTakeRelease(robotTaskVo,locationIds,takeMapItemIds,releaseMapItemIds,laneIds,areaIds); break; case PARK: - doPark(robotTaskVo,locationIds); + doPark(robotTaskVo,locationIds,takeMapItemIds,releaseMapItemIds); break; case CHARGE: - doCharge(robotTaskVo); + doCharge(robotTaskVo,takeMapItemIds,releaseMapItemIds); break; case MOVE: - doMove(robotTaskVo,locationIds); + doMove(robotTaskVo,locationIds,takeMapItemIds,releaseMapItemIds); break; case TAKE: - doTake(robotTaskVo,locationIds); + doTake(robotTaskVo,locationIds,takeMapItemIds,releaseMapItemIds); break; case RELEASE: - doRelease(robotTaskVo,locationIds); + doRelease(robotTaskVo,locationIds,takeMapItemIds,releaseMapItemIds); break; case SCAN: - doScan(robotTaskVo,locationIds); + //暂无此功能 + doScan(robotTaskVo,locationIds,takeMapItemIds,releaseMapItemIds); break; case DETECTING_TRAYS: - doDetectingTrays(robotTaskVo,locationIds); + //暂无此功能 + doDetectingTrays(robotTaskVo,locationIds,takeMapItemIds,releaseMapItemIds); break; default : log.error("任务类型不存在 "); @@ -400,9 +445,10 @@ public class RobotTaskServiceImpl extends ServiceImpl locationIds) { - setToLocation(robotTaskVo,getMapIdsByRobotNo(robotTaskVo.getRobotNo()),new ArrayList<>()); - locationIds.add(robotTaskVo.getToLocationId()); + public void doDetectingTrays(RobotTaskDetailAddVO robotTaskVo, List locationIds,List takeMapItemIds, + List releaseMapItemIds) { + /*setToLocation(robotTaskVo,getMapIdsByRobotNo(robotTaskVo.getRobotNo()),new ArrayList<>()); + locationIds.add(robotTaskVo.getToLocationId());*/ } /** @@ -410,9 +456,10 @@ public class RobotTaskServiceImpl extends ServiceImpl locationIds) { - setToLocation(robotTaskVo,getMapIdsByRobotNo(robotTaskVo.getRobotNo()),new ArrayList<>()); - locationIds.add(robotTaskVo.getToLocationId()); + public void doScan(RobotTaskDetailAddVO robotTaskVo, List locationIds,List takeMapItemIds, + List releaseMapItemIds) { + /*setToLocation(robotTaskVo,getMapIdsByRobotNo(robotTaskVo.getRobotNo()),new ArrayList<>()); + locationIds.add(robotTaskVo.getToLocationId());*/ } /** @@ -420,8 +467,9 @@ public class RobotTaskServiceImpl extends ServiceImpl locationIds) { - setToLocation(robotTaskVo,getMapIdsByRobotNo(robotTaskVo.getRobotNo()),locationIds); + public void doRelease(RobotTaskDetailAddVO robotTaskVo, List locationIds,List takeMapItemIds, + List releaseMapItemIds) { + setToLocation(robotTaskVo,getMapIdsByRobotNo(robotTaskVo.getRobotNo()),locationIds,takeMapItemIds,releaseMapItemIds); locationIds.add(robotTaskVo.getToLocationId()); } @@ -430,12 +478,13 @@ public class RobotTaskServiceImpl extends ServiceImpl locationIds) { + public void doTake(RobotTaskDetailAddVO robotTaskVo, List locationIds,List takeMapItemIds, + List releaseMapItemIds) { Set mapIds = new HashSet<>(); if (ObjectUtil.isNotEmpty(robotTaskVo.getRobotNo())) { mapIds = getMapIdsByRobotNo(robotTaskVo.getRobotNo()); } - setFromLocation(robotTaskVo,mapIds,locationIds); + setFromLocation(robotTaskVo,mapIds,locationIds,takeMapItemIds,releaseMapItemIds); locationIds.add(robotTaskVo.getFromLocationId()); } @@ -444,8 +493,9 @@ public class RobotTaskServiceImpl extends ServiceImpl locationIds) { - setToLocation(robotTaskVo,getMapIdsByRobotNo(robotTaskVo.getRobotNo()),locationIds); + public void doMove(RobotTaskDetailAddVO robotTaskVo, List locationIds,List takeMapItemIds, + List releaseMapItemIds) { + setToLocation(robotTaskVo,getMapIdsByRobotNo(robotTaskVo.getRobotNo()),locationIds,takeMapItemIds,releaseMapItemIds); locationIds.add(robotTaskVo.getToLocationId()); } @@ -454,7 +504,8 @@ public class RobotTaskServiceImpl extends ServiceImpl takeMapItemIds, + List releaseMapItemIds) { } @@ -463,7 +514,8 @@ public class RobotTaskServiceImpl extends ServiceImpl locationIds) { + public void doPark(RobotTaskDetailAddVO robotTaskVo, List locationIds,List takeMapItemIds, + List releaseMapItemIds) { // todo 停车后续停到等待点 /*setToLocation(robotTaskVo,getMapIdsByRobotNo(robotTaskVo.getRobotNo()),locationIds); locationIds.add(robotTaskVo.getToLocationId());*/ @@ -491,7 +543,8 @@ public class RobotTaskServiceImpl extends ServiceImpl mapIds, List locationIds){ + public void setToLocation(RobotTaskDetailAddVO robotTaskVo, Set mapIds, List locationIds, + List takeMapItemIds, List releaseMapItemIds){ if (ReleaseTakeEnum.TO_LOCATION.getType().equals(robotTaskVo.getReleaseType())) { WareHouseLocationDO query = WareHouseLocationDO.builder().id(robotTaskVo.getReleaseId()).build(); WareHouseLocationDO locationDO = locationMapper.queryAllByLimit(query); @@ -505,10 +558,15 @@ public class RobotTaskServiceImpl extends ServiceImpl mapIds, List locationIds) { + public void setFromLocation(RobotTaskDetailAddVO robotTaskVo, Set mapIds, List locationIds, + List takeMapItemIds, List releaseMapItemIds) { if (ReleaseTakeEnum.TO_LOCATION.getType().equals(robotTaskVo.getTakeType())) { WareHouseLocationDO query = WareHouseLocationDO.builder().id(robotTaskVo.getTakeId()).build(); WareHouseLocationDO locationDO = locationMapper.queryAllByLimit(query); @@ -543,10 +603,15 @@ public class RobotTaskServiceImpl extends ServiceImpl locationIds) { + public void doTakeRelease(RobotTaskDetailAddVO robotTaskVo, List locationIds, + List takeMapItemIds, List releaseMapItemIds, + List laneIds,List areaIds) { Set mapIds = new HashSet<>(); if (ObjectUtil.isNotEmpty(robotTaskVo.getRobotNo())) { mapIds = getMapIdsByRobotNo(robotTaskVo.getRobotNo()); } //校验放货库位 - setToLocation(robotTaskVo, mapIds,locationIds); + setToLocation(robotTaskVo, mapIds,locationIds,takeMapItemIds,releaseMapItemIds); locationIds.add(robotTaskVo.getToLocationId()); //校验取货库位 - setFromLocation(robotTaskVo,mapIds,locationIds); + setFromLocation(robotTaskVo,mapIds,locationIds,takeMapItemIds,releaseMapItemIds); locationIds.add(robotTaskVo.getFromLocationId()); //验证取货库位是否存在未完成的任务 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 2dd22cb4a..1053ea9d6 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 @@ -664,7 +664,7 @@ public class DistributeTasksServiceImpl implements DistributeTasksService { taskNigth.setCommand_type(CommandTypeEnum.MOVE_POSES.getType()); List pose2dsNight = new ArrayList<>(); - WareHouseLocationDO ware = WareHouseLocationDO.builder() + /* WareHouseLocationDO ware = WareHouseLocationDO.builder() .laneId(-2l) .build(); List releaseStockList = @@ -672,7 +672,7 @@ public class DistributeTasksServiceImpl implements DistributeTasksService { for (WareHouseLocationDO wareHouseLocationDO : releaseStockList) { Pose2ds pose = positionMapItemMapper.selectByLocationId(wareHouseLocationDO.getId()); pose2dsNight.add(pose); - } + }*/ // taskNigth.setPose2ds(pose2dsNight); diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/pathplanning/RobotPathPlanningServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/pathplanning/RobotPathPlanningServiceImpl.java index 1f4e5e69c..d9feaa4dc 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/pathplanning/RobotPathPlanningServiceImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/pathplanning/RobotPathPlanningServiceImpl.java @@ -694,7 +694,7 @@ public class RobotPathPlanningServiceImpl implements RobotPathPlanningService { taskNigth.setCommand_type(CommandTypeEnum.MOVE_POSES.getType()); List pose2dsNight = new ArrayList<>(); - WareHouseLocationDO ware = WareHouseLocationDO.builder() + /*WareHouseLocationDO ware = WareHouseLocationDO.builder() .laneId(-2l) .build(); List releaseStockList = @@ -702,7 +702,7 @@ public class RobotPathPlanningServiceImpl implements RobotPathPlanningService { for (WareHouseLocationDO wareHouseLocationDO : releaseStockList) { Pose2ds pose = positionMapItemMapper.selectByLocationId(wareHouseLocationDO.getId()); pose2dsNight.add(pose); - } + }*/ // taskNigth.setPose2ds(pose2dsNight); diff --git a/yudao-module-system/yudao-module-system-biz/src/main/resources/application-local.yaml b/yudao-module-system/yudao-module-system-biz/src/main/resources/application-local.yaml index 6abd476fe..251201b8b 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/resources/application-local.yaml +++ b/yudao-module-system/yudao-module-system-biz/src/main/resources/application-local.yaml @@ -250,4 +250,6 @@ zn: robot_chearg: #机器人充电的配置 release_location_number_config: 50 #同一组序号,越大越先执行 priority_config: 50 #优先级 + task: #任务相关的配置 + check_sku_info: true #校验物料信息 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 3d327d64e..41a1e19fd 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 @@ -502,41 +502,56 @@ select from - ware_house_location + ware_house_location t1 - AND location_use_status = #{locationUseStatus} + AND t1.location_use_status = #{locationUseStatus} - AND id = #{id} + AND t1.id = #{id} - AND lane_id = #{id} + AND t1.lane_id = #{id} - AND area_id = #{id} + AND t1.area_id = #{id} - AND id not in + AND t1.id not in #{id} - AND map_id in + AND t1.map_id in #{mapId} - AND location_enable = '1' - AND location_lock = '1' - AND location_type = '0' + AND t1.location_enable = '1' + AND t1.location_lock = '1' + AND t1.location_type = '0' + + + AND ((t1.lane_id > 0 + and t1.location_number < (SELECT min(t2.location_number) from ware_house_location t2 + where t1.lane_id = t2.lane_id + AND t2.location_type = '0' + AND (t2.location_use_status = '1' or t2.location_enable = '0' or t1.location_lock = '0')) + ) or t1.lane_id is null) + + + AND t1.map_item_id not in + + #{mapItemId} + - order by location_number desc , location_storey asc + order by t1.location_number desc , t1.location_storey asc limit 1 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 d089cf89b..cae383dbe 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 @@ -197,6 +197,26 @@ and t2.task_type = '3' + + + +