no message
							parent
							
								
									0514b2b39f
								
							
						
					
					
						commit
						65bb9f90b5
					
				| 
						 | 
					@ -7,6 +7,7 @@ import com.youchain.basicdata.domain.Area;
 | 
				
			||||||
import com.youchain.basicdata.domain.Item;
 | 
					import com.youchain.basicdata.domain.Item;
 | 
				
			||||||
import com.youchain.basicdata.domain.Point;
 | 
					import com.youchain.basicdata.domain.Point;
 | 
				
			||||||
import com.youchain.basicdata.domain.Stock;
 | 
					import com.youchain.basicdata.domain.Stock;
 | 
				
			||||||
 | 
					import com.youchain.basicdata.repository.StockRepository;
 | 
				
			||||||
import com.youchain.basicdata.service.ItemService;
 | 
					import com.youchain.basicdata.service.ItemService;
 | 
				
			||||||
import com.youchain.basicdata.service.PointService;
 | 
					import com.youchain.basicdata.service.PointService;
 | 
				
			||||||
import com.youchain.basicdata.service.StockService;
 | 
					import com.youchain.basicdata.service.StockService;
 | 
				
			||||||
| 
						 | 
					@ -30,6 +31,7 @@ import java.util.stream.Collectors;
 | 
				
			||||||
@Service
 | 
					@Service
 | 
				
			||||||
@RequiredArgsConstructor
 | 
					@RequiredArgsConstructor
 | 
				
			||||||
public class BydAppServiceImpl implements BydAppService {
 | 
					public class BydAppServiceImpl implements BydAppService {
 | 
				
			||||||
 | 
					    private final StockRepository stockRepository;
 | 
				
			||||||
    private final StockService stockService;
 | 
					    private final StockService stockService;
 | 
				
			||||||
    private final ItemService itemService;
 | 
					    private final ItemService itemService;
 | 
				
			||||||
    private final PointService pointService;
 | 
					    private final PointService pointService;
 | 
				
			||||||
| 
						 | 
					@ -230,7 +232,7 @@ public class BydAppServiceImpl implements BydAppService {
 | 
				
			||||||
    public void unBindContainer(String stockCode) {
 | 
					    public void unBindContainer(String stockCode) {
 | 
				
			||||||
        Stock stock = stockService.validateStock(stockCode);
 | 
					        Stock stock = stockService.validateStock(stockCode);
 | 
				
			||||||
        stock.setStatus(BaseStatus.FREE);
 | 
					        stock.setStatus(BaseStatus.FREE);
 | 
				
			||||||
        stockService.update(stock);
 | 
					        stockRepository.save(stock);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -111,17 +111,6 @@ public class StockController {
 | 
				
			||||||
        return new ResponseEntity<>(HttpStatus.OK);
 | 
					        return new ResponseEntity<>(HttpStatus.OK);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @PutMapping("/updateStockStatus")
 | 
					 | 
				
			||||||
    @Log("批量修改stock的状态")
 | 
					 | 
				
			||||||
    @ApiOperation("批量修改stock的状态")
 | 
					 | 
				
			||||||
    @PreAuthorize("@el.check('stock:edit')")
 | 
					 | 
				
			||||||
    public ResponseEntity<Object> updateStockStatus(@Validated @RequestBody List<Stock> stockList) {
 | 
					 | 
				
			||||||
        for (Stock s : stockList) {
 | 
					 | 
				
			||||||
            stockService.update(s);
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        return new ResponseEntity<>(HttpStatus.OK);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    @DeleteMapping
 | 
					    @DeleteMapping
 | 
				
			||||||
    @Log("删除stock")
 | 
					    @Log("删除stock")
 | 
				
			||||||
    @ApiOperation("删除stock")
 | 
					    @ApiOperation("删除stock")
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -121,8 +121,16 @@ public class StockServiceImpl implements StockService {
 | 
				
			||||||
            point.setStatus(BaseStatus.FREE);
 | 
					            point.setStatus(BaseStatus.FREE);
 | 
				
			||||||
            pointRepository.save(point);
 | 
					            pointRepository.save(point);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (resources.getPoint() != null) {
 | 
					        if (resources.getPoint() != null) {
 | 
				
			||||||
 | 
					            //绑定的点位是否暂用了其他容器
 | 
				
			||||||
            Point point = resources.getPoint();
 | 
					            Point point = resources.getPoint();
 | 
				
			||||||
 | 
					            Stock curStock = this.findByPointCode(point.getCode());
 | 
				
			||||||
 | 
					            if (curStock != null) {
 | 
				
			||||||
 | 
					                if (!curStock.getId().equals(resources.getId())) {
 | 
				
			||||||
 | 
					                    throw new BadRequestException(point.getCode() + "点位绑定的当前容器为" + curStock.getCode());
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
            point.setStatus(BaseStatus.USED);
 | 
					            point.setStatus(BaseStatus.USED);
 | 
				
			||||||
            pointRepository.save(point);
 | 
					            pointRepository.save(point);
 | 
				
			||||||
        } else {
 | 
					        } else {
 | 
				
			||||||
| 
						 | 
					@ -213,7 +221,6 @@ public class StockServiceImpl implements StockService {
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
    public Map<String, Stock> findByCodes(Set<String> stockCodes) {
 | 
					    public Map<String, Stock> findByCodes(Set<String> stockCodes) {
 | 
				
			||||||
        List<Stock> stockList = stockRepository.findByCodes(stockCodes);
 | 
					        List<Stock> stockList = stockRepository.findByCodes(stockCodes);
 | 
				
			||||||
| 
						 | 
					@ -279,8 +286,8 @@ public class StockServiceImpl implements StockService {
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
    public List<Stock> findByFreeOrUsedStock(String areaName,String status) {
 | 
					    public List<Stock> findByFreeOrUsedStock(String areaName, String status) {
 | 
				
			||||||
        return stockRepository.findByFreeOrUsedStock(areaName,status);
 | 
					        return stockRepository.findByFreeOrUsedStock(areaName, status);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -17,6 +17,7 @@ package com.youchain.businessdata.rest;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import com.youchain.annotation.Log;
 | 
					import com.youchain.annotation.Log;
 | 
				
			||||||
import com.youchain.basicdata.domain.*;
 | 
					import com.youchain.basicdata.domain.*;
 | 
				
			||||||
 | 
					import com.youchain.basicdata.repository.StockRepository;
 | 
				
			||||||
import com.youchain.basicdata.service.StockService;
 | 
					import com.youchain.basicdata.service.StockService;
 | 
				
			||||||
import com.youchain.businessdata.domain.*;
 | 
					import com.youchain.businessdata.domain.*;
 | 
				
			||||||
import com.youchain.businessdata.service.*;
 | 
					import com.youchain.businessdata.service.*;
 | 
				
			||||||
| 
						 | 
					@ -52,7 +53,7 @@ public class AsnDetailController {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private final AsnDetailService asnDetailService;
 | 
					    private final AsnDetailService asnDetailService;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private final StockService stockService;
 | 
					    private final StockRepository stockRepository;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Log("导出数据")
 | 
					    @Log("导出数据")
 | 
				
			||||||
    @ApiOperation("导出数据")
 | 
					    @ApiOperation("导出数据")
 | 
				
			||||||
| 
						 | 
					@ -80,7 +81,7 @@ public class AsnDetailController {
 | 
				
			||||||
        asnDetailService.create(asnDetail);
 | 
					        asnDetailService.create(asnDetail);
 | 
				
			||||||
        Stock stock = asnDetail.getStock();
 | 
					        Stock stock = asnDetail.getStock();
 | 
				
			||||||
        stock.setStatus(BaseStatus.USED);
 | 
					        stock.setStatus(BaseStatus.USED);
 | 
				
			||||||
        stockService.update(stock);
 | 
					        stockRepository.save(stock);
 | 
				
			||||||
        return new ResponseEntity<>(HttpStatus.OK);
 | 
					        return new ResponseEntity<>(HttpStatus.OK);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -127,7 +127,6 @@ public interface TaskService {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * 根据出库单查询未完成的Task集合
 | 
					     * 根据出库单查询未完成的Task集合
 | 
				
			||||||
     *
 | 
					 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    List<Task> findByPickNotAllTask();
 | 
					    List<Task> findByPickNotAllTask();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -172,13 +171,11 @@ public interface TaskService {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * 定时任务轮询出库单备料
 | 
					     * 定时任务轮询出库单备料
 | 
				
			||||||
     *
 | 
					 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    void materialPick();
 | 
					    void materialPick();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * 定时任务轮询叫料反空车至备料缓存区
 | 
					     * 定时任务轮询叫料反空车至备料缓存区
 | 
				
			||||||
     *
 | 
					 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    void callEmptyStock(Point point);
 | 
					    void callEmptyStock(Point point);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -195,9 +192,8 @@ public interface TaskService {
 | 
				
			||||||
     *
 | 
					     *
 | 
				
			||||||
     * @param pickDetailId 出库明细ID
 | 
					     * @param pickDetailId 出库明细ID
 | 
				
			||||||
     * @param quantity     数量
 | 
					     * @param quantity     数量
 | 
				
			||||||
     * @param endPoint     点位
 | 
					 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    String allocate(long pickDetailId, double quantity, Point endPoint);
 | 
					    String allocate(long pickDetailId, double quantity);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * 取消分配
 | 
					     * 取消分配
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -493,7 +493,7 @@ public class KMReServiceImpl implements KMReService {
 | 
				
			||||||
            case BizStatus.CALL_PICK:
 | 
					            case BizStatus.CALL_PICK:
 | 
				
			||||||
                handleJl(stock, endPoint, agvTask);//叫料完成
 | 
					                handleJl(stock, endPoint, agvTask);//叫料完成
 | 
				
			||||||
                break;
 | 
					                break;
 | 
				
			||||||
            case BizStatus.CALL_RETURN:
 | 
					            case BizStatus.JL_Back:
 | 
				
			||||||
            case BizStatus.Cp_Off_Up:
 | 
					            case BizStatus.Cp_Off_Up:
 | 
				
			||||||
                handleJlFkAndCpSx(endPoint, stock);//叫料返空完成;成品上线完成
 | 
					                handleJlFkAndCpSx(endPoint, stock);//叫料返空完成;成品上线完成
 | 
				
			||||||
                break;
 | 
					                break;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -286,10 +286,7 @@ public class MesServiceImpl implements MesService {
 | 
				
			||||||
     * @return 空车列表
 | 
					     * @return 空车列表
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    private List<Stock> getEmptyStockList() {
 | 
					    private List<Stock> getEmptyStockList() {
 | 
				
			||||||
        List<Stock> emptyStockList = stockService.findByFreeOrUsedStock(AreaNameDic.CPRKHCQ, BaseStatus.FREE);
 | 
					        List<Stock> emptyStockList = stockService.findByFreeOrUsedStock(AreaNameDic.CPRKQ, BaseStatus.FREE);
 | 
				
			||||||
        if (emptyStockList.isEmpty()) {
 | 
					 | 
				
			||||||
            emptyStockList = stockService.findByFreeOrUsedStock(AreaNameDic.CPRKQ, BaseStatus.FREE);
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        return emptyStockList;
 | 
					        return emptyStockList;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -318,11 +315,6 @@ public class MesServiceImpl implements MesService {
 | 
				
			||||||
        if (srcPoint == null) {
 | 
					        if (srcPoint == null) {
 | 
				
			||||||
            return transTask.getPointCode() + "点位不存在!";
 | 
					            return transTask.getPointCode() + "点位不存在!";
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        // 处理下线缓存区有满货架的情况
 | 
					 | 
				
			||||||
        String result = handleFullStockInCache(srcPoint);
 | 
					 | 
				
			||||||
        if (result != null) {
 | 
					 | 
				
			||||||
            return result;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        //容器
 | 
					        //容器
 | 
				
			||||||
        Stock stock = stockService.findByPointCode(srcPoint.getCode());
 | 
					        Stock stock = stockService.findByPointCode(srcPoint.getCode());
 | 
				
			||||||
| 
						 | 
					@ -336,6 +328,12 @@ public class MesServiceImpl implements MesService {
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            // 生成等待任务
 | 
					            // 生成等待任务
 | 
				
			||||||
            agvTaskService.createAgvTask(BizStatus.Cp_Off_Line, stock, srcPoint.getCode(), null, "RACK_MOVE");
 | 
					            agvTaskService.createAgvTask(BizStatus.Cp_Off_Line, stock, srcPoint.getCode(), null, "RACK_MOVE");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            // 更新点位状态
 | 
				
			||||||
 | 
					            pointService.usedPoint(srcPoint);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            // 占用容器
 | 
				
			||||||
 | 
					            stockService.usedStock(stock, srcPoint, BaseStatus.USED);
 | 
				
			||||||
            return "成品入库区和成品下线缓存区都没有空闲点位,请稍后再试!";
 | 
					            return "成品入库区和成品下线缓存区都没有空闲点位,请稍后再试!";
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -347,13 +345,10 @@ public class MesServiceImpl implements MesService {
 | 
				
			||||||
        // 创建Agv任务
 | 
					        // 创建Agv任务
 | 
				
			||||||
        AgvTask agvTask = agvTaskService.createAgvTask(BizStatus.Cp_Off_Line, stock, srcPoint.getCode(), endPoint.getCode(), "RACK_MOVE");
 | 
					        AgvTask agvTask = agvTaskService.createAgvTask(BizStatus.Cp_Off_Line, stock, srcPoint.getCode(), endPoint.getCode(), "RACK_MOVE");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // 同步更新终点点位状态和占用容器
 | 
					        // 更新点位状态
 | 
				
			||||||
        synchronized (endPoint) {
 | 
					        pointService.usedPoint(endPoint);
 | 
				
			||||||
            // 更新点位状态
 | 
					        // 占用容器
 | 
				
			||||||
            pointService.usedPoint(endPoint);
 | 
					        stockService.usedStock(stock, srcPoint, BaseStatus.USED);
 | 
				
			||||||
            // 占用容器
 | 
					 | 
				
			||||||
            stockService.usedStock(stock, srcPoint, BaseStatus.USED);
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return "呼叫成功";
 | 
					        return "呼叫成功";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -366,54 +361,9 @@ public class MesServiceImpl implements MesService {
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    private Point findAvailableEndPoint() {
 | 
					    private Point findAvailableEndPoint() {
 | 
				
			||||||
        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()) {
 | 
					 | 
				
			||||||
            endPointList = pointService.queryPoints(null, BaseStatus.FREE, BaseStatus.BOX, AreaNameDic.CPXXHC);
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        return endPointList.isEmpty() ? null : endPointList.get(0);
 | 
					        return endPointList.isEmpty() ? null : endPointList.get(0);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					 | 
				
			||||||
     * 处理下线缓存区有满货架的情况
 | 
					 | 
				
			||||||
     *
 | 
					 | 
				
			||||||
     * @param srcPoint 源点位
 | 
					 | 
				
			||||||
     * @return 处理结果信息,如果为空则表示继续后续流程
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
    private String handleFullStockInCache(Point srcPoint) {
 | 
					 | 
				
			||||||
        // 查询下线缓存区是否有满货架
 | 
					 | 
				
			||||||
        List<Stock> fullStockList = stockService.findByFreeOrUsedStock(AreaNameDic.CPXXHC, BaseStatus.USED);
 | 
					 | 
				
			||||||
        if (!fullStockList.isEmpty()) {
 | 
					 | 
				
			||||||
            // 取第一个满货架容器
 | 
					 | 
				
			||||||
            Stock fullStock = fullStockList.get(0);
 | 
					 | 
				
			||||||
            // 查找成品入库区的可用终点点位
 | 
					 | 
				
			||||||
            List<Point> endPointList = pointService.queryPoints(null, BaseStatus.FREE, BaseStatus.BOX, AreaNameDic.CPRKQ);
 | 
					 | 
				
			||||||
            if (!endPointList.isEmpty()) {
 | 
					 | 
				
			||||||
                // 取第一个可用终点点位
 | 
					 | 
				
			||||||
                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.getCode(), endPoint.getCode(), "RACK_MOVE");
 | 
					 | 
				
			||||||
                    // 同步更新终点点位状态和占用容器
 | 
					 | 
				
			||||||
                    synchronized (endPoint) {
 | 
					 | 
				
			||||||
                        // 更新点位状态
 | 
					 | 
				
			||||||
                        pointService.usedPoint(endPoint);
 | 
					 | 
				
			||||||
                        // 占用容器
 | 
					 | 
				
			||||||
                        stockService.usedStock(fullStock, srcPoint, BaseStatus.USED);
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
            } else {
 | 
					 | 
				
			||||||
                // 没有空车的处理逻辑
 | 
					 | 
				
			||||||
                if (!isSrcPointAvailable(fullStock.getPoint().getCode(), BizStatus.Cp_Off_Line, "RACK_MOVE")) {
 | 
					 | 
				
			||||||
                    return fullStock.getPoint().getCode() + "点位有任务,请稍后再试!";
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
                // 生成agv任务进行等待
 | 
					 | 
				
			||||||
                agvTaskService.createAgvTask(BizStatus.Cp_Off_Line, fullStock, fullStock.getCode(), null, "RACK_MOVE");
 | 
					 | 
				
			||||||
                return "成品入库区和成品下线缓存区都没有空闲点位,请稍后再试!";
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        return null;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    private String moveFxOffLine(TransTask transTask) {
 | 
					    private String moveFxOffLine(TransTask transTask) {
 | 
				
			||||||
        //返修上线起点
 | 
					        //返修上线起点
 | 
				
			||||||
        String srcPointCode = transTask.getPointCode();
 | 
					        String srcPointCode = transTask.getPointCode();
 | 
				
			||||||
| 
						 | 
					@ -477,22 +427,27 @@ public class MesServiceImpl implements MesService {
 | 
				
			||||||
        List<Point> endPointList = pointService.queryPoints(null, BaseStatus.FREE, BaseStatus.BOX, dstAreaCode);
 | 
					        List<Point> endPointList = pointService.queryPoints(null, BaseStatus.FREE, BaseStatus.BOX, dstAreaCode);
 | 
				
			||||||
        if (endPointList.isEmpty()) {
 | 
					        if (endPointList.isEmpty()) {
 | 
				
			||||||
            // 没有空车的处理逻辑
 | 
					            // 没有空车的处理逻辑
 | 
				
			||||||
            if (!isSrcPointAvailable(srcPoint.getCode(), BizStatus.CALL_RETURN, "RACK_MOVE")) {
 | 
					            if (!isSrcPointAvailable(srcPoint.getCode(), BizStatus.JL_Back, "RACK_MOVE")) {
 | 
				
			||||||
                return srcPoint.getCode() + "点位有任务,请稍后再试!";
 | 
					                return srcPoint.getCode() + "点位有任务,请稍后再试!";
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            //生成agv任务进行等待
 | 
					            //生成agv任务进行等待
 | 
				
			||||||
            agvTaskService.createAgvTask(BizStatus.CALL_RETURN, stock, srcPoint.getCode(), null, "RACK_MOVE");
 | 
					            agvTaskService.createAgvTask(BizStatus.JL_Back, stock, srcPoint.getCode(), null, "RACK_MOVE");
 | 
				
			||||||
 | 
					            // 更新点位状态
 | 
				
			||||||
 | 
					            pointService.usedPoint(srcPoint);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            // 占用容器
 | 
				
			||||||
 | 
					            stockService.usedStock(stock, srcPoint, BaseStatus.USED);
 | 
				
			||||||
            return dstAreaCode.equals(AreaNameDic.XJFBCQ) ? "小件翻包存储区" : "大件翻包存储区" + "没有空闲点位!";
 | 
					            return dstAreaCode.equals(AreaNameDic.XJFBCQ) ? "小件翻包存储区" : "大件翻包存储区" + "没有空闲点位!";
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        Point endPoint = endPointList.get(0);
 | 
					        Point endPoint = endPointList.get(0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (!isEndPointAvailable(endPoint.getCode(), BizStatus.CALL_RETURN, "RACK_MOVE")) {
 | 
					        if (!isEndPointAvailable(endPoint.getCode(), BizStatus.JL_Back, "RACK_MOVE")) {
 | 
				
			||||||
            return endPoint.getCode() + "点位有任务,请稍后再试!";
 | 
					            return endPoint.getCode() + "点位有任务,请稍后再试!";
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // 生成任务
 | 
					        // 生成任务
 | 
				
			||||||
        AgvTask agvTask = agvTaskService.createAgvTask(BizStatus.CALL_RETURN, stock, srcPoint.getCode(), endPoint.getCode(), "RACK_MOVE");
 | 
					        AgvTask agvTask = agvTaskService.createAgvTask(BizStatus.JL_Back, stock, srcPoint.getCode(), endPoint.getCode(), "RACK_MOVE");
 | 
				
			||||||
        synchronized (endPoint) {
 | 
					        synchronized (endPoint) {
 | 
				
			||||||
            // 更新点位状态
 | 
					            // 更新点位状态
 | 
				
			||||||
            pointService.usedPoint(endPoint);
 | 
					            pointService.usedPoint(endPoint);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -169,53 +169,17 @@ public class TaskServiceImpl implements TaskService {
 | 
				
			||||||
    @Transactional(rollbackFor = Exception.class)
 | 
					    @Transactional(rollbackFor = Exception.class)
 | 
				
			||||||
    public void allocatePick(Pick pick) {
 | 
					    public void allocatePick(Pick pick) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        //目标库位
 | 
					 | 
				
			||||||
        Point endPoint = null;
 | 
					 | 
				
			||||||
        if (pick.getPoint() == null) {
 | 
					 | 
				
			||||||
            String areaName = null;
 | 
					 | 
				
			||||||
            if (BaseStatus.GD_TYPE_CT.equals(pick.getOrderType())) {
 | 
					 | 
				
			||||||
                areaName = AreaNameDic.XJFBQ;
 | 
					 | 
				
			||||||
            } else if (BaseStatus.GD_TYPE_DP.equals(pick.getOrderType())) {
 | 
					 | 
				
			||||||
                areaName = AreaNameDic.DJFBQ;
 | 
					 | 
				
			||||||
            } else {
 | 
					 | 
				
			||||||
                throw new BadRequestException("出库单类型错误!");
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            List<Point> pointList = pointService.queryPoints(null, BaseStatus.FREE, BaseStatus.BOX, areaName);
 | 
					 | 
				
			||||||
            if (pointList.isEmpty()) {
 | 
					 | 
				
			||||||
                String logMessage = pick.getCode() + "工单分配失败,翻包区没有空闲点位!";
 | 
					 | 
				
			||||||
                if (!lastPollLogMessages.containsKey(logMessage)) {
 | 
					 | 
				
			||||||
                    logService.saveLogInfo(pick.getCode(), pick.getCode(), "/pick/allocatePick", logMessage, "出库单分配", 200, "info");
 | 
					 | 
				
			||||||
                    addLog(logMessage);
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
                return;
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            endPoint = pointList.get(0);
 | 
					 | 
				
			||||||
        } else {
 | 
					 | 
				
			||||||
            endPoint = pick.getPoint();
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        List<String> msgList = new ArrayList<>();//存放提示信息
 | 
					        List<String> msgList = new ArrayList<>();//存放提示信息
 | 
				
			||||||
        //查询出待分配的pickDetail
 | 
					        //查询出待分配的pickDetail
 | 
				
			||||||
        List<PickDetail> pickDetails = pickDetailService.findByPickDetailNoAllocate(pick.getId());
 | 
					        List<PickDetail> pickDetails = pickDetailService.findByPickDetailNoAllocate(pick.getId());
 | 
				
			||||||
        for (PickDetail pickDetail : pickDetails) {
 | 
					        for (PickDetail pickDetail : pickDetails) {
 | 
				
			||||||
            msgList.add(this.allocate(pickDetail.getId(), pickDetail.getOrderQty() - pickDetail.getAllocatedQty(), endPoint));
 | 
					            msgList.add(this.allocate(pickDetail.getId(), pickDetail.getOrderQty() - pickDetail.getAllocatedQty()));
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        /* 更新出库单状态*/
 | 
					        /* 更新出库单状态*/
 | 
				
			||||||
        pickService.refreshPickStatus(pick);
 | 
					        pickService.refreshPickStatus(pick);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (BizStatus.ALLOCATE.equals(pick.getStatus()) || BizStatus.ASSIGN.equals(pick.getStatus())) {
 | 
					 | 
				
			||||||
            //绑定点位
 | 
					 | 
				
			||||||
            pick.setPoint(endPoint);
 | 
					 | 
				
			||||||
            pickService.update(pick);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            //占用点位
 | 
					 | 
				
			||||||
            pointService.usedPoint(endPoint);
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        //保存日志
 | 
					        //保存日志
 | 
				
			||||||
        String logMessage = msgList.toString();
 | 
					        String logMessage = msgList.toString();
 | 
				
			||||||
        if (!lastPollLogMessages.containsKey(logMessage)) {
 | 
					        if (!lastPollLogMessages.containsKey(logMessage)) {
 | 
				
			||||||
| 
						 | 
					@ -280,7 +244,7 @@ public class TaskServiceImpl implements TaskService {
 | 
				
			||||||
        Point endPoint = pointList.get(0);
 | 
					        Point endPoint = pointList.get(0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        //有任务则直接返回
 | 
					        //有任务则直接返回
 | 
				
			||||||
        if (!agvTaskService.findByEndSlotCode(endPoint.getCode(), BizStatus.CALL_RETURN, "RACK_MOVE")) {
 | 
					        if (!agvTaskService.findByEndSlotCode(endPoint.getCode(), BizStatus.JL_Back, "RACK_MOVE")) {
 | 
				
			||||||
            return;
 | 
					            return;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -288,7 +252,7 @@ public class TaskServiceImpl implements TaskService {
 | 
				
			||||||
        pointService.usedPoint(endPoint);
 | 
					        pointService.usedPoint(endPoint);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        //创建任务
 | 
					        //创建任务
 | 
				
			||||||
        agvTaskService.createAgvTask(BizStatus.CALL_RETURN, stock, srcPoint.getCode(), endPoint.getCode(), "RACK_MOVE");
 | 
					        agvTaskService.createAgvTask(BizStatus.JL_Back, stock, srcPoint.getCode(), endPoint.getCode(), "RACK_MOVE");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
| 
						 | 
					@ -300,7 +264,7 @@ public class TaskServiceImpl implements TaskService {
 | 
				
			||||||
        //绑定任务
 | 
					        //绑定任务
 | 
				
			||||||
        List<Task> taskList = this.findByPickAllTask(pick.getId());
 | 
					        List<Task> taskList = this.findByPickAllTask(pick.getId());
 | 
				
			||||||
        if (taskList.isEmpty()) {
 | 
					        if (taskList.isEmpty()) {
 | 
				
			||||||
           return;
 | 
					            return;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -319,7 +283,7 @@ public class TaskServiceImpl implements TaskService {
 | 
				
			||||||
            List<AgvTask> agvTasks = agvTaskService.findRepeat(task.getDstStockCode(), task.getDstPointCode(), endPoint.getCode());
 | 
					            List<AgvTask> agvTasks = agvTaskService.findRepeat(task.getDstStockCode(), task.getDstPointCode(), endPoint.getCode());
 | 
				
			||||||
            if (agvTasks.isEmpty()) {
 | 
					            if (agvTasks.isEmpty()) {
 | 
				
			||||||
                //创建任务
 | 
					                //创建任务
 | 
				
			||||||
                agvTask = agvTaskService.createAgvTask(BizStatus.JL_Back, task.getDstStock(), task.getDstPointCode(), endPoint.getCode(), "RACK_MOVE");
 | 
					                agvTask = agvTaskService.createAgvTask(BizStatus.CALL_PICK, task.getDstStock(), task.getDstPointCode(), endPoint.getCode(), "RACK_MOVE");
 | 
				
			||||||
                agvTask.setLineSlotCode(pick.getCode());
 | 
					                agvTask.setLineSlotCode(pick.getCode());
 | 
				
			||||||
                agvTaskService.update(agvTask);
 | 
					                agvTaskService.update(agvTask);
 | 
				
			||||||
            } else {
 | 
					            } else {
 | 
				
			||||||
| 
						 | 
					@ -333,7 +297,7 @@ public class TaskServiceImpl implements TaskService {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
    @Transactional(rollbackFor = Exception.class)
 | 
					    @Transactional(rollbackFor = Exception.class)
 | 
				
			||||||
    public String allocate(long id, double quantity, Point endPoint) {
 | 
					    public String allocate(long id, double quantity) {
 | 
				
			||||||
        //出库明细
 | 
					        //出库明细
 | 
				
			||||||
        PickDetail pickDetail = pickDetailService.findById(id);
 | 
					        PickDetail pickDetail = pickDetailService.findById(id);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -346,6 +310,20 @@ public class TaskServiceImpl implements TaskService {
 | 
				
			||||||
        if (pickDetail.getAllocatedQty() >= pickDetail.getOrderQty()) {
 | 
					        if (pickDetail.getAllocatedQty() >= pickDetail.getOrderQty()) {
 | 
				
			||||||
            return pick.getCode() + "出库单;" + item.getCode() + "数量已分配!";
 | 
					            return pick.getCode() + "出库单;" + item.getCode() + "数量已分配!";
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					        String boxAreaName;
 | 
				
			||||||
 | 
					        if (BaseStatus.GD_TYPE_CT.equals(pick.getOrderType())) {
 | 
				
			||||||
 | 
					            boxAreaName = AreaNameDic.XJFBQ;
 | 
				
			||||||
 | 
					        } else if (BaseStatus.GD_TYPE_DP.equals(pick.getOrderType())) {
 | 
				
			||||||
 | 
					            boxAreaName = AreaNameDic.DJFBQ;
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					            throw new BadRequestException("出库单类型错误!");
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return allocateInternal(pick, pickDetail, item, boxAreaName, quantity);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private String allocateInternal(Pick pick, PickDetail pickDetail, Item item, String boxAreaName, double quantity) {
 | 
				
			||||||
 | 
					        // 查询物料所在库区的库存
 | 
				
			||||||
        String areaName = stockTypeToAreaMap.getValueByKey(item.getGoodType());
 | 
					        String areaName = stockTypeToAreaMap.getValueByKey(item.getGoodType());
 | 
				
			||||||
        List<Inventory> inventoryList = inventoryService.queryInventory(null, item.getCode(), null, areaName, item.getDept().getId());
 | 
					        List<Inventory> inventoryList = inventoryService.queryInventory(null, item.getCode(), null, areaName, item.getDept().getId());
 | 
				
			||||||
        if (inventoryList.isEmpty()) {
 | 
					        if (inventoryList.isEmpty()) {
 | 
				
			||||||
| 
						 | 
					@ -360,23 +338,37 @@ public class TaskServiceImpl implements TaskService {
 | 
				
			||||||
                return pick.getCode() + "出库单;" + item.getCode() + "物料库存不足,请先补充库存!";
 | 
					                return pick.getCode() + "出库单;" + item.getCode() + "物料库存不足,请先补充库存!";
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        double allocateQty = 0;
 | 
					        double allocateQty = 0;
 | 
				
			||||||
        //未分配数量
 | 
					        // 未分配数量
 | 
				
			||||||
        double unQty = quantity;
 | 
					        double unQty = quantity;
 | 
				
			||||||
        Set<String> tps = new HashSet<>();
 | 
					        Set<String> tps = new HashSet<>();
 | 
				
			||||||
        for (Inventory inv : inventoryList) {
 | 
					        for (Inventory inv : inventoryList) {
 | 
				
			||||||
            //判断托盘是否有任务
 | 
					            // 判断托盘是否有任务
 | 
				
			||||||
            synchronized (inv.getId()) {
 | 
					            synchronized (inv.getId()) {
 | 
				
			||||||
                if (this.existsByStock(pick.getCode(), inv.getStockCode()) >= 1) {
 | 
					                if (this.existsByStock(pick.getCode(), inv.getStockCode()) >= 1) {
 | 
				
			||||||
                    tps.add(inv.getStockCode());
 | 
					                    tps.add(inv.getStockCode());
 | 
				
			||||||
                    continue;
 | 
					                    continue;
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
                //起点
 | 
					
 | 
				
			||||||
 | 
					                //查询翻包区是否有空闲点位
 | 
				
			||||||
 | 
					                List<Point> pointList = pointService.queryPoints(null, BaseStatus.FREE, BaseStatus.BOX, boxAreaName);
 | 
				
			||||||
 | 
					                if (pointList.isEmpty()) {
 | 
				
			||||||
 | 
					                    String logMessage = pick.getCode() + "明细分配失败," + (BaseStatus.GD_TYPE_CT.equals(pick.getOrderType()) ? "小件" : "大件") + "翻包区没有空闲点位!";
 | 
				
			||||||
 | 
					                    if (!lastPollLogMessages.containsKey(logMessage)) {
 | 
				
			||||||
 | 
					                        logService.saveLogInfo(pick.getCode(), pick.getCode(), "/pick/allocatePick", logMessage, "出库单分配", 200, "info");
 | 
				
			||||||
 | 
					                        addLog(logMessage);
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                    return logMessage;
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                Point endPoint = pointList.get(0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                // 起点
 | 
				
			||||||
                Point startPoint = inv.getPoint();
 | 
					                Point startPoint = inv.getPoint();
 | 
				
			||||||
                if (unQty == 0) {
 | 
					                if (unQty == 0) {
 | 
				
			||||||
                    break;
 | 
					                    break;
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
                //库存可用数量
 | 
					                // 库存可用数量
 | 
				
			||||||
                allocateQty = inv.getQuantity() - inv.getQueuedQty();
 | 
					                allocateQty = inv.getQuantity() - inv.getQueuedQty();
 | 
				
			||||||
                if (allocateQty <= 0) {
 | 
					                if (allocateQty <= 0) {
 | 
				
			||||||
                    continue;
 | 
					                    continue;
 | 
				
			||||||
| 
						 | 
					@ -392,8 +384,11 @@ public class TaskServiceImpl implements TaskService {
 | 
				
			||||||
                pickDetail.setAllocatedQty(pickDetail.getAllocatedQty() + allocateQty);
 | 
					                pickDetail.setAllocatedQty(pickDetail.getAllocatedQty() + allocateQty);
 | 
				
			||||||
                pickDetailService.update(pickDetail);
 | 
					                pickDetailService.update(pickDetail);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                //生成Task任务
 | 
					                // 生成Task任务
 | 
				
			||||||
                Task task = this.createTask(item, allocateQty, inv.getItemKey(), null, BizStatus.PICK, pickDetail, inv.getId(), inv.getStock(), startPoint, endPoint, null);
 | 
					                Task task = this.createTask(item, allocateQty, inv.getItemKey(), null, BizStatus.PICK, pickDetail, inv.getId(), inv.getStock(), startPoint, endPoint, null);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                //占用点位
 | 
				
			||||||
 | 
					                pointService.usedPoint(endPoint);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -401,8 +396,10 @@ public class TaskServiceImpl implements TaskService {
 | 
				
			||||||
            return pick.getCode() + "出库单中" + item.getCode() + "物料分配成功!";
 | 
					            return pick.getCode() + "出库单中" + item.getCode() + "物料分配成功!";
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        return tps + "托盘有任务!";
 | 
					        return tps + "托盘有任务!";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // 增加物料可替代性判断
 | 
					    // 增加物料可替代性判断
 | 
				
			||||||
    private boolean isReplaceableMaterial(String material) {
 | 
					    private boolean isReplaceableMaterial(String material) {
 | 
				
			||||||
        return material.equals("17300653-00") || material.equals("17213913-00");
 | 
					        return material.equals("17300653-00") || material.equals("17213913-00");
 | 
				
			||||||
| 
						 | 
					@ -577,6 +574,7 @@ public class TaskServiceImpl implements TaskService {
 | 
				
			||||||
        Inventory inventory = inventoryService.findById(task.getInvId());
 | 
					        Inventory inventory = inventoryService.findById(task.getInvId());
 | 
				
			||||||
        ItemKey itemKey = inventory.getItemKey();
 | 
					        ItemKey itemKey = inventory.getItemKey();
 | 
				
			||||||
        Dept dept = inventory.getDept();
 | 
					        Dept dept = inventory.getDept();
 | 
				
			||||||
 | 
					        PickDetail pickDetail = task.getPickDetail();
 | 
				
			||||||
        synchronized (inventory) {
 | 
					        synchronized (inventory) {
 | 
				
			||||||
            inventory.setQueuedQty(inventory.getQueuedQty() - moveQty);
 | 
					            inventory.setQueuedQty(inventory.getQueuedQty() - moveQty);
 | 
				
			||||||
            inventory.setQuantity(inventory.getQuantity() - moveQty);
 | 
					            inventory.setQuantity(inventory.getQuantity() - moveQty);
 | 
				
			||||||
| 
						 | 
					@ -598,10 +596,19 @@ public class TaskServiceImpl implements TaskService {
 | 
				
			||||||
        task.setDstStockCode(dstStock.getCode());
 | 
					        task.setDstStockCode(dstStock.getCode());
 | 
				
			||||||
        if (task.getPlanQty() - task.getMoveQty() == 0) {
 | 
					        if (task.getPlanQty() - task.getMoveQty() == 0) {
 | 
				
			||||||
            task.setTaskStatus(BizStatus.FINISH);
 | 
					            task.setTaskStatus(BizStatus.FINISH);
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					            //部分拣货;部分数量生成新的Task;当前任务完成即可
 | 
				
			||||||
 | 
					            task.setPlanQty(moveQty);
 | 
				
			||||||
 | 
					            task.setMoveQty(moveQty);
 | 
				
			||||||
 | 
					            task.setTaskStatus(BizStatus.FINISH);
 | 
				
			||||||
 | 
					            // 生成Task任务
 | 
				
			||||||
 | 
					            Task newTask = this.createTask(task.getItemKey().getItem(), task.getPlanQty() - moveQty, task.getItemKey(), null, BizStatus.PICK, pickDetail, task.getInvId(), task.getSrcStock(), task.getSrcPoint(), task.getDstPoint(), task.getAgvTask());
 | 
				
			||||||
 | 
					            newTask.setDstStock(dstStock);
 | 
				
			||||||
 | 
					            newTask.setDstStockCode(dstStock.getCode());
 | 
				
			||||||
 | 
					            taskRepository.save(newTask);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        taskRepository.save(task);
 | 
					        taskRepository.save(task);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        PickDetail pickDetail = task.getPickDetail();
 | 
					 | 
				
			||||||
        pickDetail.setPickedQty(pickDetail.getPickedQty() + moveQty);
 | 
					        pickDetail.setPickedQty(pickDetail.getPickedQty() + moveQty);
 | 
				
			||||||
        pickDetailService.update(pickDetail);
 | 
					        pickDetailService.update(pickDetail);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -37,22 +37,17 @@ public class cpLineTask {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // 定义异常信息常量
 | 
					    // 定义异常信息常量
 | 
				
			||||||
    private static final String NO_EMPTY_SHELVES_ERROR_MSG = "成品入库区和成品入库缓存区都没有空闲点位,请及时处理!";
 | 
					    private static final String NO_EMPTY_SHELVES_ERROR_MSG = "成品入库区和成品入库缓存区都没有空闲点位,请及时处理!";
 | 
				
			||||||
    // 定义一个对象作为锁
 | 
					 | 
				
			||||||
    private final Object lock = new Object();
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public void sendAgvCpOffLine() {
 | 
					    public void sendAgvCpOffLine() {
 | 
				
			||||||
        // 使用同步块确保线程安全
 | 
					        // 获取处于特定业务状态的AGV任务列表
 | 
				
			||||||
        synchronized (lock) {
 | 
					        List<AgvTask> agvTaskList = agvTaskService.findOpenByAgvTask(BizStatus.Cp_Off_Line);
 | 
				
			||||||
            // 获取处于特定业务状态的AGV任务列表
 | 
					        // 如果任务列表为空,直接返回,避免不必要的处理
 | 
				
			||||||
            List<AgvTask> agvTaskList = agvTaskService.findOpenByAgvTask(BizStatus.Cp_Off_Line);
 | 
					        if (agvTaskList.isEmpty()) {
 | 
				
			||||||
            // 如果任务列表为空,直接返回,避免不必要的处理
 | 
					            return;
 | 
				
			||||||
            if (agvTaskList.isEmpty()) {
 | 
					        }
 | 
				
			||||||
                return;
 | 
					        // 遍历AGV任务列表
 | 
				
			||||||
            }
 | 
					        for (AgvTask agvTask : agvTaskList) {
 | 
				
			||||||
            // 遍历AGV任务列表
 | 
					            processAgvTask(agvTask);
 | 
				
			||||||
            for (AgvTask agvTask : agvTaskList) {
 | 
					 | 
				
			||||||
                processAgvTask(agvTask);
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -86,9 +81,6 @@ public class cpLineTask {
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    private Point findAvailableEndPoint() {
 | 
					    private Point findAvailableEndPoint() {
 | 
				
			||||||
        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()) {
 | 
					 | 
				
			||||||
            endPointList = pointService.queryPoints(null, BaseStatus.FREE, BaseStatus.BOX, AreaNameDic.CPXXHC);
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        return endPointList.isEmpty() ? null : endPointList.get(0);
 | 
					        return endPointList.isEmpty() ? null : endPointList.get(0);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -34,29 +34,22 @@ public class cpUpTask {
 | 
				
			||||||
    // 定义异常信息常量
 | 
					    // 定义异常信息常量
 | 
				
			||||||
    private static final String NO_EMPTY_SHELVES_ERROR_MSG = "成品入库区和成品入库缓存区都没有空货架,请及时解绑容器!";
 | 
					    private static final String NO_EMPTY_SHELVES_ERROR_MSG = "成品入库区和成品入库缓存区都没有空货架,请及时解绑容器!";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private final Object lock = new Object();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * 轮询下发成品上线任务
 | 
					     * 轮询下发成品上线任务
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    public void sendAgvCpOffUp() {
 | 
					    public void sendAgvCpOffUp() {
 | 
				
			||||||
        synchronized (lock) {
 | 
					        List<AgvTask> agvTaskList = agvTaskService.findOpenByAgvTask(BizStatus.Cp_Off_Up);
 | 
				
			||||||
            List<AgvTask> agvTaskList = agvTaskService.findOpenByAgvTask(BizStatus.Cp_Off_Up);
 | 
					        if (agvTaskList.isEmpty()) {
 | 
				
			||||||
            if (agvTaskList.isEmpty()) {
 | 
					            return;
 | 
				
			||||||
                return;
 | 
					        }
 | 
				
			||||||
            }
 | 
					        // 遍历AGV任务列表
 | 
				
			||||||
            // 遍历AGV任务列表
 | 
					        for (AgvTask agvTask : agvTaskList) {
 | 
				
			||||||
            for (AgvTask agvTask : agvTaskList) {
 | 
					            processAgvTask(agvTask);
 | 
				
			||||||
                processAgvTask(agvTask);
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private List<Stock> getEmptyStockList() {
 | 
					    private List<Stock> getEmptyStockList() {
 | 
				
			||||||
        List<Stock> emptyStockList = stockService.findByFreeOrUsedStock(AreaNameDic.CPRKHCQ, BaseStatus.FREE);
 | 
					        List<Stock> emptyStockList = stockService.findByFreeOrUsedStock(AreaNameDic.CPRKQ, BaseStatus.FREE);
 | 
				
			||||||
        if (emptyStockList.isEmpty()) {
 | 
					 | 
				
			||||||
            emptyStockList = stockService.findByFreeOrUsedStock(AreaNameDic.CPRKQ, BaseStatus.FREE);
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        return emptyStockList;
 | 
					        return emptyStockList;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -68,6 +68,7 @@ public class jlBackTask {
 | 
				
			||||||
            Point endPoint = findAvailableEndPoint(areaName);
 | 
					            Point endPoint = findAvailableEndPoint(areaName);
 | 
				
			||||||
            if (endPoint != null) {
 | 
					            if (endPoint != null) {
 | 
				
			||||||
                updateAgvTaskWithEndPoint(agvTask, endPoint);
 | 
					                updateAgvTaskWithEndPoint(agvTask, endPoint);
 | 
				
			||||||
 | 
					                kmReService.sendAgvTask(agvTask, kmReService.sendAgvTaskHjJson(agvTask));
 | 
				
			||||||
            } else {
 | 
					            } else {
 | 
				
			||||||
                // 若未找到可用结束点,抛出异常
 | 
					                // 若未找到可用结束点,抛出异常
 | 
				
			||||||
                throw new BadRequestException(areaName+NO_EMPTY_SHELVES_ERROR_MSG);
 | 
					                throw new BadRequestException(areaName+NO_EMPTY_SHELVES_ERROR_MSG);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -151,12 +151,6 @@ public interface BizStatus {
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    String CALL_PICK = "CALL_PICK";
 | 
					    String CALL_PICK = "CALL_PICK";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					 | 
				
			||||||
     * 任务类型-叫料反空
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
    String CALL_RETURN = "CALL_RETURN";
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * 库存日志-移位
 | 
					     * 库存日志-移位
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue