From 5b7abad9f80bb0b4c9d0bb2d85e0368a92888b30 Mon Sep 17 00:00:00 2001
From: vincentlu <t1341870251@gmail.com>
Date: 星期三, 31 十二月 2025 14:34:21 +0800
Subject: [PATCH] #
---
zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MainService.java | 39 ++++++++++--
zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/TransferStationHandler.java | 15 ++++
zy-acs-manager/src/main/java/com/zy/acs/manager/manager/entity/Segment.java | 6 ++
zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/SegmentServiceImpl.java | 17 +++++
zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/AllocateService.java | 41 +++++++------
zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/SegmentService.java | 3 +
version/doc/RCS输送线逻辑梳理.xmind | 0
zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/AllocateSupport.java | 3
8 files changed, 96 insertions(+), 28 deletions(-)
diff --git "a/version/doc/RCS\350\276\223\351\200\201\347\272\277\351\200\273\350\276\221\346\242\263\347\220\206.xmind" "b/version/doc/RCS\350\276\223\351\200\201\347\272\277\351\200\273\350\276\221\346\242\263\347\220\206.xmind"
index 095e2bd..75f5bbf 100644
--- "a/version/doc/RCS\350\276\223\351\200\201\347\272\277\351\200\273\350\276\221\346\242\263\347\220\206.xmind"
+++ "b/version/doc/RCS\350\276\223\351\200\201\347\272\277\351\200\273\350\276\221\346\242\263\347\220\206.xmind"
Binary files differ
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/AllocateService.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/AllocateService.java
index f2c6663..0bbbe3d 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/AllocateService.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/AllocateService.java
@@ -4,19 +4,17 @@
import com.zy.acs.framework.common.Cools;
import com.zy.acs.manager.common.utils.CommonUtil;
import com.zy.acs.manager.core.domain.AgvCntDto;
-import com.zy.acs.manager.core.domain.Lane;
import com.zy.acs.manager.core.domain.FilterLaneDto;
+import com.zy.acs.manager.core.domain.Lane;
import com.zy.acs.manager.core.domain.TaskPosDto;
import com.zy.acs.manager.manager.entity.*;
-import com.zy.acs.manager.manager.enums.StaTypeType;
-import com.zy.acs.manager.manager.enums.StatusType;
-import com.zy.acs.manager.manager.enums.TaskStsType;
-import com.zy.acs.manager.manager.enums.TaskTypeType;
+import com.zy.acs.manager.manager.enums.*;
import com.zy.acs.manager.manager.service.*;
import com.zy.acs.manager.system.service.ConfigService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
import java.util.*;
import java.util.stream.Collectors;
@@ -91,12 +89,13 @@
return result;
}
+ @Transactional(rollbackFor = Exception.class)
public synchronized String execute(Task task, AllocateSupport inbound, AllocateSupport normal) {
// inbound roller station
Sta rollerOriSta = getInboundRollerSta(task);
String inboundAgv = tryAllocateForRoller(task, rollerOriSta, true);
if (!Cools.isEmpty(inboundAgv)) {
- inbound.success(task, inboundAgv);
+ inbound.success(task, inboundAgv, rollerOriSta);
return inboundAgv;
}
@@ -104,13 +103,13 @@
Sta rollerDestSta = getOutboundRollerSta(task);
String outboundAgv = tryAllocateForRoller(task, rollerDestSta, false);
if (!Cools.isEmpty(outboundAgv)) {
- normal.success(task, outboundAgv);
+ normal.success(task, outboundAgv, rollerDestSta);
return outboundAgv;
}
String normalAgv = this.normalExecute(task);
if (!Cools.isEmpty(normalAgv)) {
- normal.success(task, normalAgv);
+ normal.success(task, normalAgv, null);
return normalAgv;
}
@@ -206,17 +205,21 @@
}
// has running task and within oriSta
-// List<Segment> currSeg = segmentService.getByAgvAndState(agvId, SegmentStateType.WAITING.toString());
- int taskCnt = taskService.count(new LambdaQueryWrapper<Task>()
- .eq(Task::getAgvId, agvId)
- .eq(Task::getOriSta, sta.getId())
- .and(wrapper -> wrapper
- .eq(Task::getTaskSts, TaskStsType.ASSIGN.val())
- .or()
- .eq(Task::getTaskSts, TaskStsType.PROGRESS.val())
- )
- );
- if (taskCnt == 0) {
+// int taskCnt = taskService.count(new LambdaQueryWrapper<Task>()
+// .eq(Task::getAgvId, agvId)
+// .eq(Task::getOriSta, sta.getId())
+// .and(wrapper -> wrapper
+// .eq(Task::getTaskSts, TaskStsType.ASSIGN.val())
+// .or()
+// .eq(Task::getTaskSts, TaskStsType.PROGRESS.val())
+// )
+// );
+// if (taskCnt == 0) {
+// continue;
+// }
+ // in TransferStationHandler.hasDelayAtSta
+ Segment currSeg = segmentService.getRollerWaiting(agvId, sta.getCode(), TaskPosDto.PosType.ORI_STA);
+ if (null == currSeg) {
continue;
}
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/AllocateSupport.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/AllocateSupport.java
index 5536983..c923b53 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/AllocateSupport.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/AllocateSupport.java
@@ -1,9 +1,10 @@
package com.zy.acs.manager.core.service;
+import com.zy.acs.manager.manager.entity.Sta;
import com.zy.acs.manager.manager.entity.Task;
public interface AllocateSupport {
- void success(Task task, String agvNo);
+ void success(Task task, String agvNo, Sta sta);
}
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MainService.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MainService.java
index 13ef79e..33d4e20 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MainService.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MainService.java
@@ -245,19 +245,44 @@
return;
}
- List<Long> taskIds = taskList.stream().map(Task::getId).distinct().collect(Collectors.toList());
+// List<Long> taskIds = taskList.stream().map(Task::getId).distinct().collect(Collectors.toList());
for (Task t : taskList) {
String resultAgvNo = allocateService.execute(t
// inbound
- , (task, agvNo) -> {
+ , (task, agvNo, sta) -> {
+ Long agvId = agvService.getAgvId(agvNo);
+ List<Travel> travelList = travelService.list(new LambdaQueryWrapper<Travel>()
+ .eq(Travel::getAgvId, agvId)
+ .eq(Travel::getState, TravelStateType.RUNNING.toString())
+ .orderByDesc(Travel::getCreateTime));
+ if (Cools.isEmpty(travelList)) {
+ throw new BusinessException("[Agv: " + agvNo + "]allocate inbound failed to find travel");
+ }
+ Travel travel = travelList.get(0);
+
+ List<Segment> currSegments = segmentService.list(new LambdaQueryWrapper<Segment>()
+ .eq(Segment::getAgvId, agvId)
+ .eq(Segment::getTravelId, travel.getId())
+ );
+ // load segment
+ Segment currSeg = segmentService.getRollerWaiting(agvId, sta.getCode(), TaskPosDto.PosType.ORI_STA);
+
+
+ // place segment
+
+ task.setAgvId(agvId);
+ task.setTaskSts(TaskStsType.ASSIGN.val());
+ task.setIoTime(now);
+ task.setUpdateTime(now);
+ if (!taskService.updateById(task)) {
+ throw new BusinessException("seqNum: " + task.getSeqNum() + " failed to update");
+ }
}
// normal
- , (task, agvNo) -> {
- if (Cools.isEmpty(agvNo)) {
- return;
- }
- task.setAgvId(agvService.getAgvId(agvNo));
+ , (task, agvNo, sta) -> {
+ Long agvId = agvService.getAgvId(agvNo);
+ task.setAgvId(agvId);
task.setTaskSts(TaskStsType.WAITING.val());
task.setIoTime(now);
task.setUpdateTime(now);
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/TransferStationHandler.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/TransferStationHandler.java
index d49dbc8..5cf49ab 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/TransferStationHandler.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/TransferStationHandler.java
@@ -12,7 +12,8 @@
import java.util.Objects;
-// man_segment: start_time, end_time
+// man_segment: start_time, end_time, alter table man_segment
+// add roller_waiting int(1) default 0 null comment '婊氱瓛绾跨瓑寰�' after end_time;
/**
* alter table man_sta
* add capacity int null comment '妲戒綅鏁�' after angle;
@@ -87,6 +88,12 @@
return false;
}
+ // sign waiting
+ if (currSeg.getRollerWaiting() == 0) {
+ currSeg.setRollerWaiting(1);
+ segmentService.updateById(currSeg);
+ }
+
// timeout
return (now - preEndTime) < LOAD_DELAY_MS;
}
@@ -102,6 +109,12 @@
return false;
}
+ // sign waiting
+ if (currSeg.getRollerWaiting() == 0) {
+ currSeg.setRollerWaiting(1);
+ segmentService.updateById(currSeg);
+ }
+
// timeout
return (now - preEndTime) < PLACE_DELAY_MS;
}
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/entity/Segment.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/entity/Segment.java
index 99795d3..a36e304 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/entity/Segment.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/entity/Segment.java
@@ -107,6 +107,12 @@
private Date endTime;
/**
+ * 婊氱瓛绾跨瓑寰� 1: 鏄� 0: 鍚�
+ */
+ @ApiModelProperty(value= "婊氱瓛绾跨瓑寰� 1: 鏄� 0: 鍚� ")
+ private Integer rollerWaiting;
+
+ /**
* 杩涘害
*/
@ApiModelProperty(value= "杩涘害")
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/SegmentService.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/SegmentService.java
index d6177fd..a61122c 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/SegmentService.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/SegmentService.java
@@ -1,6 +1,7 @@
package com.zy.acs.manager.manager.service;
import com.baomidou.mybatisplus.extension.service.IService;
+import com.zy.acs.manager.core.domain.TaskPosDto;
import com.zy.acs.manager.manager.entity.Segment;
import com.zy.acs.manager.manager.enums.SegmentStateType;
@@ -30,4 +31,6 @@
int countRemainingBackpack(Long travelId, Long agvId);
+ Segment getRollerWaiting(Long agvId, Long codeId, TaskPosDto.PosType posType);
+
}
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/SegmentServiceImpl.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/SegmentServiceImpl.java
index 343256d..ee330e1 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/SegmentServiceImpl.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/SegmentServiceImpl.java
@@ -4,6 +4,7 @@
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.zy.acs.framework.common.Cools;
import com.zy.acs.framework.exception.CoolException;
+import com.zy.acs.manager.core.domain.TaskPosDto;
import com.zy.acs.manager.manager.entity.Segment;
import com.zy.acs.manager.manager.entity.Task;
import com.zy.acs.manager.manager.enums.ActionStsType;
@@ -168,4 +169,20 @@
return this.baseMapper.countRemainingBackpack(agvId, travelId);
}
+ @Override
+ public Segment getRollerWaiting(Long agvId, Long codeId, TaskPosDto.PosType posType) {
+ List<Segment> segments = this.list(new LambdaQueryWrapper<Segment>()
+ .eq(Segment::getAgvId, agvId)
+ .eq(Segment::getState, SegmentStateType.WAITING.toString())
+ .eq(Segment::getEndNode, codeId)
+ .eq(Segment::getPosType, posType.toString())
+ .eq(Segment::getRollerWaiting, 1)
+ .orderByDesc(Segment::getId)
+ );
+ if (Cools.isEmpty(segments)) {
+ return null;
+ }
+ return segments.get(0);
+ }
+
}
--
Gitblit v1.9.1