过滤不能取放的库位

This commit is contained in:
cbs 2025-03-01 15:23:08 +08:00
parent 3aaff006c2
commit 94a34981c6
8 changed files with 166 additions and 48 deletions

View File

@ -64,7 +64,8 @@ public interface WareHouseLocationMapper extends BaseMapperX<WareHouseLocationDO
@Param("takeType") Integer takeType,
@Param("id") Long id,
@Param("locationIds") List<Long> locationIds,
@Param("mapIds") Set<Long> mapIds);
@Param("mapIds") Set<Long> mapIds,
@Param("takeMapItemIds") List<Long> takeMapItemIds);
/**
* 普通查询(未删除)

View File

@ -92,4 +92,16 @@ public interface RobotTaskDetailMapper extends BaseMapperX<RobotTaskDetailDO> {
*/
List<RobotTaskDetailDO> getChargeTaskDetail();
/**
* 取货中的map_item_id
* @return
*/
List<Long> selectTakeMapItemIds();
/**
* 放货中的map_item_id
* @return
*/
List<Long> selectReleaseMapItemIds();
}

View File

@ -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<RobotTaskMapper,RobotTaskD
@Value("${zn.task-no:ZN}")
private String taskNo;
@Value("${zn.do_cycle:true}")
private Boolean doCycle;
@Value("${zn.task.check_sku_info:true}")
private Boolean checkSkuInfo;
@Resource
private WareHouseLaneMapper houseLaneMapper;
@Resource
private HouseAreaMapper houseAreaMapper;
@Override
@Transactional(rollbackFor = Exception.class)
public Long createTask(RobotTaskSaveReqVO createReqVO) throws InterruptedException {
@ -229,8 +244,10 @@ public class RobotTaskServiceImpl extends ServiceImpl<RobotTaskMapper,RobotTaskD
List<RobotTaskDetailAddVO> taskDetailList = createReqVO.getTaskDetailList();
List<RobotTaskDetailAddVO> newTaskDetailList = new ArrayList<>();
List<Long> toLocationIds = new ArrayList<>(); //被此次任务锁定的空库位id
List<Long> fromLocationIds = new ArrayList<>(); //被此次任务锁定的有货库位id
//被此次任务锁定的空库位id
List<Long> toLocationIds = new ArrayList<>();
//被此次任务锁定的有货库位id
List<Long> fromLocationIds = new ArrayList<>();
for (RobotTaskDetailAddVO robotTaskVo : taskDetailList) {
Set<Long> mapIds = new HashSet<>();
if (ObjectUtil.isNotEmpty(robotTaskVo.getRobotNo())) {
@ -356,36 +373,64 @@ public class RobotTaskServiceImpl extends ServiceImpl<RobotTaskMapper,RobotTaskD
* @return
*/
@Transactional(rollbackFor = Exception.class)
public List<Long> setSingleLocationIdNo(List<RobotTaskDetailAddVO> taskDetailList, RobotTaskDO task){
public List<Long> setSingleLocationIdNo(List<RobotTaskDetailAddVO> taskDetailList, RobotTaskDO task) {
//取货中的map_item_id 此集合不能执行放货的任务
List<Long> takeMapItemIds = taskDetailMapper.selectTakeMapItemIds();
if (ObjectUtil.isEmpty(takeMapItemIds)) {
takeMapItemIds = new ArrayList<>();
}
//放货中的map_item_id 此集合不能执行取货的任务
List<Long> releaseMapItemIds = taskDetailMapper.selectReleaseMapItemIds();
if (ObjectUtil.isEmpty(releaseMapItemIds)) {
releaseMapItemIds = new ArrayList<>();
}
List<Long> locationIds = new ArrayList<>();
List<Long> laneIds = new ArrayList<>();
List<Long> areaIds = new ArrayList<>();
if (ObjectUtil.isNotEmpty(task.getSkuInfo()) && checkSkuInfo) {
List<WareHouseLaneDO> wareHouseLaneDOS = houseLaneMapper.selectList(new LambdaQueryWrapper<WareHouseLaneDO>()
.eq(WareHouseLaneDO::getLaneMsg, task.getSkuInfo()));
if (ObjectUtil.isNotEmpty(wareHouseLaneDOS)) {
laneIds = wareHouseLaneDOS.stream().map(WareHouseLaneDO::getId).collect(Collectors.toList());
}
List<HouseAreaDO> houseAreaDOS = houseAreaMapper.selectList(new LambdaQueryWrapper<HouseAreaDO>()
.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<RobotTaskMapper,RobotTaskD
* @param robotTaskVo
*/
@Transactional(rollbackFor = Exception.class)
public void doDetectingTrays(RobotTaskDetailAddVO robotTaskVo, List<Long> locationIds) {
setToLocation(robotTaskVo,getMapIdsByRobotNo(robotTaskVo.getRobotNo()),new ArrayList<>());
locationIds.add(robotTaskVo.getToLocationId());
public void doDetectingTrays(RobotTaskDetailAddVO robotTaskVo, List<Long> locationIds,List<Long> takeMapItemIds,
List<Long> releaseMapItemIds) {
/*setToLocation(robotTaskVo,getMapIdsByRobotNo(robotTaskVo.getRobotNo()),new ArrayList<>());
locationIds.add(robotTaskVo.getToLocationId());*/
}
/**
@ -410,9 +456,10 @@ public class RobotTaskServiceImpl extends ServiceImpl<RobotTaskMapper,RobotTaskD
* @param robotTaskVo
*/
@Transactional(rollbackFor = Exception.class)
public void doScan(RobotTaskDetailAddVO robotTaskVo, List<Long> locationIds) {
setToLocation(robotTaskVo,getMapIdsByRobotNo(robotTaskVo.getRobotNo()),new ArrayList<>());
locationIds.add(robotTaskVo.getToLocationId());
public void doScan(RobotTaskDetailAddVO robotTaskVo, List<Long> locationIds,List<Long> takeMapItemIds,
List<Long> releaseMapItemIds) {
/*setToLocation(robotTaskVo,getMapIdsByRobotNo(robotTaskVo.getRobotNo()),new ArrayList<>());
locationIds.add(robotTaskVo.getToLocationId());*/
}
/**
@ -420,8 +467,9 @@ public class RobotTaskServiceImpl extends ServiceImpl<RobotTaskMapper,RobotTaskD
* @param robotTaskVo
*/
@Transactional(rollbackFor = Exception.class)
public void doRelease(RobotTaskDetailAddVO robotTaskVo, List<Long> locationIds) {
setToLocation(robotTaskVo,getMapIdsByRobotNo(robotTaskVo.getRobotNo()),locationIds);
public void doRelease(RobotTaskDetailAddVO robotTaskVo, List<Long> locationIds,List<Long> takeMapItemIds,
List<Long> releaseMapItemIds) {
setToLocation(robotTaskVo,getMapIdsByRobotNo(robotTaskVo.getRobotNo()),locationIds,takeMapItemIds,releaseMapItemIds);
locationIds.add(robotTaskVo.getToLocationId());
}
@ -430,12 +478,13 @@ public class RobotTaskServiceImpl extends ServiceImpl<RobotTaskMapper,RobotTaskD
* @param robotTaskVo
*/
@Transactional(rollbackFor = Exception.class)
public void doTake(RobotTaskDetailAddVO robotTaskVo, List<Long> locationIds) {
public void doTake(RobotTaskDetailAddVO robotTaskVo, List<Long> locationIds,List<Long> takeMapItemIds,
List<Long> releaseMapItemIds) {
Set<Long> 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<RobotTaskMapper,RobotTaskD
* @param robotTaskVo
*/
@Transactional(rollbackFor = Exception.class)
public void doMove(RobotTaskDetailAddVO robotTaskVo, List<Long> locationIds) {
setToLocation(robotTaskVo,getMapIdsByRobotNo(robotTaskVo.getRobotNo()),locationIds);
public void doMove(RobotTaskDetailAddVO robotTaskVo, List<Long> locationIds,List<Long> takeMapItemIds,
List<Long> releaseMapItemIds) {
setToLocation(robotTaskVo,getMapIdsByRobotNo(robotTaskVo.getRobotNo()),locationIds,takeMapItemIds,releaseMapItemIds);
locationIds.add(robotTaskVo.getToLocationId());
}
@ -454,7 +504,8 @@ public class RobotTaskServiceImpl extends ServiceImpl<RobotTaskMapper,RobotTaskD
* @param robotTaskVo
*/
@Transactional(rollbackFor = Exception.class)
public void doCharge(RobotTaskDetailAddVO robotTaskVo) {
public void doCharge(RobotTaskDetailAddVO robotTaskVo,List<Long> takeMapItemIds,
List<Long> releaseMapItemIds) {
}
@ -463,7 +514,8 @@ public class RobotTaskServiceImpl extends ServiceImpl<RobotTaskMapper,RobotTaskD
* @param robotTaskVo
*/
@Transactional(rollbackFor = Exception.class)
public void doPark(RobotTaskDetailAddVO robotTaskVo, List<Long> locationIds) {
public void doPark(RobotTaskDetailAddVO robotTaskVo, List<Long> locationIds,List<Long> takeMapItemIds,
List<Long> releaseMapItemIds) {
// todo 停车后续停到等待点
/*setToLocation(robotTaskVo,getMapIdsByRobotNo(robotTaskVo.getRobotNo()),locationIds);
locationIds.add(robotTaskVo.getToLocationId());*/
@ -491,7 +543,8 @@ public class RobotTaskServiceImpl extends ServiceImpl<RobotTaskMapper,RobotTaskD
* 设置停车/目标库位/扫描库位
*/
@Transactional(rollbackFor = Exception.class)
public void setToLocation(RobotTaskDetailAddVO robotTaskVo, Set<Long> mapIds, List<Long> locationIds){
public void setToLocation(RobotTaskDetailAddVO robotTaskVo, Set<Long> mapIds, List<Long> locationIds,
List<Long> takeMapItemIds, List<Long> 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<RobotTaskMapper,RobotTaskD
log.error("机器人不能在此放货库位放货 :{}, 机器人编号 :{}", locationDO.getLocationNo(),robotTaskVo.getRobotNo());
throw new RuntimeException("机器人不能在此放货库位放货 "+ robotTaskVo.getReleaseId());
}
if (ObjectUtil.isNotEmpty(takeMapItemIds) && takeMapItemIds.contains(locationDO.getMapItemId())) {
log.error("此点位存在取货任务 :{}", locationDO.getLocationNo());
throw new RuntimeException("此库位存在取货任务 "+ locationDO.getLocationNo());
}
releaseMapItemIds.add(locationDO.getMapItemId());
} else {
WareHouseLocationDO wareHouseLocationDO =
locationMapper.selectByTypeAndId(LocationUseStatusEnum.NO.getType(), robotTaskVo.getReleaseType()
,robotTaskVo.getReleaseId(),locationIds,mapIds);
,robotTaskVo.getReleaseId(),locationIds,mapIds,takeMapItemIds);
if (ObjectUtil.isEmpty(wareHouseLocationDO)) {
log.error("放货库位为空或者已锁定或者机器人取放货区域受限制 :{}", robotTaskVo.getReleaseId());
throw new RuntimeException("放货库位为空或者已锁定或者机器人取放货区域受限制 "+ robotTaskVo.getReleaseId());
@ -519,6 +577,7 @@ public class RobotTaskServiceImpl extends ServiceImpl<RobotTaskMapper,RobotTaskD
robotTaskVo.setToLaneId(wareHouseLocationDO.getLaneId());
robotTaskVo.setToLocationNumber(wareHouseLocationDO.getLocationNumber());
robotTaskVo.setToMapId(wareHouseLocationDO.getMapId());
releaseMapItemIds.add(wareHouseLocationDO.getMapItemId());
}
}
@ -529,7 +588,8 @@ public class RobotTaskServiceImpl extends ServiceImpl<RobotTaskMapper,RobotTaskD
* @param locationIds
*/
@Transactional(rollbackFor = Exception.class)
public void setFromLocation(RobotTaskDetailAddVO robotTaskVo, Set<Long> mapIds, List<Long> locationIds) {
public void setFromLocation(RobotTaskDetailAddVO robotTaskVo, Set<Long> mapIds, List<Long> locationIds,
List<Long> takeMapItemIds, List<Long> 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<RobotTaskMapper,RobotTaskD
log.error("机器人不能在此取货库位取货 :{}, 机器人编号 :{}", locationDO.getLocationNo(),robotTaskVo.getRobotNo());
throw new RuntimeException("机器人不能在此取货库位取货 "+ robotTaskVo.getTakeId());
}
if (ObjectUtil.isNotEmpty(releaseMapItemIds) && releaseMapItemIds.contains(locationDO.getMapItemId())) {
log.error("此取货库位存在放货任务 :{}", locationDO.getLocationNo());
throw new RuntimeException("此取货库位存在放货任务 "+ locationDO.getLocationNo());
}
takeMapItemIds.add(locationDO.getMapItemId());
} else {
WareHouseLocationDO wareHouseLocationDO =
locationMapper.selectByTypeAndId(LocationUseStatusEnum.YES.getType(),robotTaskVo.getTakeType(),
robotTaskVo.getTakeId(),locationIds,mapIds);
robotTaskVo.getTakeId(),locationIds,mapIds,releaseMapItemIds);
if (ObjectUtil.isEmpty(wareHouseLocationDO)) {
log.error("取货库位为空或者已锁定或者机器人取放货区域受限制 :{}", robotTaskVo.getTakeId());
throw new RuntimeException("取货库位为空或者已锁定或者机器人取放货区域受限制 "+ robotTaskVo.getTakeId());
@ -557,6 +622,7 @@ public class RobotTaskServiceImpl extends ServiceImpl<RobotTaskMapper,RobotTaskD
robotTaskVo.setFromLaneId(wareHouseLocationDO.getLaneId());
robotTaskVo.setFromLocationNumber(wareHouseLocationDO.getLocationNumber());
robotTaskVo.setFromMapId(wareHouseLocationDO.getMapId());
takeMapItemIds.add(wareHouseLocationDO.getMapItemId());
}
}
@ -565,18 +631,20 @@ public class RobotTaskServiceImpl extends ServiceImpl<RobotTaskMapper,RobotTaskD
* @param robotTaskVo
*/
@Transactional(rollbackFor = Exception.class)
public void doTakeRelease(RobotTaskDetailAddVO robotTaskVo, List<Long> locationIds) {
public void doTakeRelease(RobotTaskDetailAddVO robotTaskVo, List<Long> locationIds,
List<Long> takeMapItemIds, List<Long> releaseMapItemIds,
List<Long> laneIds,List<Long> areaIds) {
Set<Long> 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());
//验证取货库位是否存在未完成的任务

View File

@ -664,7 +664,7 @@ public class DistributeTasksServiceImpl implements DistributeTasksService {
taskNigth.setCommand_type(CommandTypeEnum.MOVE_POSES.getType());
List<Pose2ds> pose2dsNight = new ArrayList<>();
WareHouseLocationDO ware = WareHouseLocationDO.builder()
/* WareHouseLocationDO ware = WareHouseLocationDO.builder()
.laneId(-2l)
.build();
List<WareHouseLocationDO> 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);

View File

@ -694,7 +694,7 @@ public class RobotPathPlanningServiceImpl implements RobotPathPlanningService {
taskNigth.setCommand_type(CommandTypeEnum.MOVE_POSES.getType());
List<Pose2ds> pose2dsNight = new ArrayList<>();
WareHouseLocationDO ware = WareHouseLocationDO.builder()
/*WareHouseLocationDO ware = WareHouseLocationDO.builder()
.laneId(-2l)
.build();
List<WareHouseLocationDO> 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);

View File

@ -250,4 +250,6 @@ zn:
robot_chearg: #机器人充电的配置
release_location_number_config: 50 #同一组序号,越大越先执行
priority_config: 50 #优先级
task: #任务相关的配置
check_sku_info: true #校验物料信息

View File

@ -502,41 +502,56 @@
select
<include refid="base_sql"></include>
from
ware_house_location
ware_house_location t1
<where>
<if test= " locationUseStatus != null ">
AND location_use_status = #{locationUseStatus}
AND t1.location_use_status = #{locationUseStatus}
</if>
<if test= "takeType != null and takeType == '1'.toString()">
AND id = #{id}
AND t1.id = #{id}
</if>
<if test= "takeType != null and takeType == '2'.toString()">
AND lane_id = #{id}
AND t1.lane_id = #{id}
</if>
<if test= "takeType != null and takeType == '3'.toString()">
AND area_id = #{id}
AND t1.area_id = #{id}
</if>
<if test= " locationIds != null and locationIds.size() > 0">
AND id not in
AND t1.id not in
<foreach collection="locationIds" item="id" index="index" open="(" close=")"
separator=",">
#{id}
</foreach>
</if>
<if test= " mapIds != null and mapIds.size() > 0">
AND map_id in
AND t1.map_id in
<foreach collection="mapIds" item="mapId" index="index" open="(" close=")"
separator=",">
#{mapId}
</foreach>
</if>
<if test= '"1"=="1"'>
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'
</if>
<if test= "locationUseStatus != null and locationUseStatus == '0'.toString()">
AND ((t1.lane_id > 0
and t1.location_number &lt; (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)
</if>
<if test= " takeMapItemIds != null and takeMapItemIds.size() > 0">
AND t1.map_item_id not in
<foreach collection="takeMapItemIds" item="mapItemId" index="index" open="(" close=")"
separator=",">
#{mapItemId}
</foreach>
</if>
</where>
order by location_number desc , location_storey asc
order by t1.location_number desc , t1.location_storey asc
limit 1
</select>

View File

@ -197,6 +197,26 @@
and t2.task_type = '3'
</select>
<select id="selectTakeMapItemIds" resultType="java.lang.Long">
select
t2.map_item_id
from
robot_task_detail t1, ware_house_location t2
where
t1.from_location_id = t2.id
and t1.task_status in ('0','1')
</select>
<select id="selectReleaseMapItemIds" resultType="java.lang.Long">
select
t2.map_item_id
from
robot_task_detail t1, ware_house_location t2
where
t1.to_location_id = t2.id
and t1.task_status in ('0','1')
</select>
<!--keyProperty="id" useGeneratedKeys="true"-->
<insert id="insertBatchList" >