From 6828e790d254dd44162ff245025f7903def395be Mon Sep 17 00:00:00 2001
From: luxiaotao1123 <t1341870251@163.com>
Date: 星期三, 13 十一月 2024 13:52:02 +0800
Subject: [PATCH] #
---
zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MainService.java | 48 +++++++++++++++++-------------------------------
1 files changed, 17 insertions(+), 31 deletions(-)
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 cb6fd28..c5b0a72 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
@@ -21,6 +21,7 @@
import com.zy.acs.framework.common.SnowflakeIdWorker;
import com.zy.acs.framework.exception.CoolException;
import com.zy.acs.manager.common.domain.TaskDto;
+import com.zy.acs.manager.common.domain.param.HandlerPublishParam;
import com.zy.acs.manager.common.exception.BusinessException;
import com.zy.acs.manager.common.utils.CommonUtil;
import com.zy.acs.manager.core.domain.AgvBackpackDto;
@@ -35,11 +36,11 @@
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
+import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.interceptor.TransactionAspectSupport;
import java.util.*;
-import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.ReentrantLock;
import java.util.stream.Collectors;
@@ -271,16 +272,12 @@
/**
* 瑙f瀽鍙栨斁璐ч泦鍚堜换鍔�,杩涜鏈�浼樼殑鎺掑垪缁勫悎椤哄簭 ( 杞﹁締姝ゆ椂鏄┖闂蹭笖闈欐鐨� )
+ * todo: {@link com.zy.acs.manager.core.HandlerController#controlAgv(String, HandlerPublishParam)}
*/
- @Transactional
- public synchronized void buildMajorTask(Long agvId, List<Task> taskList) {
- if (Cools.isEmpty(taskList)) { return; }
- boolean lockAcquired = false;
+ @Transactional(propagation = Propagation.REQUIRES_NEW)
+ public void buildMajorTask(Long agvId, List<Task> taskList) {
+ if (Cools.isEmpty(agvId, taskList)) { return; }
try {
- if (!(lockAcquired = this.lock.tryLock(LOCK_TIMEOUT, TimeUnit.SECONDS))) {
- throw new CoolException("generate [task] action fail, cause can not acquire lock ...");
- }
-
// valid -----------------------------------------------
Agv agv = agvService.getById(agvId);
if (!agvService.judgeEnable(agv.getId(), true)) {
@@ -516,33 +513,27 @@
} catch (Exception e) {
- log.error("mainService.mergeMajorTask[task]", e);
+ log.error("mainService.buildMajorTask[task]", e);
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
- } finally {
-
- if (lockAcquired) {
- this.lock.unlock();
- }
}
}
+
/**
* 鍏呯數 鍥炲緟鏈轰綅浠诲姟
*/
- @Transactional
- public synchronized boolean buildMinorTask(Agv agv, AgvDetail agvDetail, TaskTypeType taskType, String destination) {
+ @Transactional(propagation = Propagation.REQUIRES_NEW) // although there is a Transactional here that the lock is isolated, but we can't join the caller's Transactional
+ public boolean buildMinorTask(Agv agv, AgvDetail agvDetail, TaskTypeType taskType, String destination) {
if (Cools.isEmpty(agv, taskType)) { return false; }
- boolean lockAcquired = false;
try {
- if (!(lockAcquired = this.lock.tryLock(LOCK_TIMEOUT, TimeUnit.SECONDS))) {
- throw new CoolException("generate [task] action fail, cause can not acquire lock ...");
- }
-
if (null == agvDetail) {
agvDetail = agvDetailService.selectByAgvId(agv.getId());
}
if (!agvService.judgeEnable(agv.getId())) {
return false;
+ }
+ if (!Cools.isEmpty(taskService.selectInSts(agv.getId(), TaskStsType.ASSIGN, TaskStsType.PROGRESS))) {
+ throw new CoolException("AGV[" + agv.getUuid() + "] failed to assign锛宐ecause already has the task in running...");
}
Date now = new Date();
@@ -665,11 +656,6 @@
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
return false;
- } finally {
-
- if (lockAcquired) {
- this.lock.unlock();
- }
}
}
@@ -698,13 +684,12 @@
List<Action> actionList = new ArrayList<>();
// start node
Code lastCode = codeService.getById(agvDetail.getRecentCode());
+ Double lastDirection = agvDetail.getAgvAngle();
if (!lastCode.getData().equals(pathList.get(0))) {
throw new CoolException("AGV[" + agv.getUuid() + "]瀹氫綅鍋忕Щ...");
}
- Double lastDirection = agvDetail.getAgvAngle();
boolean first = true;
-
for (Segment segment : segmentList) {
// 鍒嗘鎵�灞炵殑Task
@@ -936,7 +921,7 @@
break;
case TO_CHARGE:
// 妫�楠屾柟鍚�
- FuncSta chargeFuncSta = funcStaService.query(agvId, lastCode.getId(), FuncStaType.CHARGE.toString());
+ FuncSta chargeFuncSta = funcStaService.query(lastCode.getId(), FuncStaType.CHARGE.toString());
Double chargeDirection = Double.parseDouble(chargeFuncSta.getAngle());
if (!lastDirection.equals(chargeDirection)) {
actionList.add(new Action(
@@ -1081,6 +1066,7 @@
for (Action action : actionList) {
action.setActionSts(ActionStsType.ISSUED.val());
action.setStartTime(now);
+ action.setIoTime(now);
action.setUpdateTime(now);
if (!actionService.updateById(action)) {
throw new BusinessException(action.getPriority() + " - " + action.getName() + "鍔ㄤ綔鏇存柊澶辫触");
@@ -1355,7 +1341,7 @@
}
// segment call back
- trafficService.callback(segmentList);
+ segmentService.processNext(segmentList);
log.info("Agv [{}] {}浣滀笟瀹屾瘯 ==========>> ", protocol.getAgvNo(), serialNo);
--
Gitblit v1.9.1