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 MainZkdService mainZkdService; @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); List pathList = new ArrayList<>(); String[] split = segment.getPath().split(","); for (int i = 0; i < split.length; i++) { if (!Cools.isEmpty(split[i])) { pathList.add(split[i]); } } mainZkdService.generateAction(segment.getAgvId(), segmentList, pathList, now); } catch (Exception e) { log.error("TrafficService.trigger", e); TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); } } }