From b020f68fe319d8ee726320c12c39a97d5c818dc3 Mon Sep 17 00:00:00 2001 From: luxiaotao1123 <t1341870251@163.com> Date: 星期三, 13 十一月 2024 10:51:22 +0800 Subject: [PATCH] # --- zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MainService.java | 63 ++++++++++++++----------------- 1 files changed, 29 insertions(+), 34 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 ba7f2b2..783bb5d 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 @@ -3,9 +3,6 @@ import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.zy.acs.framework.common.Cools; -import com.zy.acs.framework.common.SnowflakeIdWorker; -import com.zy.acs.framework.exception.CoolException; import com.zy.acs.common.domain.AgvAction; import com.zy.acs.common.domain.AgvActionItem; import com.zy.acs.common.domain.AgvProtocol; @@ -14,9 +11,17 @@ import com.zy.acs.common.domain.protocol.AGV_70_UP; import com.zy.acs.common.domain.protocol.IMessageBody; import com.zy.acs.common.domain.protocol.action.*; -import com.zy.acs.common.enums.*; +import com.zy.acs.common.enums.AgvBackpackType; +import com.zy.acs.common.enums.AgvCompleteType; +import com.zy.acs.common.enums.AgvDirectionType; +import com.zy.acs.common.enums.AgvSpeedType; +import com.zy.acs.common.utils.RedisSupport; import com.zy.acs.common.utils.Utils; +import com.zy.acs.framework.common.Cools; +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; @@ -31,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; @@ -46,6 +51,7 @@ @Component("mainService") public class MainService { + private final RedisSupport redis = RedisSupport.defaultRedisSupport; private static final int LOCK_TIMEOUT = 5; private final ReentrantLock lock = new ReentrantLock(Boolean.TRUE); @@ -266,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)) { @@ -511,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(); @@ -650,17 +646,16 @@ break; } +// if (taskType.equals(TaskTypeType.TO_STANDBY)) { +// redis.setObject(RedisConstant.AGV_TO_STANDBY_FLAG, agv.getUuid(), false); +// } + return true; } catch (Exception e) { log.error("mainService.buildMinorTask[task]", e); TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return false; - } finally { - - if (lockAcquired) { - this.lock.unlock(); - } } } @@ -689,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 @@ -1072,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() + "鍔ㄤ綔鏇存柊澶辫触"); @@ -1346,7 +1341,7 @@ } // segment call back - trafficService.callback(segmentList); + segmentService.processNext(segmentList); log.info("Agv [{}] {}浣滀笟瀹屾瘯 ==========>> ", protocol.getAgvNo(), serialNo); -- Gitblit v1.9.1