no message
							parent
							
								
									95d6533042
								
							
						
					
					
						commit
						9c6b4cb479
					
				| 
						 | 
					@ -678,10 +678,36 @@ public class StockServiceImpl implements StockService {
 | 
				
			||||||
            throw new BadRequestException("未找到相应任务记录!");
 | 
					            throw new BadRequestException("未找到相应任务记录!");
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        Task task = taskService.toEntity(taskDto);//Dto转实体
 | 
					        Task task = taskService.toEntity(taskDto);//Dto转实体
 | 
				
			||||||
        if (!orderNumber.equals(task.getItemKey().getOrderNumber())) {
 | 
					        if (orderNumber.equals(task.getItemKey().getOrderNumber())) {
 | 
				
			||||||
            throw new BadRequestException("扫描的箱号与分配的箱号不一致!");
 | 
					            return task;
 | 
				
			||||||
 | 
					        }else{
 | 
				
			||||||
 | 
					            //重新分配
 | 
				
			||||||
 | 
					            return reassignTask(task, orderNumber);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * 重新分配任务
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    private Task reassignTask(Task task, String orderNumber) {
 | 
				
			||||||
 | 
					        Inventory dstinventory = inventoryRepository.findByOrderNumber(orderNumber,task.getSrcStockCode());
 | 
				
			||||||
 | 
					        if(dstinventory==null){
 | 
				
			||||||
 | 
					            throw new BadRequestException(orderNumber+"箱号无库存,请更换箱号!");
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        double kyQty = dstinventory.getQuantity()-dstinventory.getQueuedQty();
 | 
				
			||||||
 | 
					        if(kyQty<task.getPlanQty()){
 | 
				
			||||||
 | 
					            throw new BadRequestException("库存数量不足,请更换箱号!");
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        Inventory srcinventory = inventoryRepository.findById(task.getInvId()).get();
 | 
				
			||||||
 | 
					        srcinventory.setQueuedQty(srcinventory.getQueuedQty()-task.getPlanQty());
 | 
				
			||||||
 | 
					        inventoryRepository.save(srcinventory);
 | 
				
			||||||
 | 
					        dstinventory.setQueuedQty(dstinventory.getQueuedQty()+task.getPlanQty());
 | 
				
			||||||
 | 
					        inventoryRepository.save(dstinventory);
 | 
				
			||||||
 | 
					        task.setInvId(dstinventory.getId());
 | 
				
			||||||
 | 
					        task.setItemKey(dstinventory.getItemKey());
 | 
				
			||||||
 | 
					        taskRepository.save(task);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return task;
 | 
					        return task;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -55,4 +55,6 @@ public interface InventoryRepository extends JpaRepository<Inventory, Long>, Jpa
 | 
				
			||||||
            "(:type = 'ITEM' and inv.itemKey.item.id = :itemId) or " +
 | 
					            "(:type = 'ITEM' and inv.itemKey.item.id = :itemId) or " +
 | 
				
			||||||
            "(:type = 'WAREHOUSE'))")
 | 
					            "(:type = 'WAREHOUSE'))")
 | 
				
			||||||
    List<Inventory> getInvForPlan(String type, Long areaId, Long itemId);
 | 
					    List<Inventory> getInvForPlan(String type, Long areaId, Long itemId);
 | 
				
			||||||
 | 
					    @Query("from Inventory inv where inv.itemKey.orderNumber=:orderNumber and inv.stockCode=:stockCode ")
 | 
				
			||||||
 | 
					    Inventory findByOrderNumber(String orderNumber, String stockCode);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -134,4 +134,11 @@ public interface AgvTaskService {
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    void agvTaskCallback(AgvTask agvTask, String status, String containerCode);
 | 
					    void agvTaskCallback(AgvTask agvTask, String status, String containerCode);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * 叫料反空车至备料缓存区
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param goodType 小件/大件
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    void callEmptyStock(String goodType);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -69,6 +69,7 @@ public class AgvTaskServiceImpl implements AgvTaskService {
 | 
				
			||||||
    private final AsnDetailService asnDetailService;
 | 
					    private final AsnDetailService asnDetailService;
 | 
				
			||||||
    private final StockRepository stockRepository;
 | 
					    private final StockRepository stockRepository;
 | 
				
			||||||
    private final PickRepository pickRepository;
 | 
					    private final PickRepository pickRepository;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
    public Map<String, Object> queryAll(AgvTaskQueryCriteria criteria, Pageable pageable) {
 | 
					    public Map<String, Object> queryAll(AgvTaskQueryCriteria criteria, Pageable pageable) {
 | 
				
			||||||
        Page<AgvTask> page = agvTaskRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root, criteria, criteriaBuilder), pageable);
 | 
					        Page<AgvTask> page = agvTaskRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root, criteria, criteriaBuilder), pageable);
 | 
				
			||||||
| 
						 | 
					@ -409,6 +410,33 @@ public class AgvTaskServiceImpl implements AgvTaskService {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public void callEmptyStock(String goodType) {
 | 
				
			||||||
 | 
					        String srcAreaCode = "小件".equals(goodType) ? AreaNameDic.JLQ : AreaNameDic.JLQ;
 | 
				
			||||||
 | 
					        String dstAreaCode = "小件".equals(goodType) ? AreaNameDic.XJFBCQ : AreaNameDic.DJFBCQ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        List<Stock> emptyStock = stockRepository.findByEnmptyStock(srcAreaCode);
 | 
				
			||||||
 | 
					        if (emptyStock.isEmpty()) {
 | 
				
			||||||
 | 
					            return;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        Stock stock = emptyStock.get(0);
 | 
				
			||||||
 | 
					        Point srcPoint = stock.getPoint();
 | 
				
			||||||
 | 
					        Point endPoint = pointService.findByCode(null, BaseStatus.FREE, BaseStatus.BOX, dstAreaCode, null, null);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (endPoint == null) {
 | 
				
			||||||
 | 
					            return;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        AgvTask agvTask = new AgvTask(BizStatus.CALL_RETURN, stock.getCode(), srcPoint.getCode(), endPoint.getCode(), BizStatus.OPEN, "RACK_MOVE");
 | 
				
			||||||
 | 
					        agvTaskRepository.save(agvTask);
 | 
				
			||||||
 | 
					        sendAgvTaskHJImpl(agvTask);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        endPoint.setStatus(BaseStatus.USED);
 | 
				
			||||||
 | 
					        pointService.update(endPoint);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private void handleUpContainer(AgvTask agvTask, String containerCode) {
 | 
					    private void handleUpContainer(AgvTask agvTask, String containerCode) {
 | 
				
			||||||
        //顶升释放起点位置状态及容器绑定的起点位置
 | 
					        //顶升释放起点位置状态及容器绑定的起点位置
 | 
				
			||||||
        Point startPoint = pointService.findByCode(agvTask.getStartSlotCode(), null, null, null, null, null);
 | 
					        Point startPoint = pointService.findByCode(agvTask.getStartSlotCode(), null, null, null, null, null);
 | 
				
			||||||
| 
						 | 
					@ -439,7 +467,11 @@ public class AgvTaskServiceImpl implements AgvTaskService {
 | 
				
			||||||
                handleFbq(taskList, stock, endPoint);//备料完成
 | 
					                handleFbq(taskList, stock, endPoint);//备料完成
 | 
				
			||||||
                break;
 | 
					                break;
 | 
				
			||||||
            case AreaNameDic.JLQ:
 | 
					            case AreaNameDic.JLQ:
 | 
				
			||||||
                handleJl(stock, endPoint,agvTask);//叫料完成
 | 
					                handleJl(stock, endPoint, agvTask);//叫料完成
 | 
				
			||||||
 | 
					                break;
 | 
				
			||||||
 | 
					            case AreaNameDic.XJFBCQ:
 | 
				
			||||||
 | 
					            case AreaNameDic.DJFBCQ:
 | 
				
			||||||
 | 
					                handleCPXXAndCPRK(endPoint, stock);//叫料返空完成
 | 
				
			||||||
                break;
 | 
					                break;
 | 
				
			||||||
            case AreaNameDic.CPXXQ:
 | 
					            case AreaNameDic.CPXXQ:
 | 
				
			||||||
            case AreaNameDic.CPRKQ:
 | 
					            case AreaNameDic.CPRKQ:
 | 
				
			||||||
| 
						 | 
					@ -583,7 +615,7 @@ public class AgvTaskServiceImpl implements AgvTaskService {
 | 
				
			||||||
     *
 | 
					     *
 | 
				
			||||||
     * @param stock
 | 
					     * @param stock
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    private void handleJl(Stock stock, Point endPoint,AgvTask agvTask) {
 | 
					    private void handleJl(Stock stock, Point endPoint, AgvTask agvTask) {
 | 
				
			||||||
        List<Inventory> inventoryList = inventoryService.queryInventory(stock);
 | 
					        List<Inventory> inventoryList = inventoryService.queryInventory(stock);
 | 
				
			||||||
        if (!inventoryList.isEmpty()) {
 | 
					        if (!inventoryList.isEmpty()) {
 | 
				
			||||||
            inventoryService.deleteAll(inventoryList.stream().map(Inventory::getId).toArray(Long[]::new));
 | 
					            inventoryService.deleteAll(inventoryList.stream().map(Inventory::getId).toArray(Long[]::new));
 | 
				
			||||||
| 
						 | 
					@ -593,17 +625,17 @@ public class AgvTaskServiceImpl implements AgvTaskService {
 | 
				
			||||||
        endPoint.setStatus(BaseStatus.USED);
 | 
					        endPoint.setStatus(BaseStatus.USED);
 | 
				
			||||||
        pointService.update(endPoint);
 | 
					        pointService.update(endPoint);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        Pick pick=pickRepository.findByPickCode(agvTask.getLineSlotCode());
 | 
					        Pick pick = pickRepository.findByPickCode(agvTask.getLineSlotCode());
 | 
				
			||||||
        if(pick!=null){
 | 
					        if (pick != null) {
 | 
				
			||||||
            pick.setStatus(BizStatus.CLOSE);
 | 
					            pick.setStatus(BizStatus.CLOSE);
 | 
				
			||||||
            pickRepository.save(pick);
 | 
					            pickRepository.save(pick);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        //回传MES
 | 
					        //回传MES
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * 更新库存
 | 
					     * 更新库存
 | 
				
			||||||
     *
 | 
					     *
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -354,10 +354,15 @@ public class PickServiceImpl implements PickService {
 | 
				
			||||||
                agvTask = new AgvTask(BizStatus.PICK, task.getSrcStockCode(), task.getSrcPointCode(), task.getDstPointCode(), BizStatus.OPEN, "FORKLIFT_MOVE");
 | 
					                agvTask = new AgvTask(BizStatus.PICK, task.getSrcStockCode(), task.getSrcPointCode(), task.getDstPointCode(), BizStatus.OPEN, "FORKLIFT_MOVE");
 | 
				
			||||||
                agvTaskRepository.save(agvTask);
 | 
					                agvTaskRepository.save(agvTask);
 | 
				
			||||||
                agvTaskService.sendAgvTaskCCImpl(agvTask);
 | 
					                agvTaskService.sendAgvTaskCCImpl(agvTask);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            task.setAgvTask(agvTask);
 | 
					            task.setAgvTask(agvTask);
 | 
				
			||||||
            task.setTaskStatus(agvTask.getStatus());
 | 
					            task.setTaskStatus(agvTask.getStatus());
 | 
				
			||||||
            taskRepository.save(task);
 | 
					            taskRepository.save(task);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            //叫料区是否有空车,呼叫到备料缓存区
 | 
				
			||||||
 | 
					            agvTaskService.callEmptyStock(task.getPickDetail().getItem().getGoodType());
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        /*更新出库单状态*/
 | 
					        /*更新出库单状态*/
 | 
				
			||||||
        pick.setStatus(BizStatus.PICKUP);
 | 
					        pick.setStatus(BizStatus.PICKUP);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -142,6 +142,12 @@ public interface BizStatus {
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    String CALL_PICK = "CALL_PICK";
 | 
					    String CALL_PICK = "CALL_PICK";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * 任务类型-叫料反空
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    String CALL_RETURN = "CALL_RETURN";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * 库存日志-移位
 | 
					     * 库存日志-移位
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue