no message
parent
09224ef6ef
commit
48efc8430a
|
|
@ -434,11 +434,11 @@ public class BydAppServiceImpl implements BydAppService {
|
|||
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())) {
|
||||
throw new BadRequestException(pick.getGdCode() + "工单只能放入同一个货架! 请放入" + pick.getCode() + "货架!");
|
||||
}
|
||||
}
|
||||
}*/
|
||||
return dstStock;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -128,6 +128,16 @@ public interface AgvTaskService {
|
|||
*/
|
||||
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();
|
||||
}
|
||||
|
||||
@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
|
||||
public Boolean findByCcEndSlotCode(String endSlotCode, String type, String jobType) {
|
||||
String hql = " from AgvTask agv " +
|
||||
|
|
|
|||
|
|
@ -773,24 +773,29 @@ public class KMReServiceImpl implements KMReService {
|
|||
*/
|
||||
private void handleJl(Stock stock, Point endPoint, AgvTask agvTask) {
|
||||
|
||||
// 查询与当前 AGV 任务关联的任务列表
|
||||
List<Task> taskList = taskService.findTaskByCallAgvTask(agvTask.getId());
|
||||
|
||||
// 根据任务中的物料类型,确定对应的区域名称列表
|
||||
List<String> areaNames = taskList.stream()
|
||||
.map(task -> task.getItemKey().getItem())
|
||||
.map(item -> BizStatus.XJ.equals(item.getGoodType()) ? AreaNameDic.XJFBCQ : AreaNameDic.DJFBCQ)
|
||||
.map(task -> {
|
||||
Item item = task.getItemKey().getItem();
|
||||
return BizStatus.XJ.equals(item.getGoodType()) ? AreaNameDic.XJFBCQ : AreaNameDic.DJFBCQ;
|
||||
})
|
||||
.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());
|
||||
allInventories.addAll(inventoryList);
|
||||
}
|
||||
// 删除所有查询到的库存
|
||||
|
||||
// 查询所有区域的库存列表
|
||||
List<Inventory> allInventories = areaNames.stream()
|
||||
.flatMap(areaName -> inventoryRepository.queryInventory(stock.getId(), null, null, areaName, stock.getDept().getId()).stream())
|
||||
.collect(Collectors.toList());
|
||||
|
||||
// 如果库存列表不为空,删除所有库存记录
|
||||
if (!allInventories.isEmpty()) {
|
||||
inventoryRepository.deleteAll(allInventories);
|
||||
}
|
||||
for (Task task : taskList) {
|
||||
//回传MES
|
||||
pickService.returnPickByTask(task);
|
||||
}
|
||||
|
||||
// 回传 MES
|
||||
taskList.forEach(pickService::returnPickByTask);
|
||||
|
||||
//点位占用
|
||||
pointService.usedPoint(endPoint);
|
||||
|
|
@ -798,26 +803,43 @@ public class KMReServiceImpl implements KMReService {
|
|||
//容器占用
|
||||
stockService.usedStock(stock, endPoint, BaseStatus.USED);
|
||||
|
||||
// 根据叫料单号查找 Pick 对象
|
||||
Pick pick = pickService.findByPickCode(agvTask.getLineSlotCode());
|
||||
|
||||
// 刷新 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(",")));
|
||||
// 移除结束点位的代码
|
||||
boolean isRemoved = endPointList.remove(endPoint.getCode());
|
||||
if (isRemoved) {
|
||||
String result = endPointList.stream().collect(Collectors.joining(", "));
|
||||
// 将剩余的叫料点代码用逗号连接成字符串
|
||||
String result = endPointList.stream().collect(Collectors.joining(","));
|
||||
if (!result.isEmpty()) {
|
||||
// 更新叫料点信息,设置为还有叫料
|
||||
pick.setCallPoint(result);
|
||||
pick.setIsCall(true);
|
||||
pickService.update(pick);
|
||||
} else {
|
||||
// 清空叫料点信息,设置为无叫料
|
||||
pick.setCallPoint(null);
|
||||
pick.setIsCall(false);
|
||||
pickService.update(pick);
|
||||
}
|
||||
|
||||
// 更新 Pick 对象
|
||||
pickService.update(pick);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -360,10 +360,6 @@ public class MesServiceImpl implements MesService {
|
|||
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");
|
||||
|
|
|
|||
|
|
@ -279,6 +279,7 @@ public class TaskServiceImpl implements TaskService {
|
|||
agvTask.setLineSlotCode(pick.getCode());
|
||||
agvTaskService.update(agvTask);*/
|
||||
List<String> endPoints = getValuesFromMap(endPointList, pointMap);
|
||||
int taskCount = 0;
|
||||
for (Task task : taskList) {
|
||||
for (String endPointCode : endPoints) {
|
||||
if (agvTaskService.isEndPointAvailable(endPointCode, BizStatus.CALL_PICK, "RACK_MOVE")) {
|
||||
|
|
@ -288,9 +289,17 @@ public class TaskServiceImpl implements TaskService {
|
|||
task.setCallAgvTaskId(agvTask.getId());
|
||||
taskRepository.save(task);
|
||||
}
|
||||
taskCount++;
|
||||
if (taskCount >= taskList.size()) {
|
||||
break; // 当处理的任务数量达到 taskList 的长度时,跳出内层循环
|
||||
}
|
||||
}
|
||||
if (taskCount >= taskList.size()) {
|
||||
break; // 当处理的任务数量达到 taskList 的长度时,跳出外层循环
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
public static List<String> getValuesFromMap(Set<String> endPointList, Map<String, Point> map) {
|
||||
|
|
|
|||
|
|
@ -50,6 +50,11 @@ public class fxTask {
|
|||
}
|
||||
|
||||
private void processAgvTask(AgvTask agvTask) {
|
||||
kmReService.sendAgvTask(agvTask, kmReService.sendAgvTaskGtJson(agvTask));
|
||||
if(agvTaskService.isByFxEndSlotCode(agvTask.getEndSlotCode(), BizStatus.Fx_Off_Line,"ROLLER_MOVE")){
|
||||
kmReService.sendAgvTask(agvTask, kmReService.sendAgvTaskGtJson(agvTask));
|
||||
}else{
|
||||
throw new BadRequestException("任务排队中");
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -49,7 +49,7 @@ public class pickTask {
|
|||
*/
|
||||
public void allocatePick() {
|
||||
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()) {
|
||||
throw new BadRequestException("无待分配的成品出库单,分配失败!");
|
||||
}
|
||||
|
|
|
|||
|
|
@ -26,7 +26,7 @@ public class EladminSystemApplicationTests {
|
|||
// 创建一个 HashSet 实例
|
||||
Set<String> hashSet = new HashSet<>();
|
||||
// 向集合中添加元素
|
||||
hashSet.add("QXJL001");
|
||||
hashSet.add("QXJL002");
|
||||
hashSet.add("QXJL002");
|
||||
|
||||
// 打印原始集合
|
||||
|
|
|
|||
Loading…
Reference in New Issue