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