no message
							parent
							
								
									09224ef6ef
								
							
						
					
					
						commit
						48efc8430a
					
				| 
						 | 
					@ -434,11 +434,11 @@ public class BydAppServiceImpl implements BydAppService {
 | 
				
			||||||
            throw new BadRequestException(dstStockCode + "目标托盘没有在" + areaName);
 | 
					            throw new BadRequestException(dstStockCode + "目标托盘没有在" + areaName);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (BizStatus.XJ.equals(task.getItemKey().getItem().getGoodType())) {
 | 
					/*        if (BizStatus.XJ.equals(task.getItemKey().getItem().getGoodType())) {
 | 
				
			||||||
            if (!dstStockCode.equals(pick.getStock())) {
 | 
					            if (!dstStockCode.equals(pick.getStock())) {
 | 
				
			||||||
                throw new BadRequestException(pick.getGdCode() + "工单只能放入同一个货架! 请放入" + pick.getCode() + "货架!");
 | 
					                throw new BadRequestException(pick.getGdCode() + "工单只能放入同一个货架! 请放入" + pick.getCode() + "货架!");
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }*/
 | 
				
			||||||
        return dstStock;
 | 
					        return dstStock;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -128,6 +128,16 @@ public interface AgvTaskService {
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    Boolean findByEndSlotCode(String endSlotCode, String type, String jobType);
 | 
					    Boolean findByEndSlotCode(String endSlotCode, String type, String jobType);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * 根据终点查询是否有重复任务
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param endSlotCode 点位
 | 
				
			||||||
 | 
					     * @param type        任务类型
 | 
				
			||||||
 | 
					     * @param jobType     作业类型
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    Boolean isByFxEndSlotCode(String endSlotCode, String type, String jobType);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * 叉车任务一个一个下发
 | 
					     * 叉车任务一个一个下发
 | 
				
			||||||
     *
 | 
					     *
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -166,6 +166,18 @@ public class AgvTaskServiceImpl implements AgvTaskService {
 | 
				
			||||||
        return agvTaskList.isEmpty();
 | 
					        return agvTaskList.isEmpty();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public Boolean isByFxEndSlotCode(String endSlotCode, String type, String jobType) {
 | 
				
			||||||
 | 
					        String hql = "select COUNT(agv.id) from AgvTask agv " +
 | 
				
			||||||
 | 
					                " where  agv.endSlotCode='" + endSlotCode + "' " +
 | 
				
			||||||
 | 
					                " and agv.type='" + type + "' " +
 | 
				
			||||||
 | 
					                " and agv.jobType='" + jobType + "' " +
 | 
				
			||||||
 | 
					                " and agv.status not in ('OPEN','FINISH','CANCEL') ";
 | 
				
			||||||
 | 
					        Query query = entityMapper.createQuery(hql);
 | 
				
			||||||
 | 
					        Long count = (Long) query.getSingleResult();
 | 
				
			||||||
 | 
					        return count<2;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
    public Boolean findByCcEndSlotCode(String endSlotCode, String type, String jobType) {
 | 
					    public Boolean findByCcEndSlotCode(String endSlotCode, String type, String jobType) {
 | 
				
			||||||
        String hql = " from AgvTask agv " +
 | 
					        String hql = " from AgvTask agv " +
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -773,24 +773,29 @@ public class KMReServiceImpl implements KMReService {
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    private void handleJl(Stock stock, Point endPoint, AgvTask agvTask) {
 | 
					    private void handleJl(Stock stock, Point endPoint, AgvTask agvTask) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // 查询与当前 AGV 任务关联的任务列表
 | 
				
			||||||
        List<Task> taskList = taskService.findTaskByCallAgvTask(agvTask.getId());
 | 
					        List<Task> taskList = taskService.findTaskByCallAgvTask(agvTask.getId());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // 根据任务中的物料类型,确定对应的区域名称列表
 | 
				
			||||||
        List<String> areaNames = taskList.stream()
 | 
					        List<String> areaNames = taskList.stream()
 | 
				
			||||||
                .map(task -> task.getItemKey().getItem())
 | 
					                .map(task -> {
 | 
				
			||||||
                .map(item -> BizStatus.XJ.equals(item.getGoodType()) ? AreaNameDic.XJFBCQ : AreaNameDic.DJFBCQ)
 | 
					                    Item item = task.getItemKey().getItem();
 | 
				
			||||||
 | 
					                    return BizStatus.XJ.equals(item.getGoodType()) ? AreaNameDic.XJFBCQ : AreaNameDic.DJFBCQ;
 | 
				
			||||||
 | 
					                })
 | 
				
			||||||
                .collect(Collectors.toList());
 | 
					                .collect(Collectors.toList());
 | 
				
			||||||
        List<Inventory> allInventories = new ArrayList<>();
 | 
					
 | 
				
			||||||
        for (String areaName : areaNames) {
 | 
					        // 查询所有区域的库存列表
 | 
				
			||||||
            List<Inventory> inventoryList = inventoryRepository.queryInventory(stock.getId(), null, null, areaName, stock.getDept().getId());
 | 
					        List<Inventory> allInventories = areaNames.stream()
 | 
				
			||||||
            allInventories.addAll(inventoryList);
 | 
					                .flatMap(areaName -> inventoryRepository.queryInventory(stock.getId(), null, null, areaName, stock.getDept().getId()).stream())
 | 
				
			||||||
        }
 | 
					                .collect(Collectors.toList());
 | 
				
			||||||
        // 删除所有查询到的库存
 | 
					
 | 
				
			||||||
 | 
					        // 如果库存列表不为空,删除所有库存记录
 | 
				
			||||||
        if (!allInventories.isEmpty()) {
 | 
					        if (!allInventories.isEmpty()) {
 | 
				
			||||||
            inventoryRepository.deleteAll(allInventories);
 | 
					            inventoryRepository.deleteAll(allInventories);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        for (Task task : taskList) {
 | 
					
 | 
				
			||||||
            //回传MES
 | 
					        // 回传 MES
 | 
				
			||||||
            pickService.returnPickByTask(task);
 | 
					        taskList.forEach(pickService::returnPickByTask);
 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        //点位占用
 | 
					        //点位占用
 | 
				
			||||||
        pointService.usedPoint(endPoint);
 | 
					        pointService.usedPoint(endPoint);
 | 
				
			||||||
| 
						 | 
					@ -798,26 +803,43 @@ public class KMReServiceImpl implements KMReService {
 | 
				
			||||||
        //容器占用
 | 
					        //容器占用
 | 
				
			||||||
        stockService.usedStock(stock, endPoint, BaseStatus.USED);
 | 
					        stockService.usedStock(stock, endPoint, BaseStatus.USED);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // 根据叫料单号查找 Pick 对象
 | 
				
			||||||
        Pick pick = pickService.findByPickCode(agvTask.getLineSlotCode());
 | 
					        Pick pick = pickService.findByPickCode(agvTask.getLineSlotCode());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // 刷新 Pick 对象的状态
 | 
				
			||||||
        pickService.refreshPickStatus(pick);
 | 
					        pickService.refreshPickStatus(pick);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        //清空叫料点,等待下一次叫料
 | 
					        //清空叫料点,等待下一次叫料
 | 
				
			||||||
 | 
					        updateCallPoint(pick, endPoint);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * 更新 Pick 对象的叫料点信息
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param pick     Pick 对象
 | 
				
			||||||
 | 
					     * @param endPoint 结束点位
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    private void updateCallPoint(Pick pick, Point endPoint) {
 | 
				
			||||||
 | 
					        // 将叫料点字符串拆分为集合
 | 
				
			||||||
        Set<String> endPointList = new HashSet<>(Arrays.asList(pick.getCallPoint().split(",")));
 | 
					        Set<String> endPointList = new HashSet<>(Arrays.asList(pick.getCallPoint().split(",")));
 | 
				
			||||||
 | 
					        // 移除结束点位的代码
 | 
				
			||||||
        boolean isRemoved = endPointList.remove(endPoint.getCode());
 | 
					        boolean isRemoved = endPointList.remove(endPoint.getCode());
 | 
				
			||||||
        if (isRemoved) {
 | 
					        if (isRemoved) {
 | 
				
			||||||
            String result = endPointList.stream().collect(Collectors.joining(", "));
 | 
					            // 将剩余的叫料点代码用逗号连接成字符串
 | 
				
			||||||
 | 
					            String result = endPointList.stream().collect(Collectors.joining(","));
 | 
				
			||||||
            if (!result.isEmpty()) {
 | 
					            if (!result.isEmpty()) {
 | 
				
			||||||
 | 
					                // 更新叫料点信息,设置为还有叫料
 | 
				
			||||||
                pick.setCallPoint(result);
 | 
					                pick.setCallPoint(result);
 | 
				
			||||||
                pick.setIsCall(true);
 | 
					                pick.setIsCall(true);
 | 
				
			||||||
                pickService.update(pick);
 | 
					 | 
				
			||||||
            } else {
 | 
					            } else {
 | 
				
			||||||
 | 
					                // 清空叫料点信息,设置为无叫料
 | 
				
			||||||
                pick.setCallPoint(null);
 | 
					                pick.setCallPoint(null);
 | 
				
			||||||
                pick.setIsCall(false);
 | 
					                pick.setIsCall(false);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            // 更新 Pick 对象
 | 
				
			||||||
            pickService.update(pick);
 | 
					            pickService.update(pick);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -360,10 +360,6 @@ public class MesServiceImpl implements MesService {
 | 
				
			||||||
            return srcPointCode + "点位不存在,请核实!";
 | 
					            return srcPointCode + "点位不存在,请核实!";
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // 验证终点是否有任务
 | 
					 | 
				
			||||||
        if (!agvTaskService.isEndPointAvailable(dstPointCode, BizStatus.Fx_Off_Line, "ROLLER_MOVE")) {
 | 
					 | 
				
			||||||
            return dstPointCode + "点位有任务,请稍后再试!";
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // 生成任务
 | 
					        // 生成任务
 | 
				
			||||||
        AgvTask agvTask = agvTaskService.createAgvTask(BizStatus.Fx_Off_Line, null, srcPointCode, dstPointCode, "ROLLER_MOVE");
 | 
					        AgvTask agvTask = agvTaskService.createAgvTask(BizStatus.Fx_Off_Line, null, srcPointCode, dstPointCode, "ROLLER_MOVE");
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -279,6 +279,7 @@ public class TaskServiceImpl implements TaskService {
 | 
				
			||||||
        agvTask.setLineSlotCode(pick.getCode());
 | 
					        agvTask.setLineSlotCode(pick.getCode());
 | 
				
			||||||
        agvTaskService.update(agvTask);*/
 | 
					        agvTaskService.update(agvTask);*/
 | 
				
			||||||
        List<String> endPoints = getValuesFromMap(endPointList, pointMap);
 | 
					        List<String> endPoints = getValuesFromMap(endPointList, pointMap);
 | 
				
			||||||
 | 
					        int taskCount = 0;
 | 
				
			||||||
        for (Task task : taskList) {
 | 
					        for (Task task : taskList) {
 | 
				
			||||||
            for (String endPointCode : endPoints) {
 | 
					            for (String endPointCode : endPoints) {
 | 
				
			||||||
                if (agvTaskService.isEndPointAvailable(endPointCode, BizStatus.CALL_PICK, "RACK_MOVE")) {
 | 
					                if (agvTaskService.isEndPointAvailable(endPointCode, BizStatus.CALL_PICK, "RACK_MOVE")) {
 | 
				
			||||||
| 
						 | 
					@ -288,8 +289,16 @@ public class TaskServiceImpl implements TaskService {
 | 
				
			||||||
                    task.setCallAgvTaskId(agvTask.getId());
 | 
					                    task.setCallAgvTaskId(agvTask.getId());
 | 
				
			||||||
                    taskRepository.save(task);
 | 
					                    taskRepository.save(task);
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 | 
					                taskCount++;
 | 
				
			||||||
 | 
					                if (taskCount >= taskList.size()) {
 | 
				
			||||||
 | 
					                    break; // 当处理的任务数量达到 taskList 的长度时,跳出内层循环
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					            if (taskCount >= taskList.size()) {
 | 
				
			||||||
 | 
					                break; // 当处理的任务数量达到 taskList 的长度时,跳出外层循环
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -50,6 +50,11 @@ public class fxTask {
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private void processAgvTask(AgvTask agvTask) {
 | 
					    private void processAgvTask(AgvTask agvTask) {
 | 
				
			||||||
 | 
					            if(agvTaskService.isByFxEndSlotCode(agvTask.getEndSlotCode(), BizStatus.Fx_Off_Line,"ROLLER_MOVE")){
 | 
				
			||||||
                kmReService.sendAgvTask(agvTask, kmReService.sendAgvTaskGtJson(agvTask));
 | 
					                kmReService.sendAgvTask(agvTask, kmReService.sendAgvTaskGtJson(agvTask));
 | 
				
			||||||
 | 
					            }else{
 | 
				
			||||||
 | 
					                throw new BadRequestException("任务排队中");
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -49,7 +49,7 @@ public class pickTask {
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    public void allocatePick() {
 | 
					    public void allocatePick() {
 | 
				
			||||||
        List<String> statuses = Arrays.asList(BizStatus.OPEN, BizStatus.ASSIGN, BizStatus.PICKUP);
 | 
					        List<String> statuses = Arrays.asList(BizStatus.OPEN, BizStatus.ASSIGN, BizStatus.PICKUP);
 | 
				
			||||||
        List<Pick> pickList = pickService.findByPickStatus(statuses, null);
 | 
					        List<Pick> pickList = pickService.findByPickStatus(statuses, true);
 | 
				
			||||||
        if (pickList.isEmpty()) {
 | 
					        if (pickList.isEmpty()) {
 | 
				
			||||||
            throw new BadRequestException("无待分配的成品出库单,分配失败!");
 | 
					            throw new BadRequestException("无待分配的成品出库单,分配失败!");
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -26,7 +26,7 @@ public class EladminSystemApplicationTests {
 | 
				
			||||||
        // 创建一个 HashSet 实例
 | 
					        // 创建一个 HashSet 实例
 | 
				
			||||||
        Set<String> hashSet = new HashSet<>();
 | 
					        Set<String> hashSet = new HashSet<>();
 | 
				
			||||||
        // 向集合中添加元素
 | 
					        // 向集合中添加元素
 | 
				
			||||||
        hashSet.add("QXJL001");
 | 
					        hashSet.add("QXJL002");
 | 
				
			||||||
        hashSet.add("QXJL002");
 | 
					        hashSet.add("QXJL002");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // 打印原始集合
 | 
					        // 打印原始集合
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue