package com.huaheng.api.acs.service; import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.huaheng.api.acs.domain.AgvTask; import com.huaheng.api.acs.domain.StateInfoUploadModel; import com.huaheng.api.acs.mapper.AcsMapper; import com.huaheng.common.constant.HttpConstant; import com.huaheng.common.constant.QuantityConstant; import com.huaheng.common.exception.service.ServiceException; import com.huaheng.common.utils.StringUtils; import com.huaheng.common.utils.http.HttpUtils; import com.huaheng.common.utils.security.ShiroUtils; import com.huaheng.framework.web.domain.AjaxResult; import com.huaheng.framework.web.service.ConfigService; import com.huaheng.pc.config.address.service.AddressService; import com.huaheng.pc.config.container.domain.Container; import com.huaheng.pc.config.container.service.ContainerService; import com.huaheng.pc.config.pointPosition.domain.PointPosition; import com.huaheng.pc.config.pointPosition.service.PointPositionService; import com.huaheng.pc.inventory.inventoryHeader.domain.InventoryHeader; import com.huaheng.pc.inventory.inventoryHeader.service.InventoryHeaderService; import com.huaheng.pc.task.taskHeader.domain.TaskHeader; import com.huaheng.pc.task.taskHeader.service.TaskHeaderService; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.util.*; /** * @ClassName AcsServiceImpl * @Description TODO * @Author Administrator * @Date 2019/12/2615:38 */ @Service public class AcsServiceImpl extends ServiceImpl<AcsMapper,AgvTask> implements AcsService { // public static final int STATUS_TASK_CARRY=100; 搬运任务 // public static final int STATUS_TASK_WALK=200; 行走任务 // public static final int STATUS_TASK_PICKUP=300;取货任务 // public static final int STATUS_TASK_Release=400;放货任务 // public static final String STATUS_POSITION_EMPTY="empty"; // public static final String STATUS_POSITION_SOME="some"; // public static final String STATUS_POSITION_FULL="full"; // public static final String STATUS_POSITION_LOCK="lock"; @Resource private ConfigService configService; @Resource private AddressService addressService; @Resource private PointPositionService pointPositionService; @Resource private TaskHeaderService taskHeaderService; @Resource private ContainerService containerService; @Resource private InventoryHeaderService inventoryHeaderService; //AGV信息上传 @Override public AjaxResult StateInfoUpload(StateInfoUploadModel model) { return null; } //AGV信息回传 @Override @Transactional(rollbackFor = Exception.class) public AjaxResult TaskConfirm(AgvTask agvTask) { return null;} @Override @Transactional(rollbackFor = Exception.class) public AjaxResult createAGVTask(AgvTask agvTask) { //校验请求参数 checkAgvTaskPosition(agvTask); //校验托盘是否存在任务及是否锁定 checkContainerAndPositionStatus(agvTask); //校验自己生成的任务中源点位的托盘和实际托盘一不一致 checkContainerAndPositionLove(agvTask); agvTask.setStatus(QuantityConstant.TASK_STATUS_BUILD); agvTask.setCreatedBy(ShiroUtils.getLoginName()); agvTask.setTaskType(QuantityConstant.STATUS_TASK_CARRY); agvTask.setCreatedTime(new Date()); agvTask.setUpdated(new Date()); agvTask.setUpdatedBy(ShiroUtils.getLoginName()); if (save(agvTask)) { pointPositionService.updateStatus(agvTask.getFromPort(), QuantityConstant.STATUS_POSITION_LOCK, agvTask.getWarehouseCode()); pointPositionService.updateStatus(agvTask.getToPort(), QuantityConstant.STATUS_POSITION_LOCK, agvTask.getWarehouseCode()); containerService.updateStatus(agvTask.getContainerCode(),QuantityConstant.STATUS_CONTAINER_LOCK,agvTask.getWarehouseCode()); } else { throw new ServiceException("AGV创建任务失败"); } return AjaxResult.success("执行生成任务成功", agvTask); } @Override @Transactional public AjaxResult createAGVTask2(TaskHeader taskHeader) { try { if(taskHeader.getTaskType().equals(QuantityConstant.TASK_TYPE_WHOLESHIPMENT)){ AgvTask agvTask=new AgvTask(); agvTask.setTaskType(QuantityConstant.STATUS_TASK_CARRY); agvTask.setContainerCode(taskHeader.getContainerCode()); agvTask.setFromPort(taskHeader.getPort()); agvTask.setToPort(""); agvTask.setWarehouseCode(taskHeader.getWarehouseCode()); agvTask.setStatus(QuantityConstant.TASK_STATUS_BUILD); agvTask.setCreatedBy(taskHeader.getCreatedBy()); agvTask.setCreatedTime(new Date()); if (save(agvTask)) { pointPositionService.updateStatus(agvTask.getFromPort(), QuantityConstant.STATUS_POSITION_LOCK, agvTask.getWarehouseCode()); containerService.updateStatus(agvTask.getContainerCode(),QuantityConstant.STATUS_CONTAINER_LOCK,agvTask.getWarehouseCode()); } } }catch (Exception e) { taskHeader.setUserDef3("新增AGV任务失败了"); taskHeaderService.updateById(taskHeader); } return null; } @Override @Transactional(rollbackFor = Exception.class) public AjaxResult sendTaskToAGV(Integer[] AgvTaskIds) { AgvTask task = null; for (Integer taskId : AgvTaskIds) { task = getById(taskId); if (task.getStatus() >= QuantityConstant.TASK_STATUS_RELEASE) { return AjaxResult.error("任务" + taskId + "已经下发,请不要重复下发,操作中止"); } if(StringUtils.isEmpty(task.getToPort())){ return AjaxResult.error("任务没有目标点位,不允许下发"); } LambdaQueryWrapper<AgvTask> agvTaskLambdaQueryWrapper=Wrappers.lambdaQuery(); agvTaskLambdaQueryWrapper.eq(AgvTask::getToPort,task.getToPort()) .eq(AgvTask::getWarehouseCode,task.getWarehouseCode()) .ge(AgvTask::getStatus,QuantityConstant.TASK_STATUS_RELEASE) .lt(AgvTask::getStatus,QuantityConstant.TASK_STATUS_COMPLETED); List<AgvTask> list = list(agvTaskLambdaQueryWrapper); if(list!=null&&list.size()>0){ return AjaxResult.error("目标点位存在任务,请更换目标点位"); } // 给AGV传递任务 AjaxResult ajaxResult = agvTaskAssign(task); if (ajaxResult != null && ajaxResult.hasErr()) { return AjaxResult.error(ajaxResult.getMsg()); } //修改任务头表 task.setId(taskId); task.setStatus(QuantityConstant.TASK_STATUS_RELEASE); task.setUpdated(new Date()); task.setUpdatedBy(ShiroUtils.getLoginName()); saveOrUpdate(task); } return AjaxResult.success("执行下发任务成功", task); } @Override @Transactional(rollbackFor = Exception.class) public AjaxResult agvTaskAssign(AgvTask agvTask) { //1、判断agvHeader是否为空 if (agvTask == null) { return AjaxResult.error("Agv任务为空"); } //2、判断必填字段是否满足 if (agvTask.getId() == null) { return AjaxResult.error("Agv任务号Id为空"); } if (agvTask.getTaskType() == null) { return AjaxResult.error("Agv任务类型为空"); } String containerCode = agvTask.getContainerCode(); if (StringUtils.isEmpty(containerCode)) { return AjaxResult.error("Agv任务中容器为空"); } String warehouseCode = agvTask.getWarehouseCode(); //3、转换实体,初始化Agv任务实体 agvTask.setTaskNo(String.valueOf(agvTask.getId())); //4、发送数据 return sendDataToAgv(agvTask.getId(),warehouseCode,"1",agvTask); } @Override @Transactional(rollbackFor = Exception.class) public AjaxResult cancelAGVTask(Integer[] AgvTaskIds) { for (int taskId : AgvTaskIds) { AgvTask agvTask = getById(taskId); if (agvTask == null) { return AjaxResult.error("任务" + taskId + "未找到,操作中止"); } if (agvTask.getStatus() > QuantityConstant.TASK_STATUS_RELEASE) { return AjaxResult.error("存在任务" + agvTask.getId() + "已下发或执行,操作中止"); } int preTaskNo = taskId; LambdaQueryWrapper<AgvTask> AgvLambdaQueryWrapper = Wrappers.lambdaQuery(); AgvLambdaQueryWrapper.eq(AgvTask::getPreTaskNo, preTaskNo); AgvTask AgvTaskHeader = getOne(AgvLambdaQueryWrapper); if (AgvTaskHeader != null) { return AjaxResult.error("取消任务失败, 有前置任务" + agvTask.getId()); } //查出任务明细 //删除子任务 //删除主任务 removeById(taskId); //盘点取消任务,恢复明细状态为1 int taskType = agvTask.getTaskType().intValue(); switch (taskType) { case QuantityConstant.STATUS_TASK_CARRY: case QuantityConstant.STATUS_TASK_WALK: break; case QuantityConstant.STATUS_TASK_PICKUP: case QuantityConstant.STATUS_TASK_RELEASE: break; default: break; } cancelPositionStatus(agvTask); cancelContainerStatus(agvTask); } return AjaxResult.success("取消任务成功!"); } @Override @Transactional(rollbackFor = Exception.class) public AjaxResult cancelTask(Integer id, String warehouseCode, String area) { //1、判断参数是否为空 if(id == null) throw new ServiceException("任务号为空"); List<Integer> list=new ArrayList<>(); list.add(id); //2、发送数据 return sendDataToAgv(id,warehouseCode,area,list); } @Override @Transactional(rollbackFor = Exception.class) public AjaxResult updateAGVTask(String agvTaskId, Integer priority) { if(StringUtils.isEmpty(agvTaskId)) throw new ServiceException("任务号为空"); AgvTask agvTask = getById(Integer.parseInt(agvTaskId)); agvTask.setPriority(priority); agvTask.setUpdated(new Date()); agvTask.setUpdatedBy(ShiroUtils.getLoginName()); if(!updateById(agvTask))throw new ServiceException("更新优先级失败"); return AjaxResult.success(); } @Override @Transactional(rollbackFor = Exception.class) public AjaxResult updateTask(Integer id, String warehouseCode, Integer priority) { if(id == null) throw new ServiceException("任务号为空"); AgvTask agvTask=new AgvTask(); agvTask.setTaskNo(String.valueOf(id)); agvTask.setPriority(priority); return sendDataToAgv(id,warehouseCode,"1",agvTask); } @Override @Transactional(rollbackFor = Exception.class) public AjaxResult notifyAGVPort(Map map) { AgvTask agvTask=new AgvTask(); if(map.isEmpty()) return AjaxResult.error("请求数据为空"); Object o1=map.get("taskNo"); Object o2=map.get("carNo"); Object o3=map.get("oldPort"); Object o4=map.get("newPort"); if(StringUtils.isNull(o1)) return AjaxResult.error("任务号为空"); if(StringUtils.isNull(o2)) return AjaxResult.error("小车编号为空"); if(StringUtils.isNull(o3)) return AjaxResult.error("起点为空"); if(StringUtils.isNull(o4)) return AjaxResult.error("终点为空"); Integer taskNo=Integer.valueOf(o1.toString()); String carNo=o2.toString(); String fromPort=o3.toString(); String toPort=o4.toString(); agvTask.setId(taskNo); agvTask.setCarNo(carNo); agvTask.setFromPort(fromPort); agvTask.setToPort(toPort); AjaxResult ajaxResult = checkPointPositionExist(agvTask); if(ajaxResult.hasErr()) return ajaxResult; if(!updateById(agvTask)){ throw new ServiceException("更新失败"); }; return ajaxResult; } @Override @Transactional(rollbackFor = Exception.class) public AjaxResult notifyAGVTask(Map map) { AgvTask agvTask=new AgvTask(); if(map.isEmpty()) return AjaxResult.error("请求数据为空"); Object o1=map.get("taskNo"); Object o2=map.get("carNo"); Object o3=map.get("status"); if(StringUtils.isNull(o1)) return AjaxResult.error("任务号为空"); if(StringUtils.isNull(o2)) return AjaxResult.error("小车编号为空"); if(StringUtils.isNull(o3)) return AjaxResult.error("任务状态为空"); Integer taskNo=Integer.valueOf(o1.toString()); String carNo=o2.toString(); String status=o3.toString(); agvTask.setId(taskNo); agvTask.setCarNo(carNo); agvTask.setStatus(Integer.parseInt(status)); AgvTask task = getById(taskNo); if(task==null)return AjaxResult.error("任务号"+taskNo+"不存在"); if(task.getStatus().equals(QuantityConstant.TASK_STATUS_COMPLETED))return AjaxResult.error("任务"+taskNo+"已经完成"); if(agvTask.getStatus().equals(QuantityConstant.TASK_STATUS_RUNNING)){ pointPositionService.updateStatus(task.getFromPort(),QuantityConstant.STATUS_POSITION_EMPTY,task.getWarehouseCode()); pointPositionService.setContainerCode(task.getFromPort(),null,task.getWarehouseCode()); updateById(agvTask); } if(agvTask.getStatus().equals(QuantityConstant.TASK_STATUS_COMPLETED)){ pointPositionService.updateStatus(task.getFromPort(),QuantityConstant.STATUS_POSITION_EMPTY,task.getWarehouseCode()); pointPositionService.updateStatus(task.getToPort(),QuantityConstant.STATUS_POSITION_SOME,task.getWarehouseCode()); pointPositionService.setContainerCode(task.getFromPort(),null,task.getWarehouseCode()); pointPositionService.setContainerCode(task.getToPort(),task.getContainerCode(),task.getWarehouseCode()); containerService.updateLocationCodeAndStatus(task.getContainerCode(),task.getToPort(),QuantityConstant.STATUS_CONTAINER_EMPTY,task.getWarehouseCode()); updateById(agvTask); cancelContainerStatus(task); } if(!updateById(agvTask)){ throw new ServiceException("更新失败"); }; return AjaxResult.success(); } @Override @Transactional(rollbackFor = Exception.class) public AjaxResult completeTaskByWMS(String taskId) { if(StringUtils.isEmpty(taskId)){ return AjaxResult.error("任务id为空"); } AgvTask agvTask = getById(taskId); if (agvTask.getStatus() == QuantityConstant.TASK_STATUS_BUILD) { return AjaxResult.error("任务" + taskId + "未下发,请不要直接完成"); } //更新点位和托盘信息 if(StringUtils.isNotEmpty(agvTask.getFromPort())){ PointPosition sourcePosition = pointPositionService.getPositionByCode(agvTask.getFromPort(), agvTask.getWarehouseCode()); if(StringUtils.isNull(sourcePosition)){ return AjaxResult.error("源点位未找到"); } pointPositionService.updateStatus(agvTask.getFromPort(), QuantityConstant.STATUS_POSITION_EMPTY,agvTask.getWarehouseCode()); pointPositionService.setContainerCode(agvTask.getFromPort(),null,agvTask.getWarehouseCode()); } if(StringUtils.isNotEmpty(agvTask.getToPort())){ PointPosition desPosition = pointPositionService.getPositionByCode(agvTask.getToPort(), agvTask.getWarehouseCode()); if(StringUtils.isNull(desPosition)){ return AjaxResult.error("目标点位未找到"); } pointPositionService.updateStatus(agvTask.getToPort(), QuantityConstant.STATUS_POSITION_SOME,agvTask.getWarehouseCode()); pointPositionService.setContainerCode(agvTask.getToPort(),agvTask.getContainerCode(),agvTask.getWarehouseCode()); containerService.updateLocationCodeAndStatus(agvTask.getContainerCode(),agvTask.getToPort(),QuantityConstant.STATUS_CONTAINER_EMPTY,agvTask.getWarehouseCode()); } //更新agv任务状态 agvTask.setStatus(QuantityConstant.TASK_STATUS_COMPLETED); agvTask.setUpdated(new Date()); agvTask.setUpdatedBy(ShiroUtils.getLoginName()); if(!updateById(agvTask))throw new ServiceException("完成任务失败"); return AjaxResult.success(); } //将参数传输给AGV private AjaxResult sendDataToAgv(Integer id,String warehouseCode,String area,Object object){ String value = configService.getKey(QuantityConstant.RULE_CONNECT_AGV); int connectAGV = Integer.parseInt(value); AjaxResult ajaxResult =new AjaxResult(); if (connectAGV == QuantityConstant.RULE_AGV_CONNECT) { String url = addressService.selectAddress(QuantityConstant.ADDRESS_AGV_TASK_ASSIGN, warehouseCode, area); String JsonParam = JSON.toJSONString(object); System.out.println(JsonParam); String result = HttpUtils.bodypost(url, JsonParam, warehouseCode); if (StringUtils.isEmpty(result)) { throw new ServiceException("接口地址错误或返回为空"); } ajaxResult = JSON.parseObject(result, AjaxResult.class); if (ajaxResult.getCode() != HttpConstant.OK) { return AjaxResult.error(ajaxResult.getMsg()); } return ajaxResult; } return AjaxResult.success("下发成功"); } //检查托盘和点位是否存在未完成的任务 private void checkContainerAndPositionStatus(AgvTask agvTask){ TaskHeader containerLKTaskStatus = taskHeaderService.getOne(new LambdaQueryWrapper<TaskHeader>() .eq(TaskHeader::getContainerCode, agvTask.getContainerCode()) .lt(TaskHeader::getStatus, QuantityConstant.TASK_STATUS_COMPLETED)); AgvTask containerAgvTaskStatus = getOne(new LambdaQueryWrapper<AgvTask>() .eq(AgvTask::getContainerCode, agvTask.getContainerCode()) .lt(AgvTask::getStatus, QuantityConstant.TASK_STATUS_COMPLETED)); if (StringUtils.isNotNull(containerLKTaskStatus)||StringUtils.isNotNull(containerAgvTaskStatus)) { throw new ServiceException("托盘"+agvTask.getContainerCode()+"存在未完成的任务"); } Container containerStatus = containerService.getContainerByCode(agvTask.getContainerCode()); if(StringUtils.isNull(containerStatus)){ throw new ServiceException("托盘"+agvTask.getContainerCode()+"不存在"); } if(QuantityConstant.STATUS_CONTAINER_LOCK.equals(containerStatus.getStatus())){ throw new ServiceException("托盘"+agvTask.getContainerCode()+"已锁定"); } PointPosition pointPosition = pointPositionService.getOne(new LambdaQueryWrapper<PointPosition>() .eq(PointPosition::getContainerCode, agvTask.getContainerCode()) .eq(PointPosition::getStatus, QuantityConstant.STATUS_CONTAINER_LOCK)); if (pointPosition != null) { throw new ServiceException("点位"+pointPosition.getPositionName()+"已锁定,托盘在此位置不能生成任务"); } } //根据任务类型检验参数 private void checkAgvTaskPosition(AgvTask agvTask){ if (StringUtils.isNull(agvTask)) { throw new ServiceException("任务数据为空,请重新下发"); } if (StringUtils.isEmpty(agvTask.getContainerCode())) { throw new ServiceException("托盘为空"); } // if (StringUtils.isNull(agvTask.getTaskType())) { // throw new ServiceException("任务类型无"); // } // int taskType = agvTask.getTaskType().intValue(); int taskType=100; PointPosition sourcePosition = pointPositionService.getPositionByCode(agvTask.getFromPort(), agvTask.getWarehouseCode()); PointPosition desPosition = pointPositionService.getPositionByCode(agvTask.getToPort(), agvTask.getWarehouseCode()); if (taskType == QuantityConstant.STATUS_TASK_CARRY || taskType == QuantityConstant.STATUS_TASK_WALK || taskType == QuantityConstant.STATUS_TASK_PICKUP) { if (StringUtils.isEmpty(agvTask.getFromPort())) { throw new ServiceException("源点位为空"); } if (StringUtils.isNull(sourcePosition)) { throw new ServiceException("源点位:" + sourcePosition + "未找到"); } if(sourcePosition.getStatus().equals(QuantityConstant.STATUS_POSITION_LOCK)){ throw new ServiceException("源点位:" + sourcePosition + "禁用"); } } if (taskType == QuantityConstant.STATUS_TASK_CARRY || taskType == QuantityConstant.STATUS_TASK_WALK || taskType == QuantityConstant.STATUS_TASK_RELEASE) { if (StringUtils.isEmpty(agvTask.getToPort())) { throw new ServiceException("目标点位为空"); } if (StringUtils.isNull(desPosition)) { throw new ServiceException("目标点位:" + desPosition + "未找到"); } if(desPosition.getStatus().equals(QuantityConstant.STATUS_POSITION_LOCK)){ throw new ServiceException("目标点位:" + desPosition + "禁用"); } if(StringUtils.isNotEmpty(desPosition.getContainerCode())){ throw new ServiceException("目标点位:" + desPosition + "存在托盘:"+desPosition.getContainerCode()); } if (QuantityConstant.STATUS_CONTAINER_FULL.equals(desPosition.getStatus())) { throw new ServiceException("目标点位:" + desPosition + "已满"); } } } //更新点位状态 private void cancelPositionStatus(AgvTask agvTask) { if (agvTask.getFromPort() != null) { //更新点位状态 PointPosition pointPosition = pointPositionService.getOne(new LambdaQueryWrapper<PointPosition>().eq(PointPosition::getPositionName, agvTask.getFromPort())); if(pointPosition!=null&&StringUtils.isNotEmpty(pointPosition.getContainerCode())){ pointPositionService.updateStatus(agvTask.getFromPort(), QuantityConstant.STATUS_POSITION_SOME,agvTask.getWarehouseCode()); } else { pointPositionService.updateStatus(agvTask.getFromPort(), QuantityConstant.STATUS_POSITION_EMPTY,agvTask.getWarehouseCode()); } } if (agvTask.getToPort() != null) { //更新点位状态 PointPosition pointPosition = pointPositionService.getOne(new LambdaQueryWrapper<PointPosition>().eq(PointPosition::getPositionName, agvTask.getToPort())); if(pointPosition!=null&&StringUtils.isNotEmpty(pointPosition.getContainerCode())){ pointPositionService.updateStatus(agvTask.getToPort(), QuantityConstant.STATUS_POSITION_SOME,agvTask.getWarehouseCode()); } else { pointPositionService.updateStatus(agvTask.getToPort(), QuantityConstant.STATUS_POSITION_EMPTY,agvTask.getWarehouseCode()); } } } //更新容器状态 private void cancelContainerStatus(AgvTask agvTask){ LambdaQueryWrapper<InventoryHeader> inventoryHeaderLambdaQueryWrapper = Wrappers.lambdaQuery(); inventoryHeaderLambdaQueryWrapper.eq(InventoryHeader::getContainerCode, agvTask.getContainerCode()); InventoryHeader inventoryHeader = inventoryHeaderService.getOne(inventoryHeaderLambdaQueryWrapper); Container container = new Container(); container.setStatus(QuantityConstant.STATUS_CONTAINER_EMPTY); if (inventoryHeader != null) { if (QuantityConstant.STATUS_CONTAINER_SOME.equals(inventoryHeader.getContainerStatus())) { container.setStatus(QuantityConstant.STATUS_CONTAINER_SOME); } } LambdaUpdateWrapper<Container> containerUpdateWrapper = Wrappers.lambdaUpdate(); containerUpdateWrapper.eq(Container::getCode, agvTask.getContainerCode()); containerService.update(container, containerUpdateWrapper); } //检查点位是否存在 private AjaxResult checkPointPositionExist(AgvTask agvTask){ PointPosition sourcePosition = pointPositionService.getPositionByCode(agvTask.getFromPort(), "CS0001"); PointPosition desPosition = pointPositionService.getPositionByCode(agvTask.getToPort(), "CS0001"); if (StringUtils.isNull(sourcePosition)) { return AjaxResult.error("源点位:" + sourcePosition + "未找到"); } if (StringUtils.isNull(desPosition)) { return AjaxResult.error("目标点位:" + desPosition + "未找到"); } /*if(desPosition.getStatus().equals(QuantityConstant.STATUS_POSITION_LOCK)){ return AjaxResult.error("目标点位:" + sourcePosition + "禁用"); } if (QuantityConstant.STATUS_CONTAINER_FULL.equals(desPosition.getStatus())) { return AjaxResult.error("目标点位:" + desPosition + "已满"); }*/ return AjaxResult.success(); } //校验自己生成的任务中源点位的托盘和实际托盘一不一致 private void checkContainerAndPositionLove(AgvTask agvTask){ PointPosition pointPosition = pointPositionService.getOne(new LambdaQueryWrapper<PointPosition>().eq(PointPosition::getPositionName, agvTask.getFromPort())); if(pointPosition!=null&&StringUtils.isNotEmpty(pointPosition.getContainerCode())){ if(!agvTask.getContainerCode().equals(pointPosition.getContainerCode())){ throw new ServiceException("源点位上托盘数据和分配的托盘不一致,请核对"); } } } }