package com.zy.acs.manager.core.service; import com.zy.acs.framework.common.Cools; import com.zy.acs.framework.common.SnowflakeIdWorker; import com.zy.acs.manager.core.service.astart.MapDataDispatcher; import com.zy.acs.manager.manager.entity.Agv; import com.zy.acs.manager.manager.entity.AgvDetail; import com.zy.acs.manager.manager.entity.Segment; import com.zy.acs.manager.manager.entity.Travel; import com.zy.acs.manager.manager.enums.SegmentStateType; 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.Component; import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.interceptor.TransactionAspectSupport; import java.util.ArrayList; import java.util.Date; import java.util.List; /** * Wavefront * Created by vincent on 6/25/2024 */ @Slf4j @Component public class TrafficZkdService { @Autowired private AgvService agvService; @Autowired private AgvDetailService agvDetailService; @Autowired private CodeService codeService; @Autowired private TravelService travelService; @Autowired private SegmentService segmentService; @Autowired private MainService mainService; @Autowired private MainLockWrapService mainLockWrapService; @Autowired private MapService mapService; @Autowired private MapDataDispatcher mapDataDispatcher; @Autowired private SnowflakeIdWorker snowflakeIdWorker; @Autowired private AgvModelService agvModelService; @Autowired private RetreatNavigateService retreatNavigateService; @Autowired private ConfigService configService; @Autowired private JamService jamService; @Autowired private AvoidWaveCalculator avoidWaveCalculator; @Autowired private TaskService taskService; @Autowired private FuncStaService funcStaService; @Transactional public synchronized void trigger(Segment segment) { try { Date now = new Date(); // temporary ----------------- Integer algoExtensionTime = configService.getVal("algoExtensionTime", Integer.class); if (null != algoExtensionTime && algoExtensionTime > 0) { Thread.sleep(algoExtensionTime); } // --------------------------- Travel travel = travelService.getById(segment.getTravelId()); Agv agv = agvService.getById(travel.getAgvId()); AgvDetail agvDetail = agvDetailService.selectByAgvId(travel.getAgvId()); long endNode = segment.getEndNode(); if (!Cools.isEmpty(segmentService.getByAgvAndState(agv.getId(), SegmentStateType.RUNNING.toString()))) { return; } List waitingSegList = segmentService.getByAgvAndState(agv.getId(), SegmentStateType.WAITING.toString()); if (!Cools.isEmpty(waitingSegList)) { for (Segment waitingSeg : waitingSegList) { if (!waitingSeg.getId().equals(segment.getId())) { // log.error("AGV[{}] 任务异常,服务器错误!!!", agv.getUuid()); return; } } } List segmentList = new ArrayList<>(); segmentList.add(segment); mainService.generateAction(segment.getAgvId(), segmentList, pathList, now); } catch (Exception e) { log.error("TrafficService.trigger", e); TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); } } }