no message
							parent
							
								
									8d5654bd23
								
							
						
					
					
						commit
						e8c8c59e35
					
				| 
						 | 
					@ -20,6 +20,7 @@ import com.youchain.businessdata.domain.Inventory;
 | 
				
			||||||
import org.springframework.data.jpa.repository.JpaRepository;
 | 
					import org.springframework.data.jpa.repository.JpaRepository;
 | 
				
			||||||
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
 | 
					import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
 | 
				
			||||||
import org.springframework.data.jpa.repository.Query;
 | 
					import org.springframework.data.jpa.repository.Query;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import java.util.List;
 | 
					import java.util.List;
 | 
				
			||||||
import java.util.Set;
 | 
					import java.util.Set;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -45,7 +46,7 @@ public interface StockRepository extends JpaRepository<Stock, Long>, JpaSpecific
 | 
				
			||||||
    @Query(" from Stock s where s.point.area.name = :areaName " +
 | 
					    @Query(" from Stock s where s.point.area.name = :areaName " +
 | 
				
			||||||
            "and s.point.id > 0 " +
 | 
					            "and s.point.id > 0 " +
 | 
				
			||||||
            "and s.point.status = 'USED'" +
 | 
					            "and s.point.status = 'USED'" +
 | 
				
			||||||
            "and s.status = 'FREE' " +
 | 
					            "and s.status = :status " +
 | 
				
			||||||
            "and s.enabled = true")
 | 
					            "and s.enabled = true")
 | 
				
			||||||
    List<Stock> findByKongStock(String areaName);
 | 
					    List<Stock> findByFreeOrUsedStock(String areaName, String status);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -137,8 +137,9 @@ public interface StockService {
 | 
				
			||||||
     * 查询指定库区可用的空车
 | 
					     * 查询指定库区可用的空车
 | 
				
			||||||
     *
 | 
					     *
 | 
				
			||||||
     * @param areaName 库区
 | 
					     * @param areaName 库区
 | 
				
			||||||
 | 
					     * @param status 状态
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    List<Stock> findByKongStock(String areaName);
 | 
					    List<Stock> findByFreeOrUsedStock(String areaName,String status);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * 根据点位编号查询容器
 | 
					     * 根据点位编号查询容器
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -279,8 +279,8 @@ public class StockServiceImpl implements StockService {
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
    public List<Stock> findByKongStock(String areaName) {
 | 
					    public List<Stock> findByFreeOrUsedStock(String areaName,String status) {
 | 
				
			||||||
        return stockRepository.findByKongStock(areaName);
 | 
					        return stockRepository.findByFreeOrUsedStock(areaName,status);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -254,52 +254,82 @@ public class MesServiceImpl implements MesService {
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private synchronized void moveCpOffUp(String pointCode) {
 | 
					    private synchronized void moveCpOffUp(String pointCode) {
 | 
				
			||||||
 | 
					        // 从成品入库缓存区查询空车;没有在从成品入库区查询空车;
 | 
				
			||||||
        // 从成品入库区查询空车
 | 
					        List<Stock> emptyStockList = stockService.findByFreeOrUsedStock(AreaNameDic.CPRKHCQ, BaseStatus.FREE);
 | 
				
			||||||
        List<Stock> emptyStockList = stockService.findByKongStock(AreaNameDic.CPRKQ);
 | 
					 | 
				
			||||||
        if (emptyStockList.isEmpty()) {
 | 
					        if (emptyStockList.isEmpty()) {
 | 
				
			||||||
            throw new BadRequestException("成品入库区没有空车,请稍后再试!");
 | 
					            emptyStockList = stockService.findByFreeOrUsedStock(AreaNameDic.CPRKQ, BaseStatus.FREE);
 | 
				
			||||||
 | 
					            if (emptyStockList.isEmpty()) {
 | 
				
			||||||
 | 
					                throw new BadRequestException("成品入库区、成品入库缓存区都没有空车,请稍后再试!");
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					        //容器
 | 
				
			||||||
        Stock emptyStock = emptyStockList.get(0);
 | 
					        Stock emptyStock = emptyStockList.get(0);
 | 
				
			||||||
 | 
					        //起点
 | 
				
			||||||
        Point srcPoint = emptyStock.getPoint();
 | 
					        Point srcPoint = emptyStock.getPoint();
 | 
				
			||||||
 | 
					        //终点
 | 
				
			||||||
        Point endPoint = pointService.validatePoint(pointCode);//终点
 | 
					        Point endPoint = pointService.validatePoint(pointCode);
 | 
				
			||||||
 | 
					        //验证终点是否有任务
 | 
				
			||||||
        if (!agvTaskService.findByEndSlotCode(endPoint.getCode(), BizStatus.Cp_Off_Up, "RACK_MOVE")) {
 | 
					        if (!agvTaskService.findByEndSlotCode(endPoint.getCode(), BizStatus.Cp_Off_Up, "RACK_MOVE")) {
 | 
				
			||||||
            // 直接在条件判断为false时抛出异常,表示该点位有任务
 | 
					            // 直接在条件判断为false时抛出异常,表示该点位有任务
 | 
				
			||||||
            throw new BadRequestException(endPoint.getCode() + "点位有任务,请稍后再试!");
 | 
					            throw new BadRequestException(endPoint.getCode() + "点位有任务,请稍后再试!");
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					        //创建Agv任务
 | 
				
			||||||
        //生成任务
 | 
					 | 
				
			||||||
        AgvTask agvTask = agvTaskService.createAgvTask(BizStatus.Cp_Off_Up, emptyStock, srcPoint, endPoint, "RACK_MOVE");
 | 
					        AgvTask agvTask = agvTaskService.createAgvTask(BizStatus.Cp_Off_Up, emptyStock, srcPoint, endPoint, "RACK_MOVE");
 | 
				
			||||||
 | 
					 | 
				
			||||||
        // 更新点位状态
 | 
					        // 更新点位状态
 | 
				
			||||||
        pointService.usedPoint(endPoint);
 | 
					        pointService.usedPoint(endPoint);
 | 
				
			||||||
 | 
					 | 
				
			||||||
        //下发任务
 | 
					        //下发任务
 | 
				
			||||||
        kmReService.sendAgvTask(agvTask, kmReService.sendAgvTaskHjJson(agvTask));
 | 
					        kmReService.sendAgvTask(agvTask, kmReService.sendAgvTaskHjJson(agvTask));
 | 
				
			||||||
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private synchronized void moveCpOffLine(TransTask transTask) {
 | 
					    private synchronized void moveCpOffLine(TransTask transTask) {
 | 
				
			||||||
        Point srcPoint = pointService.validatePoint(transTask.getPointCode());//起点
 | 
					        //判断下线缓存区是否有满货架;
 | 
				
			||||||
 | 
					        List<Stock> fullStockList = stockService.findByFreeOrUsedStock(AreaNameDic.CPXXHC, BaseStatus.USED);
 | 
				
			||||||
 | 
					        if (!fullStockList.isEmpty()) {
 | 
				
			||||||
 | 
					            List<Point> endPointList = pointService.queryPoints(null, BaseStatus.FREE, BaseStatus.BOX, AreaNameDic.CPRKQ);
 | 
				
			||||||
 | 
					            if (!endPointList.isEmpty()) {
 | 
				
			||||||
 | 
					                //容器
 | 
				
			||||||
 | 
					                Stock fullStock = fullStockList.get(0);
 | 
				
			||||||
 | 
					                //起点
 | 
				
			||||||
 | 
					                Point srcPoint = fullStock.getPoint();
 | 
				
			||||||
 | 
					                //终点
 | 
				
			||||||
 | 
					                Point endPoint = endPointList.get(0);
 | 
				
			||||||
 | 
					                //验证终点是否有任务
 | 
				
			||||||
 | 
					                if (agvTaskService.findByEndSlotCode(endPoint.getCode(), BizStatus.Cp_Off_Line, "RACK_MOVE")) {
 | 
				
			||||||
 | 
					                    //创建Agv任务
 | 
				
			||||||
 | 
					                    AgvTask agvTask = agvTaskService.createAgvTask(BizStatus.Cp_Off_Line, fullStock, srcPoint, endPoint, "RACK_MOVE");
 | 
				
			||||||
 | 
					                    // 更新点位状态
 | 
				
			||||||
 | 
					                    pointService.usedPoint(endPoint);
 | 
				
			||||||
 | 
					                    //占用容器
 | 
				
			||||||
 | 
					                    stockService.usedStock(fullStock, srcPoint, BaseStatus.USED);
 | 
				
			||||||
 | 
					                    //下发任务
 | 
				
			||||||
 | 
					                    kmReService.sendAgvTask(agvTask, kmReService.sendAgvTaskHjJson(agvTask));
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        //下线缓存区没有满货架,直接下发当前任务
 | 
				
			||||||
 | 
					        Point srcPoint = pointService.validatePoint(transTask.getPointCode());
 | 
				
			||||||
 | 
					        //容器
 | 
				
			||||||
        Stock stock = stockService.findByPointCode(srcPoint.getCode());
 | 
					        Stock stock = stockService.findByPointCode(srcPoint.getCode());
 | 
				
			||||||
        if (stock == null) {
 | 
					        if (stock == null) {
 | 
				
			||||||
            throw new BadRequestException(srcPoint.getCode() + "点位没有货架!");
 | 
					            throw new BadRequestException(srcPoint.getCode() + "点位没有货架!");
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        List<Point> endPointList = pointService.queryPoints(null, BaseStatus.FREE, BaseStatus.BOX, AreaNameDic.CPRKQ);
 | 
					        List<Point> endPointList = pointService.queryPoints(null, BaseStatus.FREE, BaseStatus.BOX, AreaNameDic.CPRKQ);
 | 
				
			||||||
        if (endPointList.isEmpty()) {
 | 
					        if (endPointList.isEmpty()) {
 | 
				
			||||||
            throw new BadRequestException("成品入库区没有空闲点位!");
 | 
					            endPointList = pointService.queryPoints(null, BaseStatus.FREE, BaseStatus.BOX, AreaNameDic.CPXXHC);
 | 
				
			||||||
 | 
					            if (endPointList.isEmpty()) {
 | 
				
			||||||
 | 
					                throw new BadRequestException("成品入库区和成品下线缓存区都没有空闲点位!");
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					        //终点
 | 
				
			||||||
        Point endPoint = endPointList.get(0);
 | 
					        Point endPoint = endPointList.get(0);
 | 
				
			||||||
 | 
					        //验证终点是否有任务
 | 
				
			||||||
        if (!agvTaskService.findByEndSlotCode(endPoint.getCode(), BizStatus.Cp_Off_Line, "RACK_MOVE")) {
 | 
					        if (!agvTaskService.findByEndSlotCode(endPoint.getCode(), BizStatus.Cp_Off_Line, "RACK_MOVE")) {
 | 
				
			||||||
            // 直接在条件判断为false时抛出异常,表示该点位有任务
 | 
					            // 直接在条件判断为false时抛出异常,表示该点位有任务
 | 
				
			||||||
            throw new BadRequestException(endPoint.getCode() + "点位有任务,请稍后再试!");
 | 
					            throw new BadRequestException(endPoint.getCode() + "点位有任务,请稍后再试!");
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        //创建并下发任务
 | 
					        //创建Agv任务
 | 
				
			||||||
        AgvTask agvTask = agvTaskService.createAgvTask(BizStatus.Cp_Off_Line, stock, srcPoint, endPoint, "RACK_MOVE");
 | 
					        AgvTask agvTask = agvTaskService.createAgvTask(BizStatus.Cp_Off_Line, stock, srcPoint, endPoint, "RACK_MOVE");
 | 
				
			||||||
        // 更新点位状态
 | 
					        // 更新点位状态
 | 
				
			||||||
        pointService.usedPoint(endPoint);
 | 
					        pointService.usedPoint(endPoint);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -241,7 +241,7 @@ public class TaskServiceImpl implements TaskService {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        String dstAreaCode = "小件".equals(goodType) ? AreaNameDic.XJFBCQ : AreaNameDic.DJFBCQ;
 | 
					        String dstAreaCode = "小件".equals(goodType) ? AreaNameDic.XJFBCQ : AreaNameDic.DJFBCQ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        List<Stock> emptyStock = stockService.findByKongStock(srcAreaCode);
 | 
					        List<Stock> emptyStock = stockService.findByFreeOrUsedStock(srcAreaCode, BaseStatus.FREE);
 | 
				
			||||||
        if (emptyStock.isEmpty()) {
 | 
					        if (emptyStock.isEmpty()) {
 | 
				
			||||||
            return;
 | 
					            return;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -57,6 +57,11 @@ public interface AreaNameDic {
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    String CPXXQ = "成品下线区";
 | 
					    String CPXXQ = "成品下线区";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * 成品下线缓存区
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    String CPXXHC = "成品下线缓存";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * 返修上线区
 | 
					     * 返修上线区
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -18,15 +18,6 @@ public  class BaseStatus {
 | 
				
			||||||
     * 占用
 | 
					     * 占用
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    public static String USED = "USED";
 | 
					    public static String USED = "USED";
 | 
				
			||||||
    /**
 | 
					 | 
				
			||||||
     * 可用
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
    public static Boolean T =true;
 | 
					 | 
				
			||||||
    /**
 | 
					 | 
				
			||||||
     * 不可用
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
    public static Boolean F =false;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * 点位类型-线边点位
 | 
					     * 点位类型-线边点位
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
| 
						 | 
					@ -37,13 +28,9 @@ public  class BaseStatus {
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    public static String STORAGE = "STORAGE";
 | 
					    public static String STORAGE = "STORAGE";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					 | 
				
			||||||
     * 输送线
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
    public static String EMPTY = "EMPTY";
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /** 工单类型 成品*/
 | 
					    /** 工单类型 成品*/
 | 
				
			||||||
    public static String GD_TYPE_CT = "成品";
 | 
					    public static String GD_TYPE_CT = "成品";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /** 工单类型 单品*/
 | 
					    /** 工单类型 单品*/
 | 
				
			||||||
    public static String GD_TYPE_DP = "单品";
 | 
					    public static String GD_TYPE_DP = "单品";
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue