no message

main
HUOJIN\92525 2025-03-03 17:18:59 +08:00
parent 09224ef6ef
commit 48efc8430a
9 changed files with 80 additions and 26 deletions

View File

@ -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;
}

View File

@ -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);
/**
*
*

View File

@ -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 " +

View File

@ -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);
}
// 更新 Pick 对象
pickService.update(pick);
}
}
}
/**

View File

@ -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");

View File

@ -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,8 +289,16 @@ 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 的长度时,跳出外层循环
}
}
}

View File

@ -50,6 +50,11 @@ public class fxTask {
}
private void processAgvTask(AgvTask agvTask) {
if(agvTaskService.isByFxEndSlotCode(agvTask.getEndSlotCode(), BizStatus.Fx_Off_Line,"ROLLER_MOVE")){
kmReService.sendAgvTask(agvTask, kmReService.sendAgvTaskGtJson(agvTask));
}else{
throw new BadRequestException("任务排队中");
}
}
}

View File

@ -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("无待分配的成品出库单,分配失败!");
}

View File

@ -26,7 +26,7 @@ public class EladminSystemApplicationTests {
// 创建一个 HashSet 实例
Set<String> hashSet = new HashSet<>();
// 向集合中添加元素
hashSet.add("QXJL001");
hashSet.add("QXJL002");
hashSet.add("QXJL002");
// 打印原始集合