过滤不能取放的库位
This commit is contained in:
parent
3aaff006c2
commit
94a34981c6
@ -64,7 +64,8 @@ public interface WareHouseLocationMapper extends BaseMapperX<WareHouseLocationDO
|
|||||||
@Param("takeType") Integer takeType,
|
@Param("takeType") Integer takeType,
|
||||||
@Param("id") Long id,
|
@Param("id") Long id,
|
||||||
@Param("locationIds") List<Long> locationIds,
|
@Param("locationIds") List<Long> locationIds,
|
||||||
@Param("mapIds") Set<Long> mapIds);
|
@Param("mapIds") Set<Long> mapIds,
|
||||||
|
@Param("takeMapItemIds") List<Long> takeMapItemIds);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 普通查询(未删除)
|
* 普通查询(未删除)
|
||||||
|
@ -92,4 +92,16 @@ public interface RobotTaskDetailMapper extends BaseMapperX<RobotTaskDetailDO> {
|
|||||||
*/
|
*/
|
||||||
List<RobotTaskDetailDO> getChargeTaskDetail();
|
List<RobotTaskDetailDO> getChargeTaskDetail();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 取货中的map_item_id
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
List<Long> selectTakeMapItemIds();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 放货中的map_item_id
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
List<Long> selectReleaseMapItemIds();
|
||||||
|
|
||||||
}
|
}
|
@ -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.detail.RobotTaskDetailLogVO;
|
||||||
import cn.iocoder.yudao.module.system.controller.admin.robot.task.TaskPPDistribution;
|
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.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.houselocation.WareHouseLocationDO;
|
||||||
import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotChargeLogDO;
|
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.RobotInformationDO;
|
||||||
import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotTaskDO;
|
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.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.houselocation.WareHouseLocationMapper;
|
||||||
import cn.iocoder.yudao.module.system.dal.mysql.robot.RobotChargeLogMapper;
|
import cn.iocoder.yudao.module.system.dal.mysql.robot.RobotChargeLogMapper;
|
||||||
import cn.iocoder.yudao.module.system.dal.mysql.robot.RobotInformationMapper;
|
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.RedisUtil;
|
||||||
import cn.iocoder.yudao.module.system.util.redis.RedissonUtils;
|
import cn.iocoder.yudao.module.system.util.redis.RedissonUtils;
|
||||||
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSON;
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
import com.google.common.collect.Lists;
|
import com.google.common.collect.Lists;
|
||||||
@ -100,9 +105,19 @@ public class RobotTaskServiceImpl extends ServiceImpl<RobotTaskMapper,RobotTaskD
|
|||||||
|
|
||||||
@Value("${zn.task-no:ZN}")
|
@Value("${zn.task-no:ZN}")
|
||||||
private String taskNo;
|
private String taskNo;
|
||||||
|
|
||||||
@Value("${zn.do_cycle:true}")
|
@Value("${zn.do_cycle:true}")
|
||||||
private Boolean doCycle;
|
private Boolean doCycle;
|
||||||
|
|
||||||
|
@Value("${zn.task.check_sku_info:true}")
|
||||||
|
private Boolean checkSkuInfo;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private WareHouseLaneMapper houseLaneMapper;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private HouseAreaMapper houseAreaMapper;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public Long createTask(RobotTaskSaveReqVO createReqVO) throws InterruptedException {
|
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> taskDetailList = createReqVO.getTaskDetailList();
|
||||||
|
|
||||||
List<RobotTaskDetailAddVO> newTaskDetailList = new ArrayList<>();
|
List<RobotTaskDetailAddVO> newTaskDetailList = new ArrayList<>();
|
||||||
List<Long> toLocationIds = new ArrayList<>(); //被此次任务锁定的空库位id
|
//被此次任务锁定的空库位id
|
||||||
List<Long> fromLocationIds = new ArrayList<>(); //被此次任务锁定的有货库位id
|
List<Long> toLocationIds = new ArrayList<>();
|
||||||
|
//被此次任务锁定的有货库位id
|
||||||
|
List<Long> fromLocationIds = new ArrayList<>();
|
||||||
for (RobotTaskDetailAddVO robotTaskVo : taskDetailList) {
|
for (RobotTaskDetailAddVO robotTaskVo : taskDetailList) {
|
||||||
Set<Long> mapIds = new HashSet<>();
|
Set<Long> mapIds = new HashSet<>();
|
||||||
if (ObjectUtil.isNotEmpty(robotTaskVo.getRobotNo())) {
|
if (ObjectUtil.isNotEmpty(robotTaskVo.getRobotNo())) {
|
||||||
@ -357,35 +374,63 @@ public class RobotTaskServiceImpl extends ServiceImpl<RobotTaskMapper,RobotTaskD
|
|||||||
*/
|
*/
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@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> 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) {
|
for (RobotTaskDetailAddVO robotTaskVo : taskDetailList) {
|
||||||
robotTaskVo.setRobotTaskId(task.getId());
|
robotTaskVo.setRobotTaskId(task.getId());
|
||||||
robotTaskVo.setPriority(task.getPriority());
|
robotTaskVo.setPriority(task.getPriority());
|
||||||
RobotTaskTypeEnum robotTaskType = RobotTaskTypeEnum.getRobotTaskType(robotTaskVo.getTaskType());
|
RobotTaskTypeEnum robotTaskType = RobotTaskTypeEnum.getRobotTaskType(robotTaskVo.getTaskType());
|
||||||
switch (robotTaskType){
|
switch (robotTaskType){
|
||||||
case TAKE_RELEASE:
|
case TAKE_RELEASE:
|
||||||
doTakeRelease(robotTaskVo,locationIds);
|
doTakeRelease(robotTaskVo,locationIds,takeMapItemIds,releaseMapItemIds,laneIds,areaIds);
|
||||||
break;
|
break;
|
||||||
case PARK:
|
case PARK:
|
||||||
doPark(robotTaskVo,locationIds);
|
doPark(robotTaskVo,locationIds,takeMapItemIds,releaseMapItemIds);
|
||||||
break;
|
break;
|
||||||
case CHARGE:
|
case CHARGE:
|
||||||
doCharge(robotTaskVo);
|
doCharge(robotTaskVo,takeMapItemIds,releaseMapItemIds);
|
||||||
break;
|
break;
|
||||||
case MOVE:
|
case MOVE:
|
||||||
doMove(robotTaskVo,locationIds);
|
doMove(robotTaskVo,locationIds,takeMapItemIds,releaseMapItemIds);
|
||||||
break;
|
break;
|
||||||
case TAKE:
|
case TAKE:
|
||||||
doTake(robotTaskVo,locationIds);
|
doTake(robotTaskVo,locationIds,takeMapItemIds,releaseMapItemIds);
|
||||||
break;
|
break;
|
||||||
case RELEASE:
|
case RELEASE:
|
||||||
doRelease(robotTaskVo,locationIds);
|
doRelease(robotTaskVo,locationIds,takeMapItemIds,releaseMapItemIds);
|
||||||
break;
|
break;
|
||||||
case SCAN:
|
case SCAN:
|
||||||
doScan(robotTaskVo,locationIds);
|
//暂无此功能
|
||||||
|
doScan(robotTaskVo,locationIds,takeMapItemIds,releaseMapItemIds);
|
||||||
break;
|
break;
|
||||||
case DETECTING_TRAYS:
|
case DETECTING_TRAYS:
|
||||||
doDetectingTrays(robotTaskVo,locationIds);
|
//暂无此功能
|
||||||
|
doDetectingTrays(robotTaskVo,locationIds,takeMapItemIds,releaseMapItemIds);
|
||||||
break;
|
break;
|
||||||
default :
|
default :
|
||||||
log.error("任务类型不存在 ");
|
log.error("任务类型不存在 ");
|
||||||
@ -400,9 +445,10 @@ public class RobotTaskServiceImpl extends ServiceImpl<RobotTaskMapper,RobotTaskD
|
|||||||
* @param robotTaskVo
|
* @param robotTaskVo
|
||||||
*/
|
*/
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public void doDetectingTrays(RobotTaskDetailAddVO robotTaskVo, List<Long> locationIds) {
|
public void doDetectingTrays(RobotTaskDetailAddVO robotTaskVo, List<Long> locationIds,List<Long> takeMapItemIds,
|
||||||
setToLocation(robotTaskVo,getMapIdsByRobotNo(robotTaskVo.getRobotNo()),new ArrayList<>());
|
List<Long> releaseMapItemIds) {
|
||||||
locationIds.add(robotTaskVo.getToLocationId());
|
/*setToLocation(robotTaskVo,getMapIdsByRobotNo(robotTaskVo.getRobotNo()),new ArrayList<>());
|
||||||
|
locationIds.add(robotTaskVo.getToLocationId());*/
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -410,9 +456,10 @@ public class RobotTaskServiceImpl extends ServiceImpl<RobotTaskMapper,RobotTaskD
|
|||||||
* @param robotTaskVo
|
* @param robotTaskVo
|
||||||
*/
|
*/
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public void doScan(RobotTaskDetailAddVO robotTaskVo, List<Long> locationIds) {
|
public void doScan(RobotTaskDetailAddVO robotTaskVo, List<Long> locationIds,List<Long> takeMapItemIds,
|
||||||
setToLocation(robotTaskVo,getMapIdsByRobotNo(robotTaskVo.getRobotNo()),new ArrayList<>());
|
List<Long> releaseMapItemIds) {
|
||||||
locationIds.add(robotTaskVo.getToLocationId());
|
/*setToLocation(robotTaskVo,getMapIdsByRobotNo(robotTaskVo.getRobotNo()),new ArrayList<>());
|
||||||
|
locationIds.add(robotTaskVo.getToLocationId());*/
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -420,8 +467,9 @@ public class RobotTaskServiceImpl extends ServiceImpl<RobotTaskMapper,RobotTaskD
|
|||||||
* @param robotTaskVo
|
* @param robotTaskVo
|
||||||
*/
|
*/
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public void doRelease(RobotTaskDetailAddVO robotTaskVo, List<Long> locationIds) {
|
public void doRelease(RobotTaskDetailAddVO robotTaskVo, List<Long> locationIds,List<Long> takeMapItemIds,
|
||||||
setToLocation(robotTaskVo,getMapIdsByRobotNo(robotTaskVo.getRobotNo()),locationIds);
|
List<Long> releaseMapItemIds) {
|
||||||
|
setToLocation(robotTaskVo,getMapIdsByRobotNo(robotTaskVo.getRobotNo()),locationIds,takeMapItemIds,releaseMapItemIds);
|
||||||
locationIds.add(robotTaskVo.getToLocationId());
|
locationIds.add(robotTaskVo.getToLocationId());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -430,12 +478,13 @@ public class RobotTaskServiceImpl extends ServiceImpl<RobotTaskMapper,RobotTaskD
|
|||||||
* @param robotTaskVo
|
* @param robotTaskVo
|
||||||
*/
|
*/
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@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<>();
|
Set<Long> mapIds = new HashSet<>();
|
||||||
if (ObjectUtil.isNotEmpty(robotTaskVo.getRobotNo())) {
|
if (ObjectUtil.isNotEmpty(robotTaskVo.getRobotNo())) {
|
||||||
mapIds = getMapIdsByRobotNo(robotTaskVo.getRobotNo());
|
mapIds = getMapIdsByRobotNo(robotTaskVo.getRobotNo());
|
||||||
}
|
}
|
||||||
setFromLocation(robotTaskVo,mapIds,locationIds);
|
setFromLocation(robotTaskVo,mapIds,locationIds,takeMapItemIds,releaseMapItemIds);
|
||||||
locationIds.add(robotTaskVo.getFromLocationId());
|
locationIds.add(robotTaskVo.getFromLocationId());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -444,8 +493,9 @@ public class RobotTaskServiceImpl extends ServiceImpl<RobotTaskMapper,RobotTaskD
|
|||||||
* @param robotTaskVo
|
* @param robotTaskVo
|
||||||
*/
|
*/
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public void doMove(RobotTaskDetailAddVO robotTaskVo, List<Long> locationIds) {
|
public void doMove(RobotTaskDetailAddVO robotTaskVo, List<Long> locationIds,List<Long> takeMapItemIds,
|
||||||
setToLocation(robotTaskVo,getMapIdsByRobotNo(robotTaskVo.getRobotNo()),locationIds);
|
List<Long> releaseMapItemIds) {
|
||||||
|
setToLocation(robotTaskVo,getMapIdsByRobotNo(robotTaskVo.getRobotNo()),locationIds,takeMapItemIds,releaseMapItemIds);
|
||||||
locationIds.add(robotTaskVo.getToLocationId());
|
locationIds.add(robotTaskVo.getToLocationId());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -454,7 +504,8 @@ public class RobotTaskServiceImpl extends ServiceImpl<RobotTaskMapper,RobotTaskD
|
|||||||
* @param robotTaskVo
|
* @param robotTaskVo
|
||||||
*/
|
*/
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@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
|
* @param robotTaskVo
|
||||||
*/
|
*/
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@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 停车后续停到等待点
|
// todo 停车后续停到等待点
|
||||||
/*setToLocation(robotTaskVo,getMapIdsByRobotNo(robotTaskVo.getRobotNo()),locationIds);
|
/*setToLocation(robotTaskVo,getMapIdsByRobotNo(robotTaskVo.getRobotNo()),locationIds);
|
||||||
locationIds.add(robotTaskVo.getToLocationId());*/
|
locationIds.add(robotTaskVo.getToLocationId());*/
|
||||||
@ -491,7 +543,8 @@ public class RobotTaskServiceImpl extends ServiceImpl<RobotTaskMapper,RobotTaskD
|
|||||||
* 设置停车/目标库位/扫描库位
|
* 设置停车/目标库位/扫描库位
|
||||||
*/
|
*/
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@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())) {
|
if (ReleaseTakeEnum.TO_LOCATION.getType().equals(robotTaskVo.getReleaseType())) {
|
||||||
WareHouseLocationDO query = WareHouseLocationDO.builder().id(robotTaskVo.getReleaseId()).build();
|
WareHouseLocationDO query = WareHouseLocationDO.builder().id(robotTaskVo.getReleaseId()).build();
|
||||||
WareHouseLocationDO locationDO = locationMapper.queryAllByLimit(query);
|
WareHouseLocationDO locationDO = locationMapper.queryAllByLimit(query);
|
||||||
@ -505,10 +558,15 @@ public class RobotTaskServiceImpl extends ServiceImpl<RobotTaskMapper,RobotTaskD
|
|||||||
log.error("机器人不能在此放货库位放货 :{}, 机器人编号 :{}", locationDO.getLocationNo(),robotTaskVo.getRobotNo());
|
log.error("机器人不能在此放货库位放货 :{}, 机器人编号 :{}", locationDO.getLocationNo(),robotTaskVo.getRobotNo());
|
||||||
throw new RuntimeException("机器人不能在此放货库位放货 "+ robotTaskVo.getReleaseId());
|
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 {
|
} else {
|
||||||
WareHouseLocationDO wareHouseLocationDO =
|
WareHouseLocationDO wareHouseLocationDO =
|
||||||
locationMapper.selectByTypeAndId(LocationUseStatusEnum.NO.getType(), robotTaskVo.getReleaseType()
|
locationMapper.selectByTypeAndId(LocationUseStatusEnum.NO.getType(), robotTaskVo.getReleaseType()
|
||||||
,robotTaskVo.getReleaseId(),locationIds,mapIds);
|
,robotTaskVo.getReleaseId(),locationIds,mapIds,takeMapItemIds);
|
||||||
if (ObjectUtil.isEmpty(wareHouseLocationDO)) {
|
if (ObjectUtil.isEmpty(wareHouseLocationDO)) {
|
||||||
log.error("放货库位为空或者已锁定或者机器人取放货区域受限制 :{}", robotTaskVo.getReleaseId());
|
log.error("放货库位为空或者已锁定或者机器人取放货区域受限制 :{}", robotTaskVo.getReleaseId());
|
||||||
throw new RuntimeException("放货库位为空或者已锁定或者机器人取放货区域受限制 "+ robotTaskVo.getReleaseId());
|
throw new RuntimeException("放货库位为空或者已锁定或者机器人取放货区域受限制 "+ robotTaskVo.getReleaseId());
|
||||||
@ -519,6 +577,7 @@ public class RobotTaskServiceImpl extends ServiceImpl<RobotTaskMapper,RobotTaskD
|
|||||||
robotTaskVo.setToLaneId(wareHouseLocationDO.getLaneId());
|
robotTaskVo.setToLaneId(wareHouseLocationDO.getLaneId());
|
||||||
robotTaskVo.setToLocationNumber(wareHouseLocationDO.getLocationNumber());
|
robotTaskVo.setToLocationNumber(wareHouseLocationDO.getLocationNumber());
|
||||||
robotTaskVo.setToMapId(wareHouseLocationDO.getMapId());
|
robotTaskVo.setToMapId(wareHouseLocationDO.getMapId());
|
||||||
|
releaseMapItemIds.add(wareHouseLocationDO.getMapItemId());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -529,7 +588,8 @@ public class RobotTaskServiceImpl extends ServiceImpl<RobotTaskMapper,RobotTaskD
|
|||||||
* @param locationIds
|
* @param locationIds
|
||||||
*/
|
*/
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@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())) {
|
if (ReleaseTakeEnum.TO_LOCATION.getType().equals(robotTaskVo.getTakeType())) {
|
||||||
WareHouseLocationDO query = WareHouseLocationDO.builder().id(robotTaskVo.getTakeId()).build();
|
WareHouseLocationDO query = WareHouseLocationDO.builder().id(robotTaskVo.getTakeId()).build();
|
||||||
WareHouseLocationDO locationDO = locationMapper.queryAllByLimit(query);
|
WareHouseLocationDO locationDO = locationMapper.queryAllByLimit(query);
|
||||||
@ -543,10 +603,15 @@ public class RobotTaskServiceImpl extends ServiceImpl<RobotTaskMapper,RobotTaskD
|
|||||||
log.error("机器人不能在此取货库位取货 :{}, 机器人编号 :{}", locationDO.getLocationNo(),robotTaskVo.getRobotNo());
|
log.error("机器人不能在此取货库位取货 :{}, 机器人编号 :{}", locationDO.getLocationNo(),robotTaskVo.getRobotNo());
|
||||||
throw new RuntimeException("机器人不能在此取货库位取货 "+ robotTaskVo.getTakeId());
|
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 {
|
} else {
|
||||||
WareHouseLocationDO wareHouseLocationDO =
|
WareHouseLocationDO wareHouseLocationDO =
|
||||||
locationMapper.selectByTypeAndId(LocationUseStatusEnum.YES.getType(),robotTaskVo.getTakeType(),
|
locationMapper.selectByTypeAndId(LocationUseStatusEnum.YES.getType(),robotTaskVo.getTakeType(),
|
||||||
robotTaskVo.getTakeId(),locationIds,mapIds);
|
robotTaskVo.getTakeId(),locationIds,mapIds,releaseMapItemIds);
|
||||||
if (ObjectUtil.isEmpty(wareHouseLocationDO)) {
|
if (ObjectUtil.isEmpty(wareHouseLocationDO)) {
|
||||||
log.error("取货库位为空或者已锁定或者机器人取放货区域受限制 :{}", robotTaskVo.getTakeId());
|
log.error("取货库位为空或者已锁定或者机器人取放货区域受限制 :{}", robotTaskVo.getTakeId());
|
||||||
throw new RuntimeException("取货库位为空或者已锁定或者机器人取放货区域受限制 "+ robotTaskVo.getTakeId());
|
throw new RuntimeException("取货库位为空或者已锁定或者机器人取放货区域受限制 "+ robotTaskVo.getTakeId());
|
||||||
@ -557,6 +622,7 @@ public class RobotTaskServiceImpl extends ServiceImpl<RobotTaskMapper,RobotTaskD
|
|||||||
robotTaskVo.setFromLaneId(wareHouseLocationDO.getLaneId());
|
robotTaskVo.setFromLaneId(wareHouseLocationDO.getLaneId());
|
||||||
robotTaskVo.setFromLocationNumber(wareHouseLocationDO.getLocationNumber());
|
robotTaskVo.setFromLocationNumber(wareHouseLocationDO.getLocationNumber());
|
||||||
robotTaskVo.setFromMapId(wareHouseLocationDO.getMapId());
|
robotTaskVo.setFromMapId(wareHouseLocationDO.getMapId());
|
||||||
|
takeMapItemIds.add(wareHouseLocationDO.getMapItemId());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -565,18 +631,20 @@ public class RobotTaskServiceImpl extends ServiceImpl<RobotTaskMapper,RobotTaskD
|
|||||||
* @param robotTaskVo
|
* @param robotTaskVo
|
||||||
*/
|
*/
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@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<>();
|
Set<Long> mapIds = new HashSet<>();
|
||||||
if (ObjectUtil.isNotEmpty(robotTaskVo.getRobotNo())) {
|
if (ObjectUtil.isNotEmpty(robotTaskVo.getRobotNo())) {
|
||||||
mapIds = getMapIdsByRobotNo(robotTaskVo.getRobotNo());
|
mapIds = getMapIdsByRobotNo(robotTaskVo.getRobotNo());
|
||||||
}
|
}
|
||||||
|
|
||||||
//校验放货库位
|
//校验放货库位
|
||||||
setToLocation(robotTaskVo, mapIds,locationIds);
|
setToLocation(robotTaskVo, mapIds,locationIds,takeMapItemIds,releaseMapItemIds);
|
||||||
locationIds.add(robotTaskVo.getToLocationId());
|
locationIds.add(robotTaskVo.getToLocationId());
|
||||||
|
|
||||||
//校验取货库位
|
//校验取货库位
|
||||||
setFromLocation(robotTaskVo,mapIds,locationIds);
|
setFromLocation(robotTaskVo,mapIds,locationIds,takeMapItemIds,releaseMapItemIds);
|
||||||
locationIds.add(robotTaskVo.getFromLocationId());
|
locationIds.add(robotTaskVo.getFromLocationId());
|
||||||
|
|
||||||
//验证取货库位是否存在未完成的任务
|
//验证取货库位是否存在未完成的任务
|
||||||
|
@ -664,7 +664,7 @@ public class DistributeTasksServiceImpl implements DistributeTasksService {
|
|||||||
taskNigth.setCommand_type(CommandTypeEnum.MOVE_POSES.getType());
|
taskNigth.setCommand_type(CommandTypeEnum.MOVE_POSES.getType());
|
||||||
List<Pose2ds> pose2dsNight = new ArrayList<>();
|
List<Pose2ds> pose2dsNight = new ArrayList<>();
|
||||||
|
|
||||||
WareHouseLocationDO ware = WareHouseLocationDO.builder()
|
/* WareHouseLocationDO ware = WareHouseLocationDO.builder()
|
||||||
.laneId(-2l)
|
.laneId(-2l)
|
||||||
.build();
|
.build();
|
||||||
List<WareHouseLocationDO> releaseStockList =
|
List<WareHouseLocationDO> releaseStockList =
|
||||||
@ -672,7 +672,7 @@ public class DistributeTasksServiceImpl implements DistributeTasksService {
|
|||||||
for (WareHouseLocationDO wareHouseLocationDO : releaseStockList) {
|
for (WareHouseLocationDO wareHouseLocationDO : releaseStockList) {
|
||||||
Pose2ds pose = positionMapItemMapper.selectByLocationId(wareHouseLocationDO.getId());
|
Pose2ds pose = positionMapItemMapper.selectByLocationId(wareHouseLocationDO.getId());
|
||||||
pose2dsNight.add(pose);
|
pose2dsNight.add(pose);
|
||||||
}
|
}*/
|
||||||
|
|
||||||
|
|
||||||
// taskNigth.setPose2ds(pose2dsNight);
|
// taskNigth.setPose2ds(pose2dsNight);
|
||||||
|
@ -694,7 +694,7 @@ public class RobotPathPlanningServiceImpl implements RobotPathPlanningService {
|
|||||||
taskNigth.setCommand_type(CommandTypeEnum.MOVE_POSES.getType());
|
taskNigth.setCommand_type(CommandTypeEnum.MOVE_POSES.getType());
|
||||||
List<Pose2ds> pose2dsNight = new ArrayList<>();
|
List<Pose2ds> pose2dsNight = new ArrayList<>();
|
||||||
|
|
||||||
WareHouseLocationDO ware = WareHouseLocationDO.builder()
|
/*WareHouseLocationDO ware = WareHouseLocationDO.builder()
|
||||||
.laneId(-2l)
|
.laneId(-2l)
|
||||||
.build();
|
.build();
|
||||||
List<WareHouseLocationDO> releaseStockList =
|
List<WareHouseLocationDO> releaseStockList =
|
||||||
@ -702,7 +702,7 @@ public class RobotPathPlanningServiceImpl implements RobotPathPlanningService {
|
|||||||
for (WareHouseLocationDO wareHouseLocationDO : releaseStockList) {
|
for (WareHouseLocationDO wareHouseLocationDO : releaseStockList) {
|
||||||
Pose2ds pose = positionMapItemMapper.selectByLocationId(wareHouseLocationDO.getId());
|
Pose2ds pose = positionMapItemMapper.selectByLocationId(wareHouseLocationDO.getId());
|
||||||
pose2dsNight.add(pose);
|
pose2dsNight.add(pose);
|
||||||
}
|
}*/
|
||||||
|
|
||||||
|
|
||||||
// taskNigth.setPose2ds(pose2dsNight);
|
// taskNigth.setPose2ds(pose2dsNight);
|
||||||
|
@ -250,4 +250,6 @@ zn:
|
|||||||
robot_chearg: #机器人充电的配置
|
robot_chearg: #机器人充电的配置
|
||||||
release_location_number_config: 50 #同一组序号,越大越先执行
|
release_location_number_config: 50 #同一组序号,越大越先执行
|
||||||
priority_config: 50 #优先级
|
priority_config: 50 #优先级
|
||||||
|
task: #任务相关的配置
|
||||||
|
check_sku_info: true #校验物料信息
|
||||||
|
|
||||||
|
@ -502,41 +502,56 @@
|
|||||||
select
|
select
|
||||||
<include refid="base_sql"></include>
|
<include refid="base_sql"></include>
|
||||||
from
|
from
|
||||||
ware_house_location
|
ware_house_location t1
|
||||||
<where>
|
<where>
|
||||||
<if test= " locationUseStatus != null ">
|
<if test= " locationUseStatus != null ">
|
||||||
AND location_use_status = #{locationUseStatus}
|
AND t1.location_use_status = #{locationUseStatus}
|
||||||
</if>
|
</if>
|
||||||
<if test= "takeType != null and takeType == '1'.toString()">
|
<if test= "takeType != null and takeType == '1'.toString()">
|
||||||
AND id = #{id}
|
AND t1.id = #{id}
|
||||||
</if>
|
</if>
|
||||||
<if test= "takeType != null and takeType == '2'.toString()">
|
<if test= "takeType != null and takeType == '2'.toString()">
|
||||||
AND lane_id = #{id}
|
AND t1.lane_id = #{id}
|
||||||
</if>
|
</if>
|
||||||
<if test= "takeType != null and takeType == '3'.toString()">
|
<if test= "takeType != null and takeType == '3'.toString()">
|
||||||
AND area_id = #{id}
|
AND t1.area_id = #{id}
|
||||||
</if>
|
</if>
|
||||||
<if test= " locationIds != null and locationIds.size() > 0">
|
<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=")"
|
<foreach collection="locationIds" item="id" index="index" open="(" close=")"
|
||||||
separator=",">
|
separator=",">
|
||||||
#{id}
|
#{id}
|
||||||
</foreach>
|
</foreach>
|
||||||
</if>
|
</if>
|
||||||
<if test= " mapIds != null and mapIds.size() > 0">
|
<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=")"
|
<foreach collection="mapIds" item="mapId" index="index" open="(" close=")"
|
||||||
separator=",">
|
separator=",">
|
||||||
#{mapId}
|
#{mapId}
|
||||||
</foreach>
|
</foreach>
|
||||||
</if>
|
</if>
|
||||||
<if test= '"1"=="1"'>
|
<if test= '"1"=="1"'>
|
||||||
AND location_enable = '1'
|
AND t1.location_enable = '1'
|
||||||
AND location_lock = '1'
|
AND t1.location_lock = '1'
|
||||||
AND location_type = '0'
|
AND t1.location_type = '0'
|
||||||
|
</if>
|
||||||
|
<if test= "locationUseStatus != null and locationUseStatus == '0'.toString()">
|
||||||
|
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)
|
||||||
|
</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>
|
</if>
|
||||||
</where>
|
</where>
|
||||||
order by location_number desc , location_storey asc
|
order by t1.location_number desc , t1.location_storey asc
|
||||||
limit 1
|
limit 1
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
|
@ -197,6 +197,26 @@
|
|||||||
and t2.task_type = '3'
|
and t2.task_type = '3'
|
||||||
</select>
|
</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"-->
|
<!--keyProperty="id" useGeneratedKeys="true"-->
|
||||||
<insert id="insertBatchList" >
|
<insert id="insertBatchList" >
|
||||||
|
Loading…
Reference in New Issue
Block a user